我在设置我们的一个基于 XenServer 的 Linux VM 时犯了一个错误。我创建了一个单独的交换区(好)和一个单独的大型 /home 目录(坏),而实际上它应该是一个单独的大型 /var 目录。
现在 /var 几乎已经占满了根磁盘,我想将 /home 重新整合到根分区中,删除旧的 921GB /home 分区,然后将根分区扩大到 921GB,而 /swap 分区保持不变。
现在:
[root@ /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 43G 4.0G 92% /
tmpfs 3.9G 0 3.9G 0%
/dev/shm /dev/xvda1 485M 72M 388M 16% /boot
/dev/mapper/VolGroup-lv_home 921G 200M 874G 1% /home
因此更清楚地说,我需要知道如何将 /home 及其内容移动到根分区(/dev/mapper/VolGroup-lv_root)并让 Linux 将其识别为操作系统的主目录,删除 /dev/mapper/VolGroup-lv_home 分区,然后扩大 /dev/mapper/VolGroup-lv_root 分区以占用额外的 921GB 可用空间。
如果可能的话,我愿意交换 /home 和 /var 的位置,但这是一台生产服务器。不过我可以随意制作即时快照,所以可以进行一些深夜实验!;)
谢谢!
答案1
作为 root,这相当简单:
mkdir /home2
mv /home/* /home2/
umount -fl /home
lvremove /dev/VolGroup/lv_home
mv /home2 /home
- 编辑 fstab 并删除 /dev/VolGroup/lv_home 的条目
- 使用 vgdisplay 检查 VolGroup 中现在有多少可用空间,并使用 lvextend 将这些数据添加到 lv_root
- 在 lv_root 上适当使用 resize2fs 或 xfs_growfs
答案2
如果您的根文件系统可调整大小(例如 ext4),此过程将有效。
- 修改现有用户或创建主目录不在 /home 下的新用户。
- 验证您是否可以以该用户身份登录并 su 到 root
- 确保所有其他用户都已注销
- umount /home - 如果失败,则用户进程可能仍在使用 /home。使用 fuser 或 lsof 检查
- 在临时挂载点重新挂载 /dev/mapper/VolGroup-lv_home - 例如 /mnt/home
- 使用 rsync、cp -p 或其他工具将用户主目录从 /mnt/home 复制到 /home - 验证权限和所有权是否正确
- 编辑 fstab 注释掉 /home
- 现在可以允许用户重新登录
- lvremove /dev/VolGroup/lv_home
- lvextend -L+921G /dev/VolGroup/lv_root
- resize2fs /dev/VolGroup/lv_root
答案3
您也可以通过仅交换挂载点来执行此操作而不增加分区:
卸载主分区:
umount /home
将其挂载到其他地方,例如/mnt:
mount /dev/mapper/VolGroup-lv_home /mnt
将分区中的所有内容移动到您的主目录(现在位于根分区上):
mv /mnt/* /home/
将数据从 /var 目录移动到分区:
mv /var/* /mnt/
将您的分区重新挂载到 /var:
umount /mnt
mount /dev/mapper/VolGroup-lv_home /var
确保/etc/fstab
随后相应地更改您的内容。