我有两个逻辑卷,一个挂载为/,另一个挂载为/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
我完成了,重新分区成功了。然而,由于两本指南都有遗漏的地方,我将总结一下我所做的事情。请注意,我已将我的用户名替换为 ,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...
按任意键即可中断该操作。您应该看到这样的屏幕:
按a,然后按空格键,然后键入single
。按回车键。
您应该看到如下提示:
[root@xxxxxxx /] #
输入以下命令:
df -h
它应该向您显示Size
、Used
、 和Avail
。我们感兴趣的是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 /
)
答案2
警告:在执行任何操作之前,请备份所有关键数据!
您需要将所有数据从 /home 分区移动到另一个分区、本地分区或外部驱动器或任何其他有足够空间的地方。
删除/home lv,然后展开/(root)lv
将数据复制回/home目录
编辑1
上面的答案是假设根分区中没有足够的空间来将数据放置在主分区中。
如果不是这种情况,只需将主分区挂载到其他位置并复制数据,例如:
umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/
然后只需删除主分区并扩展根分区
答案3
您可以在没有任何外部存储的情况下从 运行/
,但需要卸载/home
。
如果您小心的话,这并不是一个特别危险的过程,但尽管如此,标准建议仍然适用:首先进行备份,然后进行测试。
我将使用foo
和 作为卷组名称,并将root
和home
作为逻辑卷名称。这使得逻辑卷路径foo/root
和foo/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 代替,并带有后缀K
,M
或G
)。收缩文件系统后,收缩逻辑卷,lvresize -L MMMM foo/home
其中 MMMM 是兆字节数(请注意,默认单位与 不同resize2fs
,但可以使用相同的后缀K
, M
, G
)。请务必小心,不要将逻辑卷缩小得超过文件系统 — 这是此过程中的一个危险步骤。
卷组中现在有未使用的空间。运行lvresize -l +100%FREE foo/root
以使根卷抢占卷组中的所有可用空间。然后运行resize2fs /dev/mapper/foo-root
(不带大小参数)来扩大文件系统以跨越整个逻辑卷;可以在安装卷时进行放大。
您现在有空间复制一些文件。如果没有足够的空间容纳所有东西,请尽可能多地移动,然后重复该过程。
将所有文件复制出来后/home
,您就可以销毁它了。验证其是否/home
为空(如果您移动了文件)或者是否/home
已将其中的所有文件复制到/root
(如果您复制了文件)。要销毁现在不需要的逻辑卷,请运行lvremove foo/home
。最后,使用 扩大根卷lvresize -l 0%FREE foo/root
及其文件系统resize2fs /dev/mapper/foo-home
。
答案4
好吧,我发现自己处于完全相同的位置。 CentOS 似乎默认创建一个小的根卷,并用/home
.我什至首先在虚拟机中测试了我的设置,但使用较小的磁盘 CentOS 没有创建主卷。我在空间受限之前就发现了这个问题,并且还想出了如何不必进入单用户模式。如下:
访问机器,ssh 就可以了(假设非 root 用户)。
cd /
所以你不在主目录中sudo -s
我们将成为这一切的根源lsof /home
检查是否没有人在使用家庭音量,不应该mv
、tar
、 或与其他地方类似的 home 内容lvremove centos/home
- 编辑
/etc/fstab
并注释掉或删除该行/home
- 将您之前备份的主目录内容移回
/home
- 您现在处于安全位置,在这里重新启动应该就可以了 lvresize -l +100%FREE centos/root
xfs_growfs /dev/centos/root
在 CentOS 7 上,其他人可能会使用resize2fs
df -h
你成功了吗?
希望这能让某人更容易。如今,您可以在文件系统上进行实时操作,这确实令人惊奇。