1. 程式人生 > 其它 >linux磁碟管理 磁碟冗餘陣列

linux磁碟管理 磁碟冗餘陣列

總結mount命令用法,引數、掛載選項

mount命令可以將指定的檔案系統,掛載到指定的目錄(掛載點),再linux系統下必須先掛載後才能訪問裝置資料
mount  /dev/sdb  /mnt  #把sdb這個磁碟掛載到/mnt這個目錄

mount -l 顯示掛載情況


mount -a 讀取/etc/fstab所有的掛載設定


mount -o 選項
mount -o ro 只讀
mount -o rw 讀寫
mount -o rw,exec 允許執行
mount -o noexec,rw 不允許執行
-l	顯示系統以掛載的裝置資訊
-a	載入檔案/etc/fstab中設定的所有裝置
-t	t<檔案系統型別> 指定裝置的檔案系統型別。如果不設定,mount自行選擇掛載的檔案型別 minix Linux最早使用的檔案系統。 ext2 Linux目前的常用檔案系統。 msdos MS-DOS 的 FAT。 vfat Win85/98 的 VFAT。 nfs 網路檔案系統。 iso9660 CD-ROM光碟的標準檔案系統。 ntfs Windows NT的檔案系統。 hpfs OS/2檔案系統。Windows NT 3.51之前版本的檔案系統。 auto 自動檢測檔案系統。
-o	添加掛載選項,是安全、效能優化重要引數
-r	只讀,等於-o ro
-w	讀寫,等-o rw
mount -o選項詳解
引數	含義
async	以非同步方式處理檔案系統I/O操作,資料不會同步寫入磁碟,而是寫到緩衝區,提高系統性能,但損失資料安全性
sync	所有I/O操作同步處理,資料同步寫入磁碟,效能較弱,資料安全性高
atime/noatime	檔案被訪問時是否修改時間戳,不更改時間,可以提高磁碟I/O速度
auto/noauto	通過-a引數可以自動被掛載/不自動掛載
defaults	預設值包括rw、suid、dev、exec、auto、nouser、async,/etc/fstab大多預設值
exec/noexec	是否允許執行二進位制程式,取消提供安全性
suid/nosuid	是否允許suid(特殊許可權)生效
user/nouser	是否允許普通使用者掛載
remount	重新掛載
ro	只讀
rw	讀寫

退出光碟的命令

Eject彈出裝置命令
eject # 彈出光碟機

eject -r /dev/sr0 # 指定裝置彈出

inode、block、硬連結

檔案屬性檢視

[root@bogon ~]# ll -h tet.log 
-rw-r--r--. 1 root root 5 Apr  7 16:34 tet.log

檔案許可權, 硬連結數量,屬主,屬組,檔案大小,檔案修改時間,檔名

檢視檔案、資料夾的inode資訊

可以用stat命令,檢視某個檔案的具體inode資訊

[root@bogon ~]# stat tet.log 
  File: ‘tet.log’
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 36771844    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-04-07 16:33:41.488885493 +0800
Modify: 2022-04-07 16:34:01.878883907 +0800
Change: 2022-04-07 16:34:01.878883907 +0800
 Birth: -
[root@bogon ~]# ll -hi tet.log 
36771844 -rw-r--r--. 1 root root 5 Apr  7 16:34 tet.log



[root@bogon ~]# ll -hi /opt
total 0
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2


[root@bogon ~]# stat /opt
  File: ‘/opt’
  Size: 30        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 83          Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:usr_t:s0
Access: 2022-04-07 17:18:12.363677726 +0800
Modify: 2022-04-07 16:58:09.023771334 +0800
Change: 2022-04-07 16:58:09.023771334 +0800
 Birth: -

什麼是inode

linux的檔名,其實是分為了【元資料】+【檔案內容】,兩部分

元資料,也就是檔案的屬性資訊,可以通過stat命令檢視到

一個新的磁碟,格式化檔案系統後,就有了2個儲存空間,一個叫做
inode儲存空間,儲存裝置上,所有檔名,對應的元資料資訊(檔案的屬性資訊)
一個叫做block儲存空間(儲存裝置上,所有的檔案的內容,資料都在這)

儲存元資料資訊的空間,被稱之為Inode

儲存檔案資料的空間,被稱之為block


linux讀取檔案內容,其實是 以  檔名 > inode編號 > block 的順序來讀取


在你建立檔案前必須先要分割槽、格式化(建立檔案系統)
建立檔案系統後inode和block的數量就會固定下來。
mkfs.xfs /dev/sdc 格式化xfs檔案系統後,inode和block的數量就固定下來了
可以通過xfs_info檢視


每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。
[root@bogon ~]# ls -l -i /opt
total 0
 3635430 -rw-r--r--. 1 root root 0 Apr  7 18:14 666.log
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2

通過ls -i引數,檢視檔案,資料夾的inode號碼

Unix/Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。

表面上,使用者通過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,通過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。


使用如下命令,檢視檔案的inode號
ls -i

為什麼linux要設計inode

理解inode,要從檔案儲存說起。

檔案儲存在硬碟上,硬碟的最小儲存單位叫做"扇區"(Sector)。每個扇區儲存512位元組(相當於0.5KB)。

作業系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是檔案存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個 sector組成一個 block。

檔案資料都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。

每一個檔案都有對應的inode,裡面包含了與該檔案有關的一些資訊。

對inode和block的理解

一個新的磁碟,格式化檔案系統後,就有了兩個儲存空間,

一個叫做inode儲存空間,儲存裝置上,所有檔名,對應的元資料資訊(檔案的屬性資訊)
linux系統內部不使用檔名,而是使用inode號碼來識別檔案,對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號

一個叫做block儲存空間,(儲存裝置上所有的檔案的內容,資料都在這裡)
block是linux實際儲存資料的空間,是8個連續的扇區,(8*512bytes=4KB)
單個大檔案需要用多個block來儲存
特別小的檔案即使不滿足4KB,也只能浪費其空間
1 block = 4KB


儲存元資料資訊的空間,被稱為inode
儲存檔案資料的空間,被稱為block

linux讀取檔案內容,其實是以檔名 > inode編號 > block  的順序來讀取的
使用者通過檔名,開啟檔案。實際上系統內部這個過程分為了三步:
首先,系統找到這個檔名對應的inode號碼;
其次:通過inode號碼,獲取inode資訊;
最後:根據indoe資訊,找到檔案資料所在的block,讀取資料

inode儲存哪些內容

inode 包含很多的檔案元資訊,但不包含檔名
每一個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案

檔案的位元組數

檔案的擁有者的User ID

檔案的Group ID

檔案的讀寫執行許可權

檔案的時間戳,總共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間

檔案資料block的位置

linux的檔名、和inode、block的關係

在建立檔案前必須要先分割槽,格式化建立檔案系統,在建立檔案系統後inode和block的數量就會固定下來,
inode儲存空間,儲存裝置上,所有檔名,對應的元資料資訊(檔案的屬性資訊)
block儲存空間,(儲存裝置上所有的檔案的內容,資料都在這裡)

linux讀取檔案內容,其實是以檔名 > inode編號 > block  的順序來讀取的
使用者通過檔名,開啟檔案。實際上系統內部這個過程分為了三步:
首先,系統找到這個檔名對應的inode號碼;
其次:通過inode號碼,獲取inode資訊;
最後:根據indoe資訊,找到檔案資料所在的block,讀取資料

資料夾和檔案的關係、從inode的角度理解

目錄是個特殊檔案,目錄儲存的時當前目錄的檔名字
資料夾就是方便人類記憶檔案存在哪裡,然後通過這個檔名,找到對應的檔案inode號
inode號裡記錄了檔案資料所處的block位置,最終訪問到資料




每個inod都有一個號碼,作業系統用indoe號碼來識別不同的檔案
可以通過ls -i引數來檢視檔案,資料夾的indoe號碼
[root@bogon ~]# ls -lh -i /opt
total 0
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2

刪除檔案和inode、block的關係

硬連結、軟連線的區別,以及用法

軟連線,檔案儲存的時原始檔的路徑
1,建立軟連線  ln -s
2,訪問軟連線檔案
3,其實時訪問到原始檔的路徑,原始檔的檔名
4,訪問原始檔的indoe號   ls -i
5,indoe找到block,訪問到資料

軟連線檔案的inode號和原始檔不同,作用時儲存原始檔的路徑
刪除普通軟連線,不影響原始檔
刪除原始檔,軟連線找不到目標,報錯提示

硬連結就是一個數據(block)被多個相同的indoe號的檔案指向
注意:不得跨分割槽設定(indoe號,是基於分割槽來建立的)
表示檔案,屬性完全一致,資料也是同一個block區域
稱之為硬連結
由於資料夾中存在兩個特殊的子目錄,
一個是 . 當前目錄,表示其本身
一個是 .. 上一級目錄,也可以通過它,找到當前目錄
如果修改檔案的硬連結數,要在它的第一層資料夾中,建立子資料夾,即可增加硬連結的數量
硬連結建立語法
ln 原始檔 目標檔案

硬連結特點
1.可以對已存在的檔案做硬連結,該檔案的硬連結數,至少是1,為0就表示檔案不存在
2.硬連結的檔案,inode相同,屬性一致
3.只能在同一個磁碟分割槽下,同一個檔案系統下建立硬連結
4.不能對資料夾建立硬連結,只有檔案可以
5.刪除一個硬連結,不影響其他相同inode號的檔案
6.資料夾的硬連結,預設是2個,以及是2+(第一層子目錄總數)=資料夾的硬連結數量
7.可以用任意一個硬連結作為入口,操作檔案(修改的其實是block中的資料)
8.當檔案的硬連結數為0時,檔案真的被刪除

檢視分割槽的inode和block數量(xfs_info)

inode和block的數量,是在你mkfs建立檔案系統的時候,就已經確定好了

ext4的檔案系統,檢視檔案系統資訊的命令,dumpe2fs

xfs檔案系統,檢視檔案系統資訊的命令,xfs_info

檢視xfs檔案系統的資訊

isize表示inode的容量=512bytes(位元組)

sectsz表示扇區=512bytes

bsize表示block容量:是4096bytes = 4KB

blocks = 4096*5242624 =21473787904
可見/dev/sdc1分割槽的總容量是 20G左右

檢視某分割槽,有多少block讓你用,(檢視這個磁碟,分割槽還有多少容量)

df -h  # -h引數,是友好的顯示容量單位,如kb ,mb,gb

檢視某分割槽,一共有多少inode容量編號給我們用

[root@bogon ~]# df -i
Filesystem                Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/centos-root  8910848 132280  8778568    2% /
devtmpfs                  500499    429   500070    1% /dev
tmpfs                     503553      1   503552    1% /dev/shm
tmpfs                     503553   1280   502273    1% /run
tmpfs                     503553     16   503537    1% /sys/fs/cgroup
/dev/sda1                 524288    326   523962    1% /boot
tmpfs                     503553      1   503552    1% /run/user/0
/dev/sdc1               10485248      3 10485245    1% /mnt


[root@bogon ~]# df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root   8.5M  130K  8.4M    2% /
devtmpfs                  489K   429  489K    1% /dev
tmpfs                     492K     1  492K    1% /dev/shm
tmpfs                     492K  1.3K  491K    1% /run
tmpfs                     492K    16  492K    1% /sys/fs/cgroup
/dev/sda1                 512K   326  512K    1% /boot
tmpfs                     492K     1  492K    1% /run/user/0
/dev/sdc1                  10M     3   10M    1% /mnt

inode的作用

df -h
檢視磁碟block空間的使用情況,如果看到分割槽快滿了,可以去刪除大容量的檔案


df -i 
inode儲存檔案屬性的
當你機器上有大量的無用的小檔案,空檔案,白白消耗inode數量

檢視磁碟分割槽inode空間的使用情況,如果可用的不多的,刪除大量的4kb小檔案即可,因為它們真用了太多的無效inode編號,應該留給別人用。

明明 df -h看到磁碟還是有空間,但是寫入資料,系統提示你
no space for disk,你雖然還有block空間可以存資料
但是你的inode數量肯定是沒了

touch 建立新檔案,想分配inode編號,發現不夠用了

raid技術的作用

raid磁碟列陣組能夠提升資料冗餘性,當然也增加了硬碟的價格成本,需要更多的硬碟,只不過資料本身的價值是超過硬碟購買的價格的,raid除了能夠保障資料丟失造成的嚴重損失,還能提升硬碟的讀寫效率,被應用在廣泛的企業中

raid0

是將兩個或者兩個以上相同的型號,容量的硬碟組合,磁碟陣列的總和便是多個硬碟的總和
paid的特點
至少需要兩塊磁碟
資料==條帶化==分佈到磁碟==,高的讀寫效能==100%==高儲存的空間利用率
資料==沒有冗餘策略==一塊磁碟故障,資料將無法恢復
應用場景:對效能要求不高但對資料安全性,和可靠性要求不高的場景,比如音訊,視訊儲存等
由於raid 0的特性,資料一次寫入到各個物理硬碟中,資料是分開放的,因此損壞任意一個磁碟都會對完整的資料破壞,對於企業來說,是不允許的

raid1

paid 1技術,是將兩塊以上的硬碟繫結,資料寫入時,同時寫入多個硬碟,因此即使有硬碟故障,也有資料備份
但是這種方式,會極大降低磁碟的利用率,假設兩塊磁碟一共4T,真實資料只有2T,利用率只有2T,利用率50%,如果是三塊硬碟組成raid 1,利用率只有33%,也是不可取的

至少需要兩塊磁碟
資料==映象備份==寫到磁碟上(工作盤和映象盤)==可靠性高,==磁碟利用率為50%
讀效能可以,但是寫效能不佳,寫入資料要同步,因此速度很慢
一塊磁碟故障,不會影響資料的讀寫,因為是映象磁碟,冗餘性好,只要有一塊是好的,資料還是會轉的
raid 1 應用場景:
對資料安全可靠要求較高的場景,比如郵件系統,交易系統等

Raid5

至少需要3塊磁碟,
資料==條帶化==儲存在磁碟==讀寫效能好==磁碟利用率為(n-1)/n
一塊磁碟故障,可根據其他資料塊和對應的校驗資料重構損壞資料(消耗效能)
校驗演算法是計算機二進位制的異或運算
只能允許壞掉一塊硬碟
是目前綜合==效能最佳的資料保護解決方案
兼顧了儲存效能,資料安全和儲存成本等各方面因素(價效比高)
適用於大部分的應用場景

Raid6

比raid5提供的資料校驗,又多了一層校驗,雙層校驗

至少需要4塊磁碟
資料==條帶化==儲存在磁碟,讀取效能好,容錯能力強
採用==雙重校驗==方式保證資料的安全性
如果2快磁碟同時故障,可以通過兩個校驗資料來重建兩個磁碟的資料
成本要比其他等級高,平且更復雜
一般用於對資料安全性要求非常高的場合

raid10

raid10是raid1+raid0的組合
至少需要4快磁碟
兩塊硬碟為一個組,先做raid1,再將做好的raid1的兩組做raid0
兼顧資料的冗餘,(raid1映象)和讀寫效能(raid0資料條帶化)
磁碟利用率50% ,成本高
只要壞的不是同一個組中所有的硬碟,就算壞掉一半的硬碟都不會丟資料
因此raid10是最實用的方案

硬raid、軟raid區別

軟體控制的raid磁碟冗餘陣列
由於cpu去控制硬碟驅動器進行資料轉換,計算的過程就是軟體raid
軟raid執行==作業系統底層==將SCSI或者IDE的控制器提交上來的物理磁碟,虛擬成虛擬磁碟,再提交給管理程式來進行管理
佔用記憶體空間
佔用cpu資源
如果程式或者作業系統故障就無法執行
基於以上的缺陷,所以現在企業很少用軟raid





硬體控制
由專門的raid卡上的主控晶片操控,就是硬體raid
通過用硬體來實現raid功能的就是硬raid,獨立的raid卡,主機板整合的raid晶片都是硬raid
raid卡就是用來實現raid功能的板卡,通常是由I/O處理器,硬碟控制器,硬碟聯結器的快取等一系列零元件構成的
不同的raid卡支援的raid功能不同,支援raid0,raid1,raid4,raid5,raid10不等

軟體raid額外消耗cpu資源,效能弱
硬體raid更加穩固,軟體raid可能造成磁碟發熱過量,造成威脅
相容性問題,軟體raid依賴作業系統,硬體raid勝出
可見,硬體raid,比軟體raid強

建立raid10

[root@bogon ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  


[root@bogon ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@bogon ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda               8:0    0   20G  0 disk   
├─sda1            8:1    0    1G  0 part   /boot
└─sda2            8:2    0   19G  0 part   
  ├─centos-root 253:0    0   17G  0 lvm    /
  └─centos-swap 253:1    0    2G  0 lvm    [SWAP]
sdb               8:16   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sdc               8:32   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sdd               8:48   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sde               8:64   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sr0              11:0    1  4.2G  0 rom