我有一台机器,其根分区空间不足。我还有另一个磁盘,上面有足够的可用空间。如何配置 apt-get 将软件包安装在不同的磁盘/目录上?
答案1
你不想那样做。首先是尝试回收 root 下的空间。这或许是可行的。首先,cd 到/var/cache/apt/archives
并输入du -hs
。这将给出 apt 缓存的 deb 包使用的空间量。您可以手动删除它们或使用apt-get clean
.
还有一些用于删除大型未使用的包的工具。例如,您可以安装wajig
( apt-get install wajig
) 并使用wajig large
。这将为您提供按大小递增顺序排列的软件包列表。
如果这不能解决您的问题(而且应该),那么您可以考虑尝试增加根文件系统。你用的是LVM吗?无论如何,您想要做的是将根文件系统扩展得更大。使用 LVM,您可以轻松地将其扩展到另一个磁盘,但您将首先卸载房间文件系统。如果您不使用 LVM,可能会更困难 - 我只使用 LVM 很长一段时间,所以我不确定那里的选项。
如果您需要更多具体信息,请将 的输出粘贴df -h
到您的问题中。
答案2
apt-get(8) 没有直接选项来更改安装目录。 dpkg(1) 可以,但它适用于 chroot 环境。
您可以正常安装,然后移动应用程序文件,设置从原始位置到新位置的符号链接。这可能不适用于所有应用程序。另外,如果您不反转该过程,卸载后可能会出现问题。
最好的办法是清理 /root 分区以释放空间;将 /usr 或其他目录(如果在 /root 分区下)移动到空闲磁盘并挂载到 root 下;使用 LVM 利用其他磁盘上的可用空间来扩展根分区;或重建软件包以安装在其他地方。
答案3
您可以首先检查是否有任何大日志文件或类似文件占用太多空间(sudu
并find
找到它)。
如果您无法通过任何方法回收空间(例如apt-get clean
,查找是否有任何大文件,du -sh /*
然后du -sh /bigger_directory/*
等等),那么您可以将 /usr 移动到同一磁盘或其他磁盘上的新分区。这是通常安装所有软件包的目录,因此您应该通过移动它来恢复大部分磁盘空间。
我已经这样做过几次了,我什至用类似的方法迁移了整个系统(即将我的笔记本电脑的操作系统移动到新的 SSD 磁盘)。我采取的步骤:
- 备份系统和数据(始终在进行此类更改之前)。
- 准备并格式化磁盘中的一个分区(我们将其用作 /usr)。
- 使用 LIVECD 或 USB 记忆棒 Linux 发行版重新启动系统。
- 在 Live CD 上时,启动终端并成为 root。
- 在 ramdisk 中创建一个临时分区,然后将本地 PC 磁盘挂载到该分区即可使用。
- 执行所需的命令将 /usr 数据复制到新磁盘。回忆一下我的记忆(我认为还可以):
sudo su - root mkdir /temp ### Assuming / is /dev/sda1 : mount -t ext4 /dev/sda1 /temp cd /temp mv /temp/usr /temp/usr.OLD mkdir /temp/usr chown root:root /temp/usr chmod 755 /temp/usr ### Assuming your new partition is /dev/sda6 mount -t ext4 /dev/sda6 /temp/usr ### Copy the entire old /usr to the new disk rsync -avz /temp/usr.OLD/* /temp/usr ### Edit your fstab to automount /usr from the new location vim /temp/etc/fstab ### (add an entry like: /dev/sda6 /usr ext4 defaults 1 2) cd / umount /temp/usr umount /temp/ rmdir /temp exit
- 现在,您已将 /usr 数据复制到新分区,创建了一个空的 /usr 目录,并修改了 /etc/fstab 文件,以便当系统启动时,它会从这个新分区挂载 /usr 。
- 您现在可以启动系统并检查它是否正常工作。
- 当您确定系统工作正常后,您可以删除/usr.OLD并恢复/usr使用的所有磁盘。
如果出现任何类型的问题,请记住,您始终可以使用相同的方法恢复旧的 usr(使用 livecd 启动,将 / 安装在 /temp 中,删除 /etc/fstab 条目并删除 /usr 和 mv /usr.OLD如 /usr)。
免责声明:请注意,虽然这不是一个非常高级的过程,但您应该非常小心并确保您完全理解所有步骤。在您测试其是否有效之前,此过程中不会删除任何内容,但请在执行此过程之前检查所有内容。如果您想先测试它,可以使用示例分区(比方说 /opt)来练习。
答案4
在不同的分区上安装不同的软件包在技术上是可行的,但很困难。你可以使用联合安装将新安装的软件包和软件包版本定向到不同的文件系统,同时保持所有内容在正常位置可见,但这太过分了。
不要在不同位置安装新包,而是选择一个大目录树并将其移动到不同的文件系统,然后创建符号链接。例如,如果您创建了一个安装在 上的新文件系统/LARGE
,并且您决定移动/usr/share/doc
到这个新文件系统:
mv /usr/share/doc /LARGE/doc
ln -s /LARGE/doc /usr/share/doc
然后继续正常使用您的系统。
理想情况下,您应该扩大根文件系统。如果您在LVM上使用一种主流文件系统(例如ext4、btrfs),您可以在系统运行时执行以下操作:扩大LVM卷(安排物理卷上有一些可用空间然后运行lvextend
),然后扩大其上的文件系统来填充卷(运行resize2fs
或btrfs filesystem resize
)。如果您不使用 LVM,则可能需要重新启动到实时系统才能扩大根分区。