在试图理解为什么kworker flash 使用 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
错误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
答案1
查看代码,libparted 和 libblkid 检测 ext 版本的方式有所不同。该版本不是用超级块编写的,并且两个工具都使用支持的功能来区分版本。
对于没有日志的 ext3,这两个工具都会报告 ext2,这是有道理的,因为这两者之间的区别基本上只是日志支持。
对于 ext4,libblkid 检查 ext4 特定功能,例如大文件或文件类型支持,如果存在这些功能,它将报告设备为 ext4。 Libparted 会执行类似的检查,但前提是日志存在,因此它会将每个没有日志的 ext 文件系统报告为 ext2。我想说这是一个错误,但我想这要看情况。
Libblkid ext superblock扫码可用这里请注意,它probe_ext3
会检查期刊支持,但probe_ext4
不会。
Libparted 扩展代码可用这里并且_ext2_generic_probe
仅当 ext3 检查通过时才检查 ext4,因此它永远不会尝试在没有日志的设备上检测 ext4。