答案1
在下部区域移动分区将是一个巨大的痛苦。这里的问题是启动是如何发生的。我怀疑这是SDB5 512兆区域所为。可能还有一些引导代码告诉系统从 sdb5 启动。
但这意味着该引导块中的某些内容“知道”Linux 安装在 sdb6 中,因此你不敢改变这一点。
最简单的方法(两个 USB 设备)
获取一个新的 USB 密钥并将其插入。从 Linux 启动。以相同的方式格式化新的 USB 闪存盘,但使用“更好”的分区。然后将数据从旧密钥复制到新密钥。验证它是否有效。你完成了!
您可以做什么(仅使用一个 USB 设备)
您可能知道,Linux 有挂载点!你可以混合搭配那些!所以:
备份重要的内容
在 Linux 中启动并登录根在单一(“恢复”)模式下
通过将 sdb1 分区重新格式化为 ext4 来销毁其内容:
mkfs.ext4 /dev/sdb1
现在检查您的 Linux 安装并查看哪些内容占用了空间:
du -sk /* 2>/dev/null | 复制代码排序-n
例如,在我的测试系统上(经过几秒钟的磁盘扫描后):
...smaller fry removed...
12220 /run
13320 /sbin
18992 /etc
125244 /boot
873108 /home
873324 /lib
1154900 /opt
1537488 /root
4648100 /usr
15088048 /var
所以我主要将我的系统用于 /var。完美的。我将移动/var。
将新格式化的 sdb1 挂载到 /mnt
挂载 /dev/sdb1 /mnt
将“/var”复制到“/mnt”(因此,在开始之前检查是否已安装 rsync)
rsync -a /var /mnt
现在(这是应该在“单一模式”、文本模式启动、所有服务停止的情况下完成的;否则您可能甚至无法做到这一点)
mv /var /oldvar # 因此您可以根据需要返回,将 oldvar 恢复为 var
重新创建一个新的 /var
mkdir /var
检查 oldvar 的权限并将其复制到新的 /var 上
将一行 sdb1 添加到 /etc/fstab 中的挂载点列表中:
echo "/dev/sdb1 /var ext4 auto 0 2" >> /etc/fstab
现在,每次启动时,sdb1 分区都会链接到 /var,您将能够在该分区上存储最多 17 GiB 的数据。
如果您现在重新启动,一切都应该像以前一样工作,您将看到一个完整的 /var,并且 sdb6 上根本没有可用空间,因为它被 oldvar 占用了。彻底检查一切是否正常。当您确定后,删除 oldvar 目录及其所有子目录。
笔记:我的示例使用/var。您可能会发现您需要移动 /home。一样。或者您可以深入一层以上,看看是什么占用了空间里面/var:
du -sk /var/* 2> /dev/null | 复制代码排序-n
在我的例子中,我发现 /var/www 占据了 90% 的空间。所以我不需要重新定位整个 /var,我可以使用“/var/www”执行上述步骤,并且仍然可以获得 90% 的好处。另外,现在我不需要登录到单一模式或重新启动,因为在我的系统上 /var/www 肯定只由 Apache HTTP 服务器使用,我可以停止并重新启动而无需重新启动(而 /var/log、/var /run、/var/mail 等可能正在使用并且需要单一模式):
apache2ctl stop
rsync -a /var/www /mnt
mv /var/www /var/oldwww
mkdir /var/www
# Set up the same ownership and permissions of the old /var/www
chown www-data:users /var/www
chmod 775 /var/www
# Compare the two ls lines
ls -la /var | grep www
# If ownership and pemissions are OK go on
echo "/dev/sdb1 /var/www ext4 auto 0 2" >> /etc/fstab
# Free up sdb1 from mnt
umount /mnt
# Check whether the automount from fstab works
mount /var/www
# Now everything is as before, www is there and useable, it's just on sdb1.
apache2ctl start
# Now verify everything works again. IF it works, oldwww is useless.
rm -rf /var/oldwww # kill the original www
(我也可以直接在新的 /var/www 上创建、安装它,然后将 oldww 同步到 www,而根本不涉及 /mnt)。