如何将/ var移动到另一个现有分区?

我有一个/分区,其中包含/ var和太小。 我有另一个有足够空间的现有分区。

这是我的df:

File system Size. Occ. Avai. %Ful. Monté sur /dev/sda1 5,0G 4,5G 289M 95% / tmpfs 242M 0 242M 0% /lib/init/rw udev 10M 2,7M 7,4M 27% /dev tmpfs 242M 0 242M 0% /dev/shm /dev/sda2 15G 406M 14G 3% /home 

如何将/ var文件夹从sda1移动到sda2?

进入单用户模式,并确保写入/var任何进程都停止。 (使用lsof | grep /var检查)

  • mkdir -p /home/var
  • rsync -va /var /home/var
  • mv /var /var.old当你完成回收空间时,你可以删除/var.old
  • mkdir -p /var
  • mount -o bind /home/var /var
  • 更新你的/etc/fstab使绑定挂载永久。

/etc/fstab

  /home/var /var none bind 

你也可以使用:

  mkdir /home/var <move contents of /var to /home/var -- however you want; EX: mv /var/* /home/var> mv /var /var.old ln -s /home/var /var 

这似乎比乱搞fstab和安装东西容易得多。

移动/var而不改变到单用户模式

当我接pipe了由我的雇主托pipe公司为我提供的一个新的虚拟服务器时,我为varhome创build了额外的逻辑卷,它们是根分区中的常规目录。 由于虚拟服务器提供商没有提供类似于KVM的界面,我可以通过该界面以单用户模式访问服务器,因此上述答案不适用于我的设置。 我希望这个答案在类似情况下对其他人有用(我已经保存了LVM的细节,但是这些可以被忽略,因为新的文件系统是在逻辑卷还是磁盘分区上创build的)。

使用LVM创build和使用新的/var文件系统

为新var卷创build文件系统,将其挂载(使用临时目录),并将文件从当前/var复制到新文件系统。 使用rsync复制文件时,请使用-a, --archive选项来保留时间戳记,所有权,模式等及其-X, --xattrs选项以保留扩展属性,例如AppArmor使用的安全标签和SELinux的。

 sudo lvcreate -L 60GB -n var VolGroup00 sudo mkfs.ext4 /dev/VolGroup00/var sudo mkdir /var.new sudo mount /dev/VolGroup00/var /var.new sudo rsync -raX /var/ /var.new/ 

更新文件系统表

通过将以下行添加到/etc/fstab将新文件系统configuration为用作/var的新装入点。 请注意, 0用作通过编号(最后一个字段),以便在重新启动一定次数后文件系统不会自动检查( fsck )(我无法以单用户模式login到服务器) 。

 /dev/mapper/VolGroup00-var /var ext4 defaults 0 0 

由于我无法更改为单用户模式,请重新启动计算机以将此新卷用作/var

从根文件系统恢复磁盘空间

机器重新启动后,执行以下步骤清理临时目录,并从根文件系统中删除旧的/var文件:

  1. 删除临时安装点:

     sudo rmdir /var.new 
  2. 创build一个新的挂载点,以创build根文件系统上旧/var目录上的文件的替代path(目前,挂载在目录上的新的/var文件系统已将其“掩盖”):

     sudo mkdir /old-root sudo mount /dev/mapper/VolGroup00-root /old-root/ sudo rm -rf /old-root/var/* sudo umount /old-root/ sudo rmdir /old-root/