如何合并驻留在LVM中单个物理卷上的两个逻辑卷?


14

我有两个逻辑卷,一个逻辑卷安装为/,另一个逻辑卷安装为/ home。

我想将它们结合起来,因为该/卷不断用完空间。(是的,我知道所有空间都在使用什么;不,我无法删除它。)

我愿意把机器放下来一两天。

作业系统:Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
为什么不只是增加/容量,那不是使用LVM的重点吗?
jasonwryan 2013年

2
@jasonwryan为什么我需要手动调整磁盘空间的分配方式?这不是文件系统的重点吗?
Nick ODell

@NickODell否。如果一个卷太小而无法容纳数据,那么它就太小了。总容量是卷大小而不是文件系统大小的因素。但是,逻辑卷确实可以更轻松地调整已装入卷的大小并将不同的存储资源合并到单个卷中。使用LVM,您应该能够执行jasonwryan的建议,甚至无需重新启动:确保常规用户已注销(以释放/ home)umount / home lvreduce(不要忘记-r)重新安装它,然后进行lvextend在根文件系统上,您就完成了。如果要合并,则必须执行rsync。
布莱奇利2013年

@JoelDavis如果我要求所有用户注销,是否需要重新启动是否相关?
Nick ODell

@NickODell嗯...是吗?大多数Linux系统都是服务器,除非您另有说明,否则您应该意识到这将是人们的假设。
布拉奇利2013年

Answers:


10

我完成了,重新分区成功了。但是,由于两个指南中都缺少区域,因此我将总结我所做的事情。请注意,我用替换了用户名,zzzz并用替换了计算机的名称xxxxxxx。另外,除非另有说明,否则所有命令均应以root用户身份运行。

首先,我备份了:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

这将创建/ home目录的压缩备份,并将其放在我的外部驱动器上。(请注意,您的外部驱动器将具有不同的路径。)

现在,您需要重启进入单用户模式。

reboot

当计算机再次打开时,您需要查找如下屏幕:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

按任意键可中断该操作。您应该看到这样的屏幕:

grub引导中心a,然后按空格,然后键入single。按回车。

您应该看到如下提示:

 [root@xxxxxxx /] # 

输入以下命令:

df -h

它应该告诉你SizeUsedAvail。我们对感兴趣Used
写下您的家庭空间正在使用多少空间。我们稍后需要。

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

还记得您的家庭空间使用了多少空间吗?将其加倍,并将其交给该命令。例如,我的主目录使用了15 GB,因此我将其大小设置为30 GB。

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

警告:下一步可能会丢失数据。请确保你把一个尺寸比以前更大的命令。确保增加5 GB。

lvresize -L 35G vg_xxxxxxx/lv_home

告诉根分区使用我们刚刚释放的所有空间。

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

将数据复制到根分区

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(顺便说一句,这-a一点很重要,因为否则所有内容都将由root拥有,而您则不需要这样做。)
快速检查数据是否正确复制:

ls -lR /home

现在,我们删除主分区,并告诉root再次占用新空间。

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

在这一点上,我犯了一个大错误,您可以从中学到一个错误。我重新启动,当系统重新启动时,它拒绝将我的根分区安装为读写状态,因为它无法安装我的/ home分区。因此,在重新启动之前,我们输入

nano /etc/fstab

这些行之一将告诉系统挂载/ home分区。#在它之前放一个。按Ctrl-O,Enter和Ctrl-X。现在您可以重新启动。

(假设,如果您像我一样忘记编辑fstab,则挂载根分区的命令是mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /


喜欢细节!
nmr

我遇到了类似的问题,但是我没有物理访问计算机的权限。有没有一种方法不需要启动到单用户模式?
FrustratedWithFormsDesigner

从理论上讲,@FrustratedWithFormsDesigner。如果您具有ssh访问权限,则可以备份/home。然后,只要您可以卸载/home,就可以将其删除。但是,我没有资格与您讨论整个过程。这是您应该提出的新问题。
尼克·ODell,

1
@NickODell:我确实提出了一个新问题:askubuntu.com/questions/1115913/…–
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner这是比我能给您的更好的建议。
Nick ODell

3

警告:在执行任何操作之前,请备份所有关键数据!

您将需要将所有数据从/ home分区移动到另一个分区,本地分区或外部驱动器,或者您有足够空间的其他任何地方。

删除/ home lv,然后展开/(根)lv

将数据复制回/ home目录

编辑1

上面的答案是假设您在根分区中没有足够的空间来将数据放置在主分区中。

如果不是这种情况,则只需将主分区挂载到其他位置并复制数据,例如:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

然后只需删除主分区并扩展根分区


3

您可以在不运行任何外部存储的情况下进行操作/,但是需要卸载/home

如果您小心的话,这并不是一个特别危险的过程,但是尽管如此,标准建议仍然适用:首先进行备份,然后进行测试。

我将foo用于卷组名,roothome用作逻辑卷名。这将使逻辑卷路径foo/rootfoo/home以及设备路径/dev/mapper/foo-root/dev/mapper/foo-home。我假设它们在同一卷组中,否则会变得更加复杂,并且取决于两个卷组的物理卷布局。

首先,卸载/home并运行e2fsck -f /dev/mapper/foo-home。然后先收缩文件系统,再收缩逻辑卷。运行resize2fs /dev/mapper/foo-home NNNN其中NNNN是您要的体积内保留(可以用KB或MB或GB的而不是后缀块的数量KMG)。缩小文件系统之后,收缩与逻辑卷lvresize -L MMMM foo/home其中MMMM是一个数兆字节(注意,默认的单位是不同的resize2fs,但你可以使用相同的后缀KMG)。请特别注意,不要将逻辑卷的大小缩小到比文件系统更小的位置-这是此过程中的一个危险步骤。

卷组中现在有未使用的空间。运行lvresize -l +100%FREE foo/root以使根卷抓住卷组中的所有可用空间。然后运行resize2fs /dev/mapper/foo-root(不使用size参数)以扩展文件系统以覆盖整个逻辑卷;在安装卷时可以进行放大。

您现在可以复制一些文件了。如果没有足够的空间容纳所有东西,请尽可能多地移动,然后重复该过程。

从中复制所有文件后/home,就可以销毁它了。验证是否/home为空(如果已移动文件)或已将所有文件/home复制到其中/root(如果已复制文件)。要销毁现在不需要的逻辑卷,请运行lvremove foo/home。最后,使用扩展根卷lvresize -l 0%FREE foo/root及其文件系统resize2fs /dev/mapper/foo-home


注意:/ home拒绝卸载,直到我重新引导到单用户模式。
Nick ODell,

注意:分别称为vg_(计算机名称)和lv_home
Nick ODell

好吧,我知道了。但是,本指南中缺少一些细节,因此我将尽快发布我的完整命令历史记录。
Nick ODell

2

好吧,我发现自己处于完全相同的位置。似乎CentOS在默认情况下会创建一个小的根卷,并用填充剩余的空间/home。我什至首先在VM中测试了我的设置,但使用较小的磁盘,CentOS并未创建本地卷。在受到空间限制之前,我先解决了这个问题,并且还弄清楚了如何不必进入单用户模式。如下:

获得对计算机的访问权限,ssh很好(假设非root用户)。

  1. cd / 因此您不在主目录中
  2. sudo -s 我们将为所有这一切扎根
  3. lsof /home 检查是否没有人正在使用家庭音量,不应
  4. mvtar或类似的内容
  5. lvremove centos/home
  6. 编辑/etc/fstab并注释掉或删除该行/home
  7. 将您之前备份的房屋的内容移回/home-您现在处于安全位置,可以在此处重新启动
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root 在CentOS 7上,其他人可能会使用 resize2fs
  10. df -h 你成功了吗?

希望这会使某人更容易。如今,您可以在文件系统上执行的操作确实非常令人惊奇。


如果您不需要迁移任何数据,肯定会更容易。:)
Nick ODell 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.