我目前坚持限制性的分区scheme,使我的分区填满。 它看起来像这样:
/dev/sda7 870G 315G 511G 39% / /dev/sda6 2.0G 271M 1.6G 15% /tmp /dev/sda3 15G 13G 1.5G 90% /usr /dev/sda2 15G 8.6G 5.0G 64% /var /dev/sda1 99M 36M 58M 39% /boot tmpfs 7.9G 0 7.9G 0% /dev/shm
我想将/usr (和/var也可能)中的数据移动到根分区。 我并不关心自己的分区,所以不需要合并。
这样做最好的方法是什么? 目前,我的计划是这样的:
cp -R /usr /newusr umount /usr mv /newusr /usr
难道这真的很简单,还是我忽略了一些东西?
你的方法是正确的。 在根分区上创build一个目录,在那里复制你的数据,卸载usr分区,并把你的新目录移到usr 。 之后不要忘记编辑你的/etc/fstab 。
首先你应该经常检查,如果你有足够的可用空间。 这一次,你有。
关于副本:
没那么简单。 有特殊的文件,其特殊的属性不被复制总是正确的。 使用。而不是cp -R
cp -vfa /usr /newusr
如果你想看看目前正在做什么,可以用“-v”标志来达到。
/etc/fstab来改变。 /proc/partitionsfind,磁盘上的分区表可以用fdisk -l /dev/sda读取。 如果当前想要更改的分区不匹配,则最好重启。 为了达到这个目标,有必要在单用户模式下使用或使用LiveCD,这就是你将在网上find的。
此外,可以在运行时执行此操作(当然,有点风险),但我认为这种方式只适用于/ var而不适用于/ usr ,因此某些运行时库依赖于此文件夹。 如果可以的话,你可以尝试以前的testing机器。
首先,您必须检查是否有任何进程/服务正在使用/写入您要移动的目录。
lsof | grep -E '/usr|/var'
通常/ var仍然在使用pid和sock文件, / usr以及任何lib都将需要它。
所以,停止/终止出现的服务和进程。
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME cupsd 723 root 5u REG 8,1 0 8651393 /var/log/cups/error_log cupsd 723 root 6u REG 8,1 0 8651908 /var/log/cups/page_log cupsd 723 root 12u unix 0xffff88020d97d780 0t0 9958 /var/run/cups/cups.sock
在这个简短的例子中,cups守护进程正在运行并使用这些目录。 如果停止他们,他们不会出现在lsof输出。
之后,你需要一份你当前的数据,我会build议使用rsync而不是cp(为了保存所有内容,权限,符号链接等)
mkdir /mnt/var mkdir /mnt/usr
做你的备份
rsync -avz /var/* /mnt/var rsync -avz /usr/* /mnt/usr
卸载文件夹
umount /var umount /usr
还原数据
rsync -avz /mnt/var/* /var rsync -avz /mnt/usr/* /usr
编辑你的/ etc / fstab文件并注释/删除/ var和/ usr应该挂载的条目。
然后,您可以启动停止的所有服务或重新启动计算机。 如果为/ usr不起作用,你不能停止一个守护进程(也许你不能杀死它,因为取决于init pid)唯一的方法就是使用一个LiveCD。
虽然你没有提及哪种types的机器(你的电脑,办公机器,服务器等),但是这要依赖于这样做才能做到正式的方式。