文件系统在 linux 中减少后仍然显示旧值,但在 LVM 中显示正确值

xrk*_*rkr 3 linux rhel lvm resize2fs

我们有一项任务是将 LVM 中的文件系统从 8T 调整为 7T。我们已经给出了 resize2fs 命令,当命令仍在运行时,我们得到错误“写入失败:对等方重置连接”,但是当我们再次登录时,resize2fs 命令仍在运行进程列表。该过程完成后,我们使用“lvreduce”减少了 LVM 并将其重新安装。

现在在 df -h 中它仍然显示为 8TB,但是在 LVM 中它显示为 7TB。如何纠正问题?

Cel*_*ada 6

resize2fs 可能没有完成工作,但您无法判断,因为您错过了其输出的结尾。

你应该不是已经取得了进展,并执行lvreduce在这一点上。很有可能这部分文件系统已损坏。请注意,您无法通过运行lvextend并希望丢失的字节回来并且文件系统可以恢复来撤消此操作,因为lvextend可能会返回不同的字节。

如果我不得不猜测,可能发生的情况是您的连接在resize2fs工作一段时间后被重置而没有发出任何输出。连接重置后,它会继续运行一段时间(它忽略SIGHUP或从未收到它?)。但是后来,可能在它快完成的时候,它发出了一些状态输出并被迅速杀死,因为它在尝试写入一个不存在的终端时遇到错误或信号。它从未完成。

resize2fs文件系统处于什么状态是一个悬而未决的问题,但人们可以希望它处于一种相当可用的状态,文件系统大小的减少未提交。

这部分故事的寓意是:如果您的连接有可能被中断,请执行关键操作,例如resize2fsscreen(或作为at作业,或其他)。

无论您做什么,请确保您有一个良好的备份,因为此时您可能尝试的任何操作都是危险的。如果您没有好的备份,您可以以只读方式挂载文件系统(不要以读+写方式挂载,因为这可能会加剧损坏)并立即使用。

最安全的方法是删除文件系统并从备份中恢复。但是,如果您想尝试就地恢复文件系统,您可能需要执行以下两个任务的某种组合:

  • fsck文件系统原样。这将通知您任何超出文件系统末尾的读取尝试,并可能让您了解有多少数据超出了这些范围。希望不会太多,因为resize2fs在数据崩溃之前可能已成功移动该数据。
  • 使用重新扩展块设备lvextend到它以前的大小,只是为了让文件系统满意,然后fsck,然后从第一个开始再次尝试整个操作。这可能会在文件系统访问超出有效数据所在范围的字节范围时引入一些静默损坏。

我不确定什么最适合你。这取决于文件系统上发生的事情的布局以及自事件以来它被触及的程度(你提到你已经安装了它,可能是读+写,至少一次......)