我将 /var 安装为单独的分区,虽然它有 2Gb,但经常被填满。使用 apt clean 之类的东西最多只能释放 100m。所以我想将它移动到根分区。我想知道最简单的方法是什么?我知道我可以从 USB 启动并执行此操作(虽然不确定如何操作),但我想知道是否可以避免这种情况并仅从当前安装中执行此操作?
答案1
您应该能够随时将/var
分区中的内容移动到/
相应位置。它上面没有特殊的锁。
sudo cp -pr /var /var2
sudo umount /var
sudo rm -R /var
sudo mv /var2 /var
/var
然后从 中移除安装的线/etc/fstab
。
sudo nano /etc/fstab
如果收到错误/var: target is busy
,您需要找出哪些进程阻止卸载设备并停止它们。
免责声明:我仍然建议在实时系统或 grub rescue 中执行此操作。这样应该更安全。
答案2
我认为从长远来看,移动 var 不会帮助你解决问题,在你的特定情况下,你可能需要查看 logrotate 等,填满你的 rootfs 比填满 /var 更成问题。我认为这就是有些人有单独分区的原因。因为你认为可以处理这个问题的一个工具,配额,是特定于用户/文件系统的,并且不允许指定特定目录。
就我而言,在关机期间看到 systemd 发出的错误消息令人不安,因为它无法卸载 /var,因为它本身正在使用 / 系统日志。在我看来更有效。
一般来说,移动正在使用的文件系统是疯狂的,在文件写入时进行复制肯定行不通。虽然 Linux 允许您删除打开的文件,但所谓的“匿名文件”……请参阅
https://stackoverflow.com/questions/4171713/relinking-an-anonymous-unlinked-but-open-file有关更多信息...您将无法获得这些写入。因此,请务必检查 lsof 并确保您关心的内容没有写入 fs。一些默认用户浮现在脑海中,数据库(MySQL、Mongo、Postgres,可能还有其他),/var/log 就像一切,/var/run 尤其是在 systemd 系统上。/var 中可能有很多重要的东西。所以要小心。做不是立即按照其他答案的建议进行rm -rf /var
操作并假设一切顺利。您可以简单地注释掉 fstab 中的 /var 条目,这样它就不再挂载,并添加将 /newvar 绑定到 /var 的条目。当您重新启动并验证一切仍在正常工作时,您可能会考虑删除它,但实际上,请检查它是否正常工作。如果您并不急需磁盘空间,请将其保留一段时间,这有什么坏处?备份?无论您做什么,都不要立即删除它,除非您是受虐狂,那么我想您会想要删除它。
话虽如此,我感同身受...我知道这很疯狂,但我宁愿用 Google 寻找方法来实现它,然后最终在这里告诉你我要做什么,而不是仅仅重新启动,按 F12 并启动 Live CD,或者只是通过附加rescue
到我的内核命令行进入救援 shell...可能是因为我没有使用引导加载程序,但仍然...efi shell 是一个东西,所以让我们承认这是懒惰,我们都宁愿花 16 个小时修复我们破坏的系统也不愿这样做。
# Probably completely pointless
sync
# Make a copy, but realize it is as of right now and thing are still being written, record the errors, so you have a better idea of what will be broken.
cp -avPR /var /varnew 2>varnew.errs
mount -o bind /varnew /var
/etc/fstab
#/dev/mapper/vgX-oldvar /var ext4 defaults 0 0
/newvar /var none bind
愿飞天面条怪兽怜悯你的灵魂
reboot
# Check stuff and if you must format/lvremove whatever your old var