隨著 Linux 的版本演進,其檔案系統也不斷的在更新,在 Linux 中常見的檔案系統有 Ext 2、Ext 3 與 Ext 4 這幾種,這些檔案系統都是為了 Linux 而設計的,本篇主要在介紹這幾種檔案系統的主要差異,與一些相關 Linux 指令的使用方式。
檔案系統簡介
這裡介紹 Ext 2、Ext 3 與 Ext 4 這些檔案系統的特色,與其中主要的差異。
Ext 2 檔案系統
Ext 2(second extended file system)檔案系統誕生於西元 1993 年,是為了改善既有的 Ext 檔案系統而設計的,以下是這個檔案系統的特色:
- 沒有日誌(journaling)功能。
- 因為沒有日誌功能,Ext 2 檔案系統比較適合用於 flash 的儲存設備或一般 USB 隨身碟。
- 磁碟容量最大可以支援到 32 TB。
- 單一檔案最大可以支援到 2 TB。
Ext 3 檔案系統
Ext 3 檔案系統誕生於西元 2001 年,顧名思義就是 Ext 2 的下一版,Linux 的版本從 Kernel 2.4.15 開始支援這個檔案系統,其特色如下:
- 加入日誌功能,日誌功能是在硬碟中規劃出一個區塊,專門用於記錄資料寫入與修改的動作,如果在硬碟寫入的過程發生問題,可以藉由日誌的紀錄加速硬碟的修復,日誌的記錄方式可分為三種:
- Journal:記錄 Metadata 與內容。
- Ordered:只記錄 Metadata,在內容寫入磁碟之後,記錄 Metadata,此為預設選項。
- Writeback:只記錄 Metadata,在內容寫入磁碟之前或之後,記錄 Metadata。
- 磁碟容量最大可以支援到 32 TB。
- 單一檔案最大可以支援到 2 TB。
- Ext 2 的檔案格式可以直接轉換成 Ext 3,不需要經過額外備份與還原的動作。
Ext 4 檔案系統
Ext 4 檔案系統是 Ext 3 的下一版,誕生於西元 2008 年,Linux 的版本從 Kernel 2.6.19 開始支援,特色如下:
- 支援大容量的磁碟與單一檔案:
- 磁碟容量最大可以支援到 1 EB(1 EB = 1024 PB,1 PB = 1024 TB)。
- 單一檔案最大可以支援到 16 TB。
- 單一目錄最多可以存放 64,000 個子目錄(在 Ext 3 只能存放 32,000 個)。
- 相容於 Ext 3 檔案格式,可以直接以 Ext 4 的檔案格式掛載(mount)Ext 3 檔案系統的磁碟。
- 提供將日誌功能關閉的選項。
- 其餘 Ext 4 新功能有:multiblock allocation、delayed allocation、journal checksum、fast fsck 等,這些都是改善 Ext 3 效率與可靠性的功能。
判斷檔案系統
目前 Linux 最新的檔案系統是 Ext 4,如果想要把檔案系統更新為 Ext 4,首先就是要確認目前所使用的檔案系統是哪一個,這裡介紹一些判斷檔案系統的方式。
方法一:使用 df 指令
第一種方式是使用 df 指令:
df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
輸出為
/dev/sda1 ext4 / /dev/sdb1 ext4 /ruser
很明顯的可以看到,第二個欄位就是檔案系統名稱。
方法二:使用 mount 指令
使用 mount 指令:
mount | grep "^/dev"
輸出為
/dev/sda1 on / type ext4 (rw,errors=remount-ro) /dev/sdb1 on /ruser type ext4 (rw)
這個輸出也很明顯可以分辨檔案系統。
方法三:使用 file 指令
使用 file 指令會輸出更多的資訊,但缺點是需要 root 權限。
sudo file -sL /dev/sda1
輸出為
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=684530e1-df5c-48d7-b3e4-eb0d47054877 (needs journal recovery) (extents) (large files) (huge files)
另一顆硬碟:
sudo file -sL /dev/sdb1
輸出為
/dev/sdb1: Linux rev 1.0 ext4 filesystem data, UUID=146d3bb3-e351-45c8-ac84-42534ce51d29 (needs journal recovery) (extents) (large files) (huge files)
方法四:查看 /etc/fstab 檔案
如果您要檢查的檔案系統有設定好自動掛載的話,也可以直接看 /etc/fstab 這個檔案。
cat /etc/fstab
輸出為
# /etc/fstab: static file system information. # # Use 'blkid -o value -s UUID' to print the universally unique identifier # for a device; this may be used with UUID= as a more robust way to name # devices that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/sda1 during installation UUID=684530e1-df5c-48d7-b3e4-eb0d47054877 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation UUID=35ddf35e-87de-4ab0-88d1-2a654d36b19a none swap sw 0 0 # /home was on /dev/sdb1 during installation #UUID=9746f325-1c82-4c04-b447-b5c596eea6c1 /backup ext4 defaults 0 2
其中的 swap 是 Linux 的暫存硬碟,這裡不用理會他。
方法五:使用 fsck 指令
使用 fsck 指令:
fsck -N /dev/sda1
輸出為
fsck from util-linux-ng 2.17.2 [/sbin/fsck.ext4 (1) -- /] fsck.ext4 /dev/sda1
另一顆硬碟:
fsck -N /dev/sdb1
輸出為
fsck from util-linux-ng 2.17.2 [/sbin/fsck.ext4 (1) -- /ruser] fsck.ext4 /dev/sdb1
以上幾種判斷檔案系統的方式,輸出都大同小異,可依照喜好自行選擇要使用哪一的方式。
建立與轉換檔案系統
注意事項:以下的指令僅供參考,不可直接複製執行,請依照您系統的設定自行修改指令內容,若不當使用,可能造成系統或資料損毀!
建立 Ext 2 檔案系統
使用 mke2fs 指令:
sudo mke2fs /dev/sda1
建立 Ext 3 檔案系統
使用 mkfs.ext3 指令:
sudo mkfs.ext3 /dev/sda1
或是用 mke2fs 指令:
sudo mke2fs –j /dev/sda1
建立 Ext 4 檔案系統
使用 mkfs.ext4 指令:
sudo mkfs.ext4 /dev/sda1
或是使用 mke2fs 指令:
sudo mke2fs -t ext4 /dev/sda1
從 Ext 2 轉換為 Ext 3 檔案系統
如果要將 /dev/sda1 從 Ext 2 轉換為 Ext 3,則可使用 tune2fs 這個指令:
sudo umount /dev/sda1 sudo tune2fs -j /dev/sda1 sudo mount /dev/sda1 /home
這裡的做法是將硬碟卸載後再做轉換,不過也可以在掛載的狀況下直接轉換,也就是省略 umount 與 mount。
從 Ext 3 轉換為 Ext 4 檔案系統
如果要將 /dev/sda1 從 Ext 3 轉換為 Ext 4,則使用 tune2fs 與 e2fsck 這兩個指令:
sudo umount /dev/sda1 sudo tune2fs -O extents,uninit_bg,dir_index /dev/sda1 sudo e2fsck -pf /dev/sda1 sudo mount /dev/sda1 /home
再叮嚀一次,這些指令如果使用錯誤,可能會把硬碟的資料刪除,所以使用前請先在測試的環境下練習,以免造成重要的資料被刪除!