我在 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
(下一步的重要数字)
- “将 /dev/vg/sizetest 上的文件系统大小调整为 119325(4k)个块”转换为
lvresize -L477300k vg/sizetest
- 此时,如果您的尺寸不正确,那么您将完全崩溃——再次扩展文件系统不一定能让您以相同的顺序恢复相同的块。
fsck -f /dev/vg/sizetest
- 重新挂载文件系统,注意 df 显示文件系统已 100% 满,可用块为 0
如果这会破坏您至关重要的文件系统,请不要告诉我,因为我只会进行一场冗长的“早告诉过你”的舞蹈,没有人想看我跳舞。相信我。
答案2
这可能不是最好的解决方案,但这是我会做的事情:
- 将数据复制到另一个卷
- 调整卷大小(按照您描述的方式)到所需大小
- 恢复你的数据
我希望有人有更好的解决方案,但如果没有其他解决方案,至少这个应该有效。