我在某处读到,对 ext3 和 ext4 一无所知的操作系统(即古董 Linux 版本)能够读取/写入 ext4,并且它将任何 ext4 文件系统检测为 ext2。
我不太确定 Tux2 到 tux3 或 FAT12 是否也可以这样做。 (FAT64 是 exFAT)
这到底怎么可能呢?
具体怎样才能ext4 可以像 ext2 一样对待吗?是否没有文件或元数据损坏的风险?
答案1
这在很大程度上取决于 ext4 文件系统的格式化方式。一些较新的 ext4 功能(例如extents
或64bit
)无法被较旧的 ext2 驱动程序理解,并且内核将拒绝挂载文件系统(例如,参见这个帖子)。一般来说,任何使用现代格式mke2fs
并使用默认-t ext4
选项格式化的文件系统都将不是可以通过旧的 ext2 驱动程序安装,但如果文件系统最初是很久以前格式化的,然后升级到 ext4,则它可能如果没有启用任何较新的 ext4 特定功能,仍然可以通过 ext2 安装。
compat
ext2/3/4 文件系统跟踪、rocompat
和incompat
功能标志正在使用哪些功能。这些功能通常是按mke2fs
时间设置的,但有时可以通过 进行更改tune2fs
。如果发现未知compat
功能,内核将安装它,但e2fsck
会拒绝检查它,因为它可能会做错什么。如果发现未知rocompat
功能,内核可以以只读方式挂载文件系统,任何未知incompat
功能都将阻止文件系统被挂载(/var/log/messages
在这种情况下将打印一条消息)。
您可以使用debugfs -c -R features <device>
转储文件系统上启用的功能,例如:
# debugfs -c -R features /dev/sdb1
debugfs 1.42.13.wc5 (15-Apr-2016)
/dev/sdb1: catastrophic mode - not reading inode or group bitmaps
Filesystem features: has_journal ext_attr resize_inode dir_index filetype
needs_recovery dirdata sparse_super large_file huge_file uninit_bg dir_nlink
尽管这并没有告诉您哪些是compat
、rocompat
、 或incompat
。如果您的版本debugfs
不理解某些较新的功能,它将打印类似I0400
或类似的内容。