隨著 Linux 的版本演進,其檔案系統也不斷的在更新,在 Linux 中常見的檔案系統有 Ext 2、Ext 3 與 Ext 4 這幾種,這些檔案系統都是為了 Linux 而設計的,本篇主要在介紹這幾種檔案系統的主要差異,與一些相關 Linux 指令的使用方式。
這裡介紹 Ext 2、Ext 3 與 Ext 4 這些檔案系統的特色,與其中主要的差異。
Ext 2(second extended file system)檔案系統誕生於西元 1993 年,是為了改善既有的 Ext 檔案系統而設計的,以下是這個檔案系統的特色:
Ext 3 檔案系統誕生於西元 2001 年,顧名思義就是 Ext 2 的下一版,Linux 的版本從 Kernel 2.4.15 開始支援這個檔案系統,其特色如下:
Ext 4 檔案系統是 Ext 3 的下一版,誕生於西元 2008 年,Linux 的版本從 Kernel 2.6.19 開始支援,特色如下:
目前 Linux 最新的檔案系統是 Ext 4,如果想要把檔案系統更新為 Ext 4,首先就是要確認目前所使用的檔案系統是哪一個,這裡介紹一些判斷檔案系統的方式。
第一種方式是使用 df 指令:
df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
輸出為
/dev/sda1 ext4 / /dev/sdb1 ext4 /ruser
很明顯的可以看到,第二個欄位就是檔案系統名稱。
使用 mount 指令:
mount | grep "^/dev"
輸出為
/dev/sda1 on / type ext4 (rw,errors=remount-ro) /dev/sdb1 on /ruser type ext4 (rw)
這個輸出也很明顯可以分辨檔案系統。
使用 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 這個檔案。
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 -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
以上幾種判斷檔案系統的方式,輸出都大同小異,可依照喜好自行選擇要使用哪一的方式。
注意事項:以下的指令僅供參考,不可直接複製執行,請依照您系統的設定自行修改指令內容,若不當使用,可能造成系統或資料損毀!
使用 mke2fs 指令:
sudo mke2fs /dev/sda1
使用 mkfs.ext3 指令:
sudo mkfs.ext3 /dev/sda1
或是用 mke2fs 指令:
sudo mke2fs –j /dev/sda1
使用 mkfs.ext4 指令:
sudo mkfs.ext4 /dev/sda1
或是使用 mke2fs 指令:
sudo mke2fs -t ext4 /dev/sda1
如果要將 /dev/sda1 從 Ext 2 轉換為 Ext 3,則可使用 tune2fs 這個指令:
sudo umount /dev/sda1 sudo tune2fs -j /dev/sda1 sudo mount /dev/sda1 /home
這裡的做法是將硬碟卸載後再做轉換,不過也可以在掛載的狀況下直接轉換,也就是省略 umount 與 mount。
如果要將 /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
再叮嚀一次,這些指令如果使用錯誤,可能會把硬碟的資料刪除,所以使用前請先在測試的環境下練習,以免造成重要的資料被刪除!