我不小心创建了一个/var
分区,我想删除它。是否可以删除该分区并使用该/
分区来包含/var
没有重新安装操作系统还是必须重新分区硬盘并重新安装所有内容?
在后一种情况下,我可以做些什么来在新系统中自动重新安装已安装的更新/程序,还是必须列出我添加到系统中的所有内容并手动重新安装?我的/home
位于一个单独的分区上,因此新安装可能会重复使用它,尽管我更关心我安装到的内容/
。
操作系统是Kubuntu 12.10。
答案1
您可以使用 Live CD 操作系统启动计算机。这将允许您/var
在不损坏操作系统的情况下进行移动。我已经在 SLES 安装中使用、、和
进行了相反的操作。我认为它适用于其他发行版。 /tmp
/var
/opt
/usr
- 启动 Live CD
- 将旧
/var
分区挂载到/mnt/var
- 挂载真实根目录在
/mnt/root
- 正确的
/mnt/root/etc/fstab
- 删除旧的安装点
rmdir /mnt/root/var
- 运行一个
cp -a /mnt/var /mnt/root/var
- 启动真正的操作系统
答案2
尤吉安的回答绝对是安全且正确的方法。但对于某些人来说,知道您实际上可以在不关闭正在运行的系统的情况下做到这一点可能会很好。在无法从 liveCD 启动的情况下,您可以将此答案视为培训或最后的手段。
免责声明:不建议初学者使用此过程。如果您对步骤 1 没有给予足够的重视,则在执行后续步骤时您的系统可能会崩溃,并且重新启动后您可能会遇到各种应用程序的意外行为。在尝试此操作之前,您应该检查您是否熟悉/var
tldp 的描述以及您的特定于发行版的偏差。
关闭已打开文件的程序
/var
。首先切换到控制台(“真正的”ttys 之一)并关闭 X 服务器以及桌面管理器(kdm/gdm/lightdm/...)(如果您使用桌面管理器)。如果您不知道如何执行此操作或它意味着什么,请不要继续 - 您破坏系统的可能性太高,并且这里的分步过程涵盖了太多的可能性 - 抱歉!使用
lsof
或fuser
查找在 下打开文件的剩余程序/var
。请注意,如果程序作为系统服务启动/由系统服务启动,则最好停止该服务,而不是终止任务。如果有些程序/服务太顽固而无法以这种方式处理,您也可以尝试切换到单用户模式(初始化级别 1) - 如果您可以接受的话。在大多数情况下,在 下仍然打开一些(!)文件是可以的/var
- 例如 pid 文件/var/run
,以防您的系统使用该位置。挂载你的根分区(第二次)。只需选择任何空目录作为临时安装点 - 我将用作
/mnt/tmp
示例。通常该mount
命令(不带参数)不会显示根分区后面的真实设备名称,您需要检查它是哪一个(除非您确定)。您通常可以从lsblk
(如果您的系统上有)或引导加载程序配置获取信息,或者通过cat /proc/cmdline
或通过按 报告的大小识别分区来获取信息fdisk
。复制
/var
内容。找到分区并安装它后,将 的内容复制/var
到您的 rootfs(安装在新位置),使用cp -ad
,例如:cp -ad /var /mnt/tmp/
。注意:如果您的发行版仍然管理/var/run
和/var/lock
目录而不是最近引入的/run/
,您应该跳过这两个目录的内容。如果外部全局变量已在您的 shell 中启用,您可以使用cp -ad /var/!(run|lock) /mnt/tmp/var/
- 或cpio
改为使用。只需要在复制后创建两个目录/mnt/tmp/var/
并正确设置它们的权限即可。删除
/var
中的旧条目fstab
。当然,安全的方法是将其注释掉。重启
答案3
在根下:
cp -rf /var /var-new && umount /var && mv /var /var-old && mv /var-new /var
然后从 /etc/fstab 中删除或注释掉 /var 挂载点并重新启动