如何将分区标记*为* ext4?

如何将分区标记*为* ext4?

我有一个 ext3 分区,因此当我执行此操作时:

mount /dev/blah /mnt/blah

它会自动安装为 ext3。我可以通过运行以下命令将其安装为 ext4

mount -t ext4 /dev/blah /mnt/blah

并且它工作正常。我推测该分区以某种方式被标记为 ext3。是否可以将其更改为 ext4,以便:

mount /dev/blah /mnt/blah

将其挂载为 ext4。这只是为了实验。我想在不启用 ext4 中的新功能的情况下执行此操作,以便我可以返回到 ext3。

答案1

如果在创建时文件系统没有使用或者明确禁用了 ext4 扩展(如uninit_bgflex_bg),则文件系统实际上将是 ext3(如果它具有日志)或 ext2(如果它没有 ext3 或 ext4 功能)。

您可以使用 启用 ext4 功能tune2fs -O

ext4 手册页:

如果使用 -O 选项明确添加或删除应在新创建的文件系统中设置的文件系统选项,则所请求的 fs 类型可能不支持所生成的文件系统。(例如,“mke2fs -t ext3 -O extends /dev/sdXX”将创建一个 Linux 内核中 ext3 实现不支持的文件系统;而“mke2fs -t ext3 -O ^has_journal /dev/hdXX”将创建一个没有日志的文件系统,因此 Linux 内核中的 ext3 文件系统代码将不支持该文件系统。)

tune2fs 手册页:

-O [^]功能[,...]-O [^]功能[,...]

启用某些文件系统功能可能会阻止不支持这些功能的内核挂载文件系统。特别是 uninit_bg 和 flex_bg 功能仅受 ext4 文件系统支持。

答案2

man mount

如果没有 -t 给出选项,或者指定了自动类型,mount 将尝试猜测所需的类型。Mount 使用库blkid来猜测文件系统类型;如果没有找到任何熟悉的内容,mount 将尝试读取文件/etc/filesystems,或者,如果不存在,则/proc/filesystems读取。将尝试列出的所有文件系统类型,但标记为“nodev”的文件系统类型除外(例如,devpts、proc 和 nfs)。如果/etc/filesystems ends一行中只有一个 *,mount 将/proc/filesystems在之后读取。

# mount -V
mount from util-linux-ng 2.17.2 (with libblkid and selinux support)

除此之外blk_id

# blkid -o value -s TYPE /dev/sdb1
ext4

还有一些其他方法可以确定未挂载分区的文件系统:

# file -s /dev/sdb1 
/dev/sdb1: Linux rev 1.0 ext4 filesystem data (extents) (large files) (huge files)

# fsck -N /dev/sdb1
fsck from util-linux-ng 2.17.2
[/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 /dev/sdb1 

# parted /dev/sdb1 print
Model: Unknown (unknown)
Disk /dev/sdb1: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  107GB  107GB  ext4

答案3

mount /dev/blah /mnt/blah只对 fstab 条目有效,不是吗?因此,将 fstab 条目更改为 ext4 即可。

你可能指的是

mount -t auto /dev/blah /mnt/blah

我不知道检查 ext3 和 ext4 的顺序在哪里定义。我相信 FS 本身没有标记:“首选安装为 ext4”。与标记类似的是超级块中设置的不向后兼容的 ext4 功能。这些会阻止 FS 安装为 ext3,但这不是您想要的。

相关内容