ext2/ext3 是 Linux 經典檔案系統,ext3 在 ext2 基礎上新增日誌功能,提供高可用性、資料完整性、平滑升級路徑。本文系統講解 inode 架構、三種日誌模式、轉換指令、外部日誌裝置、修復工具。
Inode 核心架構
- 每個檔案/目錄對應唯一 inode 號,儲存:檔案大小、時間戳 (atime/ctime/mtime)、權限 (mode/uid/gid)、區塊指標 (直接/間接/雙間接/三間接)、旗標 (immutable, append-only 等)。
- 目錄本質:檔案名 → inode 號 的映射表 (目錄項)。
- 硬連結:同一 inode 多個目錄項,連結計數 +1;刪除僅減少連結計數,歸零時釋放區塊。
- 符號連結:獨立 inode 儲存目標路徑字串,跨檔案系統、可指向目錄。
ext3 三大日誌模式 (掛載參數 data=)
| 模式 | 參數 | 日誌內容 | 效能 | 資料一致性 | 適用場景 |
| Journal | data=journal | 中繼資料 + 檔案資料 | 最低 (雙寫) | 最高 (崩潰零資料遺失) | 資料庫、金融、關鍵業務 |
| Ordered (預設) | data=ordered | 僅中繼資料,但資料寫入 在 中繼資料提交前 | 中等 | 高 (資料不會指向舊區塊) | 通用生產環境 |
| Writeback | data=writeback | 僅中繼資料,資料寫入順序不保證 | 最高 | 較低 (崩潰可能出現舊資料殘留) | 高吞吐、可容忍微量資料不一致 |
建立新 ext3 檔案系統
# 內部日誌 (預設)
mke2fs -j /dev/sda8
# 或
mkfs.ext3 /dev/sda8
# 外部日誌裝置 (將日誌放在高速 SSD/獨立磁碟)
mke2fs -J device=/dev/sdb1 /dev/sda8
# 掛載時指定
mount -t ext3 -o journal_dev=/dev/sdb1 /dev/sda8 /mnt
ext2 → ext3 平滑升級 (無需卸載、備份、格式化)
# 線上轉換 (掛載中可操作)
tune2fs -j /dev/sda9
# 修改 /etc/fstab 對應分區 fs_type 為 ext3
# 下次掛載自動啟用日誌
特性: 轉換後 ext3 仍可以 ext2 掛載 (日誌被忽略),雙向相容。
ext3 檔案系統修復
# 必須先卸載
umount /dev/sda8
# 自動修復 (預設 -p 預先清理)
e2fsck -fy /dev/sda8
# -f 強制檢查即使標記乾淨
# -y 自動回答 yes
# -D 優化目錄索引
效能調優參數
tune2fs -c 0 -i 0 /dev/sda8:關閉定期強制 fsck (由系統管理員排程控制)。
tune2fs -o journal_data_writeback /dev/sda8:預設掛載為 writeback 模式。
mount -o noatime,nodiratime /dev/sda8 /data:關閉存取時間更新,大幅減少元資料寫入 (日誌/資料庫/快取目錄適用)。
tune2fs -O dir_index /dev/sda8:啟用 htree 目錄索引 (大目錄查找 O(log n)),需 e2fsck -D 建立索引。
總結
ext3 以最小改動為 ext2 帶來企業級日誌保護,平滑升級、多模式靈活選擇、外部日誌裝置支援高效能場景。雖 ext4/xfs/btrfs 已成主流,ext3 於舊系統、嵌入式、穩定性優先環境仍具不可替代價值。
copyright ©
萬盛學電腦網 all rights reserved