为什么挂载/卸载 XFS 文件系统会使其再次可启动?

为什么挂载/卸载 XFS 文件系统会使其再次可启动?

我有一些运行 Amazon Linux 2 和 2023 的 EC2 实例,它们使用 XFS 作为根卷。有时,在多次重启后,实例会拒绝启动并出现内核恐慌,因为它找不到内核参数指定的卷root=<some-uuid>

VFS: Cannot open root device "UUID=<some-uuid>" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:

现在事情变得奇怪了。如果我从其中一个“损坏”的实例中取出根卷,将其附加到中间 EC2 实例,然后(这很重要)挂载/卸载文件系统,我可以将其重新附加到之前损坏的 EC2 实例,并且一切都会正常启动。

由于它是 XFS,我假设发生了一些损坏。我没有安装它,而是尝试运行 xfs_repair。此工具在任何情况下都拒绝修复卷,因为有日志条目:

ALERT: The filesystem has valuable metadata changes in a log which is being
ignored because the -n option was used.  Expect spurious inconsistencies
which may be resolved by first mounting the filesystem to replay the log.

删除日志-L不会使卷再次可启动。

我认为这意味着 XFS 日志正在破坏 UUID 标识符。为什么通过挂载重放日志可以修复此问题?有没有办法防止这种情况发生?

答案1

XFS 日志重放:当您挂载 XFS 文件系统时,它会重播日志以使文件系统处于一致状态。此过程有助于确保数据完整性。就您而言,在中间 EC2 实例上挂载和卸载文件系统会触发日志重播,并可能修复文件系统元数据中的不一致问题。

预防 联系 AWS Support

另一个可能的解决方案是使用 xfs_admin 命令为受影响的 XFS 分区生成新的 UUID。例如:

sudo xfs_admin -U generate /dev/nvme4n1p2

这将清除日志并为设备设置新的 UUID。但是,这也可能会导致一些数据丢失或损坏,因此建议在执行此操作之前备份数据。

相关内容