禁用日誌後報告的文件系統類型不一致
在試圖理解為什麼kworker flush 使用 99% I/O 並在機器上掛起文件寫入時,我使用以下方法禁用了 ext4 數據分區上的日誌:
tune2fs -O ^has_journal /dev/sdg1
重新啟動後,通過條目自動掛載分區
/etc/fstab
失敗:# mount /mnt/das.f mount: /mnt/das.f: wrong fs type, bad option, bad superblock on /dev/sdf1, missing codepage or helper program, or other error.
奇怪的。
在我們的機器中,舊的被格式化為 ext3(很久以前),而新的則有 ext4。由於這種混合,常見的管理腳本用於根據實際存在的分區類型
parted
自動創建。/etc/fstab
但是,刪除 ext4 分區上的日誌後,將其
parted
報告為 ext2。其他工具仍將其報告為 ext4。哪個是對的?刪除日誌是否會將文件系統從 ext4“轉換”為 ext2,或者這是
parted
and中的錯誤file
?# parted /dev/sdc1 p Model: Unknown (unknown) Disk /dev/sdc1: 7580GB Sector size (logical/physical): 512B/512B Partition Table: loop Disk Flags: Number Start End Size File system Flags 1 0.00B 7580GB 7580GB ext2 # file -sL /dev/sdc1 /dev/sdc1: Linux rev 1.0 ext2 filesystem data, UUID=8fde102f-1047-4b3b-83f9-43c40face046 (extents) (large files) # blkid /dev/sdc1 /dev/sdc1: UUID="8fde102f-1047-4b3b-83f9-43c40face046" TYPE="ext4" PARTUUID="8935788a-939d-4d2c-8495-dc38afc47164"
/etc/fstab
(如果手動更改為 ext4,則卷安裝正常…)機器:Centos 8.1、4.18.0-147.el8.x86_64
查看程式碼,libparted 和 libblkid 檢測 ext 版本的方式有所不同。該版本不是用超級塊編寫的,兩種工具都使用支持的功能來區分版本。
對於沒有日誌的 ext3,這兩個工具都會報告 ext2,這是有道理的,因為這兩者之間的區別基本上只是日誌支持。
對於 ext4,libblkid 檢查 ext4 特定功能,如大文件或文件類型支持,如果存在,它將報告設備為 ext4。Libparted 會進行類似的檢查,但前提是日誌存在,因此它會將每個沒有日誌的 ext 文件系統報告為 ext2。我會說這是一個錯誤,但我想這取決於。
Libblkid ext 超級塊掃描程式碼可在此處獲得通知,
probe_ext3
檢查期刊支持但probe_ext4
不檢查。Libparted ext 程式碼在此處可用,並且
_ext2_generic_probe
僅在 ext3 檢查通過時才檢查 ext4,因此它永遠不會嘗試在沒有日誌的設備上檢測 ext4。