将分区移动到根分区

我目前坚持限制性的分区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

  1. 首先你应该经常检查,如果你有足够的可用空间。 这一次,你有。

  2. 关于副本:

没那么简单。 有特殊的文件,其特殊的属性不被复制总是正确的。 使用。而不是cp -R

 cp -vfa /usr /newusr 

如果你想看看目前正在做什么,可以用“-v”标志来达到。

  1. 不要忘记编辑/etc/fstab来改变。
  2. 警告:重新分区后,内核不能总是重新读取新的分区表,因此有可能会进一步使用旧的! 这是非常危险的! 关于当前分区表的内核版本可以在/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的机器(你的电脑,办公机器,服务器等),但是这要依赖于这样做才能做到正式的方式。