如何最小化 ext3 分区(及其 LVM 逻辑卷)的大小?

如何最小化 ext3 分区(及其 LVM 逻辑卷)的大小?

我在 Ubuntu 9.10 (Karmic) 上使用 LVM。我有一个 LVM 物理卷(和一个卷组)。

我在 LVM 逻辑卷中有一个 ext3 文件系统,我不再使用它,但目前我不想删除它。我正在尝试找出如何最小化它在 PV 中占用的空间。resize2fs 具有 -M 选项,可以很好地调整文件系统的大小以使其具有零可用空间,但这当然不会影响逻辑卷。网络上大多数用于缩小 LV 中的 ext3 的方法(例如这个),遵循这个基本模式来缓解文件系统边界计算不准确等问题:

  • 使用 resize2fs 将 ext3 缩小到超出你想要的大小
  • 将 LV 缩小到你想要的大小
  • 重新运行 resize2fs 来稍微扩大文件系统,从而有效地使用完整的 LV。

就我而言,这并不能完全解决问题,因为我希望 LV 大小由文件系统驱动,而不是相反。

是否有可以运行的命令来执行此操作?或者,我是否可以计算文件系统大小,并有一定信心地将其提供给 lvresize?

答案1

理论上,是的,您可以计算文件系统所需的 LV 的确切大小——当resize2fs它执行操作时,它会打印出正在使用的块数。不幸的是,稍有差错就会导致文件系统损坏,而浪费 100MB 的空间以换取不整合文件系统是大多数人愿意做出的权衡。

编辑:冒着给猴子一把机关枪并永远破坏文件系统的风险,下面的过程对我在临时文件系统上起作用:

  • fsck -f /dev/vg/sizetest
  • resize2fs -M /dev/vg/sizetest
  • 从“调整文件系统大小”行中获取块数(和块大小)resize2fs,然后通过将块数乘以块大小(以 kB 为单位)来计算所涉及的千字节数:
    • “将 /dev/vg/sizetest 上的文件系统大小调整为 119325(4k)个块”转换为119325 * 4 => 477300(下一步的重要数字)
  • lvresize -L477300k vg/sizetest
  • 此时,如果您的尺寸不正确,那么您将完全崩溃——再次扩展文件系统不一定能让您以相同的顺序恢复相同的块。
  • fsck -f /dev/vg/sizetest
  • 重新挂载文件系统,注意 df 显示文件系统已 100% 满,可用块为 0

如果这会破坏您至关重要的文件系统,请不要告诉我,因为我只会进行一场冗长的“早告诉过你”的舞蹈,没有人想看我跳舞。相信我。

答案2

这可能不是最好的解决方案,但这是我会做的事情:

  • 将数据复制到另一个卷
  • 调整卷大小(按照您描述的方式)到所需大小
  • 恢复你的数据

我希望有人有更好的解决方案,但如果没有其他解决方案,至少这个应该有效。

相关内容