分類: Linux

Linux 檔案系統:Ext 2、Ext 3 與 Ext 4

隨著 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

再叮嚀一次,這些指令如果使用錯誤,可能會把硬碟的資料刪除,所以使用前請先在測試的環境下練習,以免造成重要的資料被刪除!

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago