1. 程式人生 > 實用技巧 >磁碟及檔案系統管理

磁碟及檔案系統管理

磁碟及檔案系統管理

ext2ext3ext4xfsblkide2labelmkfsmke2fsdumpe2fstune2fsfsck硬連結軟連結journal

歡迎來到 來到大浪濤天的部落格

一、磁碟及檔案系統管理

1. 計算體系簡介:

  1. 在計算機系統裡,最重要的三大元件是計算器,儲存器,IO互動。
  2. 計算器主要是指cpu,目前cpu的主頻很高,執行速度很快,而普通的IO裝置讀取又很慢,瓶頸非常嚴重。
  3. 記憶體的出現,在cpu和記憶體通過匯流排,cpu需要處理的資料提前從硬碟提前到記憶體,然後再轉入cpu處理,cpu處理完成後再返回記憶體,記憶體再寫入硬碟。
  4. 在一些比較高階的cpu上,如i5或者i7甚至i9,因為cpu內含多核心多執行緒,處理速度急速上升,記憶體也不能完全滿足,因此在cpu上自帶快取器,1級快取,2級快取,3級快取等等。
  5. 所以說目前的計算領域中硬體的瓶頸都是體現在IO裝置上。
  6. IO主要是硬碟(塊裝置)和顯示器鍵盤(字元裝置)類的裝置,其中硬碟因為是作為主儲存器,在資料為王的時代裡,顯得尤為重要。

2. 裝置型別

  1. 塊裝置(block):隨機訪問,資料交換單位是“塊”。
  2. 字元裝置(character):線性訪問,資料交換單位是“字元”。

3. 磁碟分類

  1. IDE介面:並口,133M/S
  2. SCSI:並口,320M/S-640M/S
  3. SATA:串列埠,6gbps
  4. SAS:串列埠,6gbps
  5. USB:串列埠,480M/S
  6. SSD:特別是PCI-E介面的固態硬碟速度達到32gbps,每秒讀寫速度3000M,和機械硬碟不是一個時代的產品,會成為機械硬碟的替代品。好一點的SAS機械硬碟IOPS只有100多一點,而好一點的企業級固態硬碟
    可以達到數十萬的IOPS。

4. 機械硬碟結構:


機械硬碟的磁碟結構
機械硬碟到目前都是採用最原始的技術,慢慢的肯定會淪落到磁帶裝置的型別,再過幾年肯定會被固態硬碟替代。

  1. 磁軌(track)
  2. 機械臂
  3. 扇區(sector),一個扇區512個位元組
  4. 柱面(cylinder),不同盤面的同一個編號的磁軌就叫柱面,真正的分區劃分儲存是基於柱面實現的,最靠外的柱面的效能最好,因此最外層磁軌較長,單位時間記憶體儲的資料也就越多。

5. 磁碟分割槽:MBR GPT

MBR(Master boot record)位於0扇區,MBR分為三部分:

  1. 446byters:bootoader,程式,引導啟動作業系統的程式。
  2. 64byters:分割槽表,每16byters表識一個分割槽,所以一共只能標識4個分割槽。
  3. 2byters:MBR區域的有效標識,55AA為有效。

6. fdisk命令

6-1. fdisk 命令用法:

 fdisk [選項] <磁碟>    更改分割槽表
 fdisk [選項] -l <磁碟> 列出分割槽表
 fdisk -s <分割槽>        給出分割槽大小(塊數)

fdisk 提供了一個互動式的介面來管理分割槽,包含一些子命令,分別用於不同的管理功能;所有操作均在記憶體中完成,沒有直接同步到磁碟,直到使用w命令儲存到磁碟上。
常用命令:

  n                    建立新分割槽
  d                    刪除已有分割槽
  t                    修改分割槽型別
  w                    儲存並退出
  q                    不儲存並退出
  m                    檢視幫助資訊
  p                    列印分割槽資訊

注意:在已經分割槽並且已經掛載其中某個分割槽的磁碟裝置上建立新分割槽,核心可能在建立完成後無法直接識別;需要通知核心強制重讀磁碟分割槽表:

檢視核心是否識別分割槽
[root@test01 ~]# cat /proc/partitions
通知核心強制重讀磁碟分割槽表
centos5:partprobe [device]
centos6,7:partx -a [device]; kpartx -af [device]
[root@test01 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-2

7. 磁碟格式化

磁碟格式化分為:

  • 低階格式化:分割槽之前完成,磁碟硬體廠商在出廠時完成,用於劃分磁軌
  • 高階格式化:分割槽之後完成,建立檔案系統

7-1. 檔案系統

  1. 檔案系統分為元資料區,資料區;
  2. 元資料區包含檔案元資料inode(index node),大小、許可權、屬主屬組、時間戳、資料塊指標.....值得注意的是不包含檔名
  3. 因為inode的格式都是一樣的,只是內容不一樣,因此建立檔案系統的時候會提前把inode都劃分好,只是不包含資料,沒有使用的inode就是空的,inode的大小都是一樣的,大小單位是位元組。
  4. 資料存在block中,block可以在分割槽的時候決定大小,檔案儲存按檔案的大小一次提供多少block,如果block的使用是連續的表示磁碟良好,如果不連續代表存在碎片。
  5. 因為block是最小的儲存單元,如果需要儲存的資料都是小檔案,那block設定小一點比較好,如果是大檔案,則block可以相對設定大一些,這樣效能比較好
  6. 單個檔案的大小是有上限的,原因是inode裡包含的資料塊的指標儲存空間是有限的,當單個檔案越大,資料塊的指標就越多,這樣當大到資料塊的指標空間存不下指標後,這樣就是大檔案的儲存上限。
  7. 企業當中不同的檔案系統設計是各不相同的。
  8. 符號連結檔案:儲存資料指標的空間當中儲存的是真實檔案的訪問路徑,都是不佔用block的資料塊空間的
  9. 裝置檔案:儲存資料指標的空間當中儲存的是裝置的主裝置號和次裝置號,都是不佔用block的資料塊空間的
  10. 任何資料塊均必須要元資料來指向,因此inode必須要大於block的3-4倍(具體要根據歷史經驗來分析),不然inode佔用完了,但是block卻只用了1/3,剩餘的block因為缺少inode指向而無法使用。
  11. 預留空間,在資料區域有一塊資料區預留,防止磁碟空間用滿後,供超級管理員來進行操作處理。
  12. 點陣圖索引,在資料區有一段位置存放點陣圖索引,位置對應每一個數據塊,而且只標誌0(未使用)-1(已使用)
  13. 檔案系統建立的時候一般會平均分成多個邏輯塊組,每個塊組包含自己的元資料區和資料區,當一個塊組無法存下檔案,可以延伸到下一個塊組來取block。
  14. 超級塊,裡面包含了檔案系統分為了多少個塊組,每個塊組的起止位置,因為超級快本身也是塊,因此它也是存在某些的塊組當中。
  15. 每個塊組裡都包含了一個數據塊描述符,資料塊描述符包含了塊組內含的所有塊以及元資料。塊組不一定有超級快,但是一定有資料塊描述符。
  16. 每個元資料都包含了一個編號,ls -i可以看到每個元資料的編號,需要檢視元資料內容則需要stat 檔名。
  17. 目錄其實是路徑的對映,比方/var/log/messages的查詢過程:
    1. 首先定位/的inode,這是固定的,通過/的inode可以在資料區中找到/的資料塊
    2. /的資料塊裡面包含了所有和/相連線的目錄及對應的inode,在/的資料塊中定位到/var對應的inode
    3. 通過/var的inode在元資料區中定位到了/var的資料塊,/var的資料塊中包含了所有和/var對應的下一級目錄以及相應的inode,進而找到/var/log/的inode
    4. 通過/var/log的inode在元資料區中定位到了/var/log的資料塊,/var/log的資料塊中包含了所有和/var/log對應的下一級目錄以及相應的inode,進而找到/var/log/messages的inode.
    5. 通過/var/log/messages的inode在元資料區中定位到了/var/log/messages的資料塊,此時messages是一個檔案,因此inode裡包含了所有儲存messge這個檔案的block的資料塊指標,通過這些指標定位到具體數量及位置的block。

7-2. VFS:virtual file system

Linux為了支援各種檔案系統,在真實的檔案系統上面抽象了一層虛擬層,也就是VFS層,這樣使用者儲存檔案因為有VFS做轉化不需要關心下層的檔案系統。

  • Linux支援的檔案系統有:ext2、ext3、ext4、xfs、reiserfs、brrfs
  • 光碟檔案系統:iso9660
  • 網路檔案系統:nfs、cifs
  • 叢集檔案系統: gfs2、ocfs2
  • 核心級分散式檔案系統:ceph
  • Windows檔案系統:vfat、ntfs
  • 偽檔案系統:proc、sysfs、tmpfs、hugepagefs
  • unix檔案系統: ufs、ffs、jfs
  • 交換檔案系統: swap
  • 使用者空間的分散式檔案系統:mogilefs、moosefs、glusterfs

7-3. 檔案系統管理工具:

7-3-1. 建立檔案系統的工具:mkfs

mkfs.ext2、mkfs.ext3、mkfs.ext4、mkfs.xfs、mkfs.vfat

7-3-2. ext系列檔案系統專用管理工具:mke2fs

mke2fs語法:

mke2fs [options] device

mke2fs選項如下:

-t {ext2|ext3|ext4};指明要建立檔案系統的型別
    mkefs.ext4=mkfs -t ext4=mke2fs -t ext4
-b {1024|2048|4096}:指定檔案系統的塊大小
-L LABLE:指明卷標
-j:建立具有日誌功能的檔案系統ext3
    mke2fs -j=mke2fs -t ext3=mkfs -t ext3=mkfs.ext3
-i#:指明inode與位元組的比率,即多少位元組建立一個inode
-N#:直接指明要給此檔案系統建立的inode的數量
-m#:指定預留的空間,百分比
-O :以指定的特性建立目標檔案系統

7-3-3. ext系列檔案系統專用管理工具:e2label

卷標的檢視與設定
檢視:e2label device
更改:e2label device LABLE
確認: blkid device

7-3-4. ext系列檔案系統專用管理工具:tune2fs

檢視或修改ext系列檔案系統的某些屬性,注意塊的大小一旦建立檔案系統後便無法再次修改
語法:

tune2fs [option] device

修改指定檔案系統的屬性:

-j:ext2-ext3
-L LABLE:修改卷標
-m# :更改預留的空間,百分比
-O:開啟或關閉某種特性

7-3-5. ext系列檔案系統專用管理工具:dumpe2fs

檔案系統的具體檢視:

檢視:dumpe2fs  -h /dev/sdb (-h 檢視粗略資訊)
dumpe2fs   /dev/sdb (不帶h是顯示詳細資訊)

7-3-6. 檢測及修復檔案系統的工具:fsck

fsck.ext2、fsck.ext3、fsck.ext4、fsck.xfs、fsck.vfat

因程序意外中止或系統奔潰等原因導致既定操作非正常終止時可能導致檔案損壞,此時應該檢測並修復檔案系統,建議離線進行。
ext系列檔案系統的專用修復工具:e2fsck - check a Linux ext2/ext3/ext4 file system
語法:

e2fsck [option] device

選項:

-y:對所有問題自動回覆為yes
-f:即使檔案系統處於clean狀態,也強制進行檢測

LINUX的通用修復工具:fsck - 檢查並修復Linux檔案系統
語法:

fsck [option] device

選項:

-t fstype:指定檔案系統,不指定也可以
-a:自動修復所有的錯誤,不建議使用,fsck修復就是刪除日誌區所有未完成寫入的檔案,可能會丟資料導致欲哭無淚
-r:互動式修復錯誤

7-3-7. blkid

blkid - locate/print block device attributes
用法:

blkid device

定位裝置

blkid -L LABLE:通過卷標來定位裝置
blkid -U UUID:通過UUID來定位裝置

7-3-8. 檢視檔案系統屬性的工具

dump2fs、tune2fs

7-4. 連結檔案

連結檔案是:指向一個檔案的不同路徑,分為硬連結和軟連結

7-4-1. 硬連結:指向同一個inode的多個檔案路徑

  1. 目錄不支援硬連結(防止死迴圈)
  2. 硬連結不能跨檔案系統,因為硬連結和原檔案具有相同的inode,而不同的檔案系統inode分配不同
  3. 建立硬連結會增加inode的引用計數。
7-4-1-1. 建立方法
ln src link_file

7-4-2. 軟連結:符號連結,指向一個檔案路徑的另一個檔案

  1. 符號連結與原檔案是兩個相互獨立的檔案,各有各自的inode,對原檔案建立符號連結不會增加引用計數。
  2. 支援對目錄建立符號連結,可以跨檔案系統
  3. 刪除符號連結檔案不影響原檔案,但是刪除原檔案,符號指定的路徑不存在,此時會變成無效連結
  4. 因為符號連結只是提供一個指向另一個檔案的路徑,因此對另一個檔案內容不識別,只要另外一個檔案的路徑存在就可以了
[root@test01 ~]# cp /etc/fstab /tmp/fstab
[root@test01 ~]# ln -s /tmp/fstab fstab.slink
[root@test01 ~]# ls -l fstab.slink 
lrwxrwxrwx 1 root root 10 6月   3 21:54 fstab.slink -> /tmp/fstab
[root@test01 ~]# rm -f /tmp/fstab 
[root@test01 ~]# ls -l fstab.slink 
lrwxrwxrwx 1 root root 10 6月   3 21:54 fstab.slink -> /tmp/fstab(紅而且閃,代表符號連結無效)
[root@test01 ~]# cp /etc/issue /tmp/fstab
[root@test01 ~]# ls -l fstab.slink 
lrwxrwxrwx 1 root root 10 6月   3 21:54 fstab.slink -> /tmp/fstab(正常狀態)

7-5. 檔案系統的journal日誌功能

Linux檔案系統中除了ext2不具備日誌功能,其他的檔案系統都有日誌功能,支援日誌功能的檔案系統在建立檔案系統的時候會在儲存空間劃分一塊區域作為日誌區域,檔案寫入的過程如下:

  1. 檔案寫入,先在日誌區域寫入一個inode
  2. 資料塊區域先8個塊,8個塊的分配儲存,當儲存完成後,日誌區域寫入的inode移動到元資料區
  3. 當還沒儲存完成,由於斷電或其他問題導致無法儲存的時候,日誌區域的inode會持續儲存
  4. 待重新開機後文件系統會自動掃描日誌區域的inode,看能否續存,如果不能則會自動刪除無效資料
  5. 帶有journal日誌功能的檔案系統相對來說更安全,但是因為inode要寫入兩次,效能相對來說較差一些