我有一个 CentOS 7 系统,其 /home 分区太大。我希望减小它的大小,但它是 XFS,所以这几乎是不可能的。由于我无论如何都没有太多用户数据(当前只有 1 个用户),是否可以 tar 整个分区数据,将其复制出来,删除分区,将其重新分区为较小大小的 ext4?
如果是这样,执行此操作的命令是什么?
答案1
由于这不是根分区 ( /
),因此您应该能够在不丢失数据的情况下执行此操作,如果您以普通用户身份登录,则主目录下的各种文件都会更新(来自后台电子邮件阅读、冲浪等)。您不想丢失在备份和恢复之间到达的电子邮件)。
能够重新分区的重要一点是,您可以以 root 身份登录,也可以以没有主目录的用户身份登录/home
。这是为了能够/home
在不使用它的情况下卸载它,并重新分区和重新格式化它。
从图形界面以 root 身份登录可能是不可能的,或者至少不建议这样做(X,我没有运行 CentOS 7,无法检查)。但如果您在这些方面经验较少,图形工具可能会更容易使用。如果您已登录并拥有正常桌面,则如果出现问题,您仍然可以使用互联网搜索解决方案。因此,接下来我将尽量减少对使用命令行工具的依赖。
您可以将现有用户的/home/XYZ
目录移动到eg /home2/XYZ
(位于根分区上),但该目录下可能有太多数据,无法执行此操作。因此我建议执行以下步骤(因为commands
您必须打开终端):
xyz
使用主目录创建一个新的临时用户/home2/xyz
- 确保该用户可以发出
sudo
命令 - 注销并以此用户身份登录(使用 GUI,而不是通过
login:
提示符 卸载
/home
并重新安装它以确保当前没有任何东西在使用它:sudo umount /home sudo mount /home
检查备份介质是否可用,让我们假设这是在下面
/mnt/USB01
(通常您检查备份是否适合,但您指出没有太多数据,所以我假设它适合)。使用
tar
或cpio
从下面进行备份/home
(这比复制单个文件更快,如果备份介质是 VFAT,甚至应该可以工作)。sudo tar --create --verbose --file=/mnt/USB01/homebup.tar.bz2 -C /home .
检查您是否可以读回刚刚创建的文件:
sudo tar tvf /mnt/USB01/homebup.tar.bz2
检查
/home
安装了哪个分区,记下该分区(例如 sdX2)并卸载:mount | grep -f /home umount /home
注释掉
/home
in的条目/etc/fstab
,您可能有 UUID 而不是sdX2
,您可以通过执行以下操作查找 UUID 属于哪个sdX
:ls -l /dev/disk/by-uuid/ | grep -F sdX2
sdX
通过删除“sdX2”分区并重新创建它,对您在上一步中找到的分区的驱动器进行重新分区(如果较小,您可以立即创建其他分区,或推迟创建)- 在新创建的分区之一上选择您的文件系统(您可以
sdX2
再次使用,但该分区将有一个新的 UUID,因此请查找它) 编辑
/etc/fstab
并确保您可以/home
通过执行以下操作进行安装:mount /home
(通过这种方式编辑
/etc/fstab
和安装,您将在重新启动时安装分区)。- (可选)重新启动并确保
/home
已安装 使用以下命令恢复数据
/home
:sudo tar xvf /mnt/USB01/homebup.tar.bz2 -C /home
- 重启并正常登录
- 删除临时用户帐户
答案2
你可能会看一下类似的东西克隆齐拉。使用小型 USB 记忆棒上的 Clonezilla 以及将数据备份到(本地或网络)的某个位置,您几乎可以完全按照您所描述的操作 - 将其复制出来,删除分区,使用不同的文件系统和较小的大小重新对其进行分区,然后恢复它。直接使用分区映像(通常是最简单的选择)从大到小的过程中效果不太好,但您仍然应该能够使其工作。一探究竟!