重置 ext4 文件系统而不更改文件系统 UUID

重置 ext4 文件系统而不更改文件系统 UUID

我有一个文件系统,其中包含许多我定期删除的小文件(这些文件是可以轻松重新生成的缓存)。简单地创建一个新的文件系统比运行rm -rfrsync删除所有文件要快得多(即高效删除包含数千个文件的大型目录)。

创建新文件系统来擦除文件系统的唯一问题是它的 UUID 发生变化,从而导致例如/etc/fstab.

有没有一种方法可以简单地从 ext4 文件系统中“取消链接”目录,或者完全清除其 inode 列表?

答案1

由于您正在使用,ext4您可以格式化文件系统,然后将 UUID 设置为已知值。

man tune2fs写道,

-U UUID将文件系统的通用唯一标识符 (UUID) 设置为 UUID。 UUID 的格式是一系列由连字符分隔的十六进制数字,如下所示c1b9d5a2-f162-11cf-9ece-0020afc76f16

同样,man mkfs.ext4写道,

-U UUID将文件系统的通用唯一标识符 (UUID) 设置为 UUID。[…如上…]

就我个人而言,我更喜欢通过标签来引用文件系统。例如,在/etc/fstab我的一个系统中,我有这样的条目

# <file system>    <mount point>   <type>   <options>           <dump> <pass>
LABEL=root         /               ext4     errors=remount-ro   0      1
LABEL=backup       /backup         ext4     defaults            0      2

可以使用和-L标志添加此类标签。他们避免出现问题tune2efsmkfs.ext4索引节点校验和导致重新格式化的文件系统重新发现或损坏,并且它们更容易通过视觉识别。 (但在多个系统中不太可能是唯一的,因此在交换磁盘时要小心。)

答案2

您可以使用-Uwithmkfs.ext4指定您自己的 UUID,以便在重新创建文件系统时您可以简单地重用以前的 UUID。

答案3

在 ext3/ext4 上为新文件系统重复使用 UUID 是一个坏主意。

UUID 用于 inode 校验和计算,以允许 fsck 区分属于当前文件系统的 inode 和来自先前文件系统的 inode。

如果您使用相同的 UUID 重新格式化现有的扩展文件系统,文件系统检查很可能会找到旧数据,并尝试挽救它。通常,这是一个交互式过程,因此启动时的非交互式自动文件系统检查将失败,然后您将进入救援 shell。

如果您的分区表是 GPT,那么您可以在 fstab 中使用分区 UUID,或者如果您使用 LVM,您还可以通过它获得持久名称。

答案4

我只是将文件系统放在LVM精简池,并在创建后制作精简快照。然后,我只需回滚到该快照,而不是重新创建文件系统。在存储方面,这几乎没有开销。

您还可以在创建后立即拍摄文件系统的映像,并将其保存以供以后dd恢复;如果底层存储是 SSD,这尤其有吸引力,因为它将使用丢弃将块标记为零/未使用,因此图像的创建速度会很快,图像文件大多稀疏,因此在有效存储需求方面微不足道,并且恢复将速度也快得惊人。

请注意,根据文件的大小,实际上有相当大的影响文件系统之间的速度差异(请参阅页面底部的基准)。对于中等大小的文件,XFS可能快一点!

mkfs但如果您习惯按需使用,还有一个更简单的解决方案:mkfs.ext4 -U ${your_uuid_here}让您设置文件系统的 UUID :)

相关内容