我有两个逻辑卷,一个挂载为/,另一个挂载为/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)
Nic*_*ell 11
我完成了,重新分区工作了。但是,由于两个指南中都有缺失的地方,我将总结我所做的。请注意,我已将我的用户名替换zzzz为xxxxxxx. 此外,除非另有说明,否则所有命令都应以 root 身份运行。
首先,我备份了:
tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home
Run Code Online (Sandbox Code Playgroud)
这会创建 /home 目录的压缩备份,并将其放在我的外部驱动器上。(请注意,您的外部驱动器将具有不同的路径。)
现在,您需要重新启动到单用户模式。
reboot
Run Code Online (Sandbox Code Playgroud)
当您的计算机再次打开时,您需要寻找这样的屏幕:
Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...
Run Code Online (Sandbox Code Playgroud)
按任意键中断。你应该看到这样的屏幕:
按a,然后按空格键,然后键入single。点击进入。
你应该看到这样的提示:
[root@xxxxxxx /] #
Run Code Online (Sandbox Code Playgroud)
输入以下命令:
df -h
Run Code Online (Sandbox Code Playgroud)
它应该告诉你Size,Used和Avail。我们有兴趣Used。
写下您的家庭卷正在使用多少空间。我们稍后会需要它。
umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home
Run Code Online (Sandbox Code Playgroud)
还记得您的家庭卷使用了多少空间吗?把它加倍,然后把它交给这个命令。例如,我的主目录使用了 15 GB,因此我将其大小调整为 30 GB。
resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G
Run Code Online (Sandbox Code Playgroud)
警告:下一步可能会丢失数据。请确保你把一个尺寸比以前更大的命令。添加 5 GB 以确保。
lvresize -L 35G vg_xxxxxxx/lv_home
Run Code Online (Sandbox Code Playgroud)
告诉根分区使用我们刚刚释放的所有空间。
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root
Run Code Online (Sandbox Code Playgroud)
将数据复制到根分区
mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,这-a很重要,否则一切都将由 root 拥有,而您不希望那样。)
快速检查数据是否正确复制:
ls -lR /home
Run Code Online (Sandbox Code Playgroud)
现在我们删除主分区,并告诉 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
Run Code Online (Sandbox Code Playgroud)
在这一点上,我犯了一个大错误,你可以从中吸取教训。我重新启动,当系统恢复时,它拒绝以读写方式挂载我的根分区,因为它无法挂载我的 /home 分区。所以,在我们重新启动之前,我们输入
nano /etc/fstab
Run Code Online (Sandbox Code Playgroud)
其中一行将告诉系统挂载 /home 分区。#在它之前放一个。按 Ctrl-O、Enter、Ctrl-X。现在您可以重新启动。
(假设您像我一样忘记编辑 fstab,挂载根分区的命令是mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)
警告:在执行任何操作之前,请备份所有关键数据!
您需要将所有数据从 /home 分区移动到另一个分区、本地分区或外部驱动器或任何其他有足够空间的地方。
删除/home lv,然后展开/(root)lv
将数据复制回/home目录
编辑1
上面的答案是假设根分区中没有足够的空间来将数据放置在主分区中。
如果不是这种情况,只需将主分区挂载到其他位置并复制数据,例如:
umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/
Run Code Online (Sandbox Code Playgroud)
然后只需删除主分区并扩展根分区
您可以在没有任何外部存储的情况下从 运行/,但需要卸载/home。
如果您小心的话,这并不是一个特别危险的过程,但尽管如此,标准建议仍然适用:首先进行备份,然后进行测试。
\n\n我将使用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/homeMMMM 是兆字节数(请注意,默认单位与 不同resize2fs,但可以使用相同的后缀K, M, G)。请务必小心,不要将逻辑卷缩小到超过文件系统 \xe2\x80\x94,这是此过程中的一个危险步骤。
卷组中现在有未使用的空间。运行lvresize -l +100%FREE foo/root以使根卷抢占卷组中的所有可用空间。然后运行resize2fs /dev/mapper/foo-root(不带大小参数)来扩大文件系统以跨越整个逻辑卷;可以在安装卷时进行放大。
您现在有空间复制一些文件。如果没有足够的空间容纳所有东西,请尽可能多地移动,然后重复该过程。
\n\n将所有文件复制出来后/home,您就可以销毁它了。验证其/home是否为空(如果您移动了文件)或者是否/home已将其中的所有文件复制到/root(如果您复制了文件)。要销毁现在不需要的逻辑卷,请运行lvremove foo/home。最后,使用 扩大根卷lvresize -l 0%FREE foo/root及其文件系统resize2fs /dev/mapper/foo-home。
小智 5
好吧,我发现自己处于完全相同的位置。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/rootxfs_growfs /dev/centos/root在 CentOS 7 上,其他人可能会使用resize2fsdf -h你成功了吗?希望这能让某人更容易。如今,您可以在文件系统上进行实时操作,这确实令人惊奇。
| 归档时间: |
|
| 查看次数: |
37376 次 |
| 最近记录: |