我的第一个问题是当我尝试apt-get update
或时apt-get upgrade
。升级时我收到以下错误:
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.
我尝试运行 apt-get install -f,这是输出(在提示符下说“是”之后)
(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
No apport report written because the error message indicates a disk full error
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
我尝试运行apt-get autoremove
但出现了与 相同的错误apt-get upgrade
。
当我运行时df
,我得到以下信息/boot
:
/dev/sda1 233191 230297 0 100% /boot
因此,我在其他地方读到我应该尝试清除旧内核。我使用以下方法检查了我拥有的内核:
$ dpkg -l linux-image-\* | grep ^ii
ii linux-image-2.6.38-13-server 2.6.38-13.52 Linux kernel image for version 2.6.38 on x86_64
ii linux-image-3.0.0-13-server 3.0.0-13.22 Linux kernel image for version 3.0.0 on x86_64
ii linux-image-3.0.0-14-server 3.0.0-14.23 Linux kernel image for version 3.0.0 on x86_64
ii linux-image-3.0.0-15-server 3.0.0-15.26 Linux kernel image for version 3.0.0 on x86_64
ii linux-image-3.0.0-16-server 3.0.0-16.29 Linux kernel image for version 3.0.0 on x86_64
ii linux-image-3.0.0-17-server 3.0.0-17.30 Linux kernel image for version 3.0.0 on x86_64
ii linux-image-3.2.0-24-generic 3.2.0-24.39 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii linux-image-3.2.0-25-generic 3.2.0-25.40 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii linux-image-3.2.0-26-generic 3.2.0-26.41 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
当我尝试用这个删除最旧的:
$ sudo apt-get purge linux-image-2.6.38-13-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
我怎样才能释放或延长启动时间而不弄乱我的安装?
答案1
释放根文件系统上的空间
要释放根文件系统上的空间,您可以尝试执行apt-get clean
。
如果这不起作用,您可以转到/var/cache/apt/archives
并手动从缓存中删除一些文件以恢复一些空间,例如:
sudo rm linux-headers-*
.deb
如果需要的话,删除这里的所有文件也没什么坏处- 就是这样。如果再次需要它们,apt-get clean
它们将自动重新下载。apt
释放 /boot 文件系统上的空间
原始发帖者有一个单独的/boot
分区,该分区已满,导致系统apt
无法运行。他需要在那里释放空间。
如果空间足够,请/boot
删除一个或两个配置文件:
sudo rm config-3.2.0-19-generic-pae
例如,但使用你打算删除的内核版本之一的名称。这将释放一点空间(每个大约 144K)。
如果需要更多空间,请分别删除旧的vmlinuz
、initrd
和文件abi
,System.map
直到有足够的空间(我的一个 i386 内核版本大约需要 22M)。
不管你做什么,不要全部删除对于您使用的每种内核,您至少应该保留每种文件的最新两个匹配版本。
然后继续执行 apt-get install 命令。如上所述,它们可能必须重新下载您删除的一些 deb,但如果是这样,这将自动发生。当您再次使用 apt 时,使用 apt-get 删除与您删除的文件相对应的软件包进行清理 - 这样一切都匹配了。
中的配置文件/boot
是内核配置被使用由内核团队建造同名的内核。删除它应该无害,除非您想将其作为参考或帮助您构建自己的内核。
最后,您要手动从分区中删除一个或两个旧内核包,/boot
为新内核包腾出更多空间。
答案2
就我而言,apt
命令和dpkg
命令无法完成,也无法删除。安装时自动更新失败2.6.32-56-server
。
我的第一步是确定要使用的空间,
cd /boot
du -sk *|sort -n
我有大约 30 个内核和支持文件。
我执行了uname -a
获取正在运行的内核的操作,我发现我使用的是 Linux 替代版本2.6.32-43-server
,并且执行了tar
6 个未运行且较旧的版本。
tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server
然后我按照rm -rf
我备份的内容做了一些事情:
rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server
我将这些命令作为示例展示,您必须根据您的情况决定使用什么命令。
现在我有了空间/boot
,我可以跑了
apt-get -f install
清理失败的安装2.6.32-56-server
。
然后我做了
apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server
这给了我空间来恢复我已备份的内容。
tar -xf ~username/boot.tar
rm ~username/boot.tar
为了清理,我可以运行:
apt-get autoremove
我重新启动后现在只使用了 4% /boot
。
答案3
您可以使用dpkg
而不是apt-get
来删除旧内核:
sudo dpkg -r linux-image-3.2.0-29-generic
答案4
我发现唯一对我有用的方法就是使用 Aptitude。
sudo aptitude
然后,当它打开时,通常会在底部显示一些未满足的依赖关系。您可以点击字母g
继续建议的删除。它会带您进入一个页面,其中列出了将要发生的事情。
-
破碎的玉米粒旁边应该有一个减号。g
再次按下,它将移除破碎的玉米粒。按下q
退出。然后你应该能够使用sudo apt-get autoremove
它来摆脱旧的玉米粒并释放空间。
2022 年更新: 另一种方法是手动删除一些内核文件,特别是在未安装 aptitude 的情况下:
首先检查正在运行的内核,确保您没有删除它:
uname -r
然后列出模块目录:
ls /usr/lib/modules/
例如,这是我的一台服务器的列表:
drwxr-xr-x 5 root root 4096 Mar 2 14:16 5.4.0-100-generic
drwxr-xr-x 2 root root 250 Apr 27 2021 5.4.0-26-generic
drwxr-xr-x 2 root root 250 May 13 2021 5.4.0-28-generic
drwxr-xr-x 2 root root 250 Oct 26 14:01 5.4.0-72-generic
drwxr-xr-x 2 root root 250 Oct 26 14:01 5.4.0-73-generic
drwxr-xr-x 2 root root 250 Oct 26 14:01 5.4.0-80-generic
drwxr-xr-x 2 root root 250 Mar 11 16:20 5.4.0-84-generic
drwxr-xr-x 2 root root 250 Mar 11 16:20 5.4.0-89-generic
drwxr-xr-x 2 root root 250 Mar 11 16:20 5.4.0-91-generic
drwxr-xr-x 5 root root 4096 Feb 1 14:15 5.4.0-97-generic
从此目录中删除除最新 2 个之外的所有文件。例如:
sudo rm -rf 5.4.0-26-generic 5.4.0-28-generic 5.4.0-72-generic 5.4.0-73-generic 5.4.0-80-generic 5.4.0-84-generic 5.4.0-89-generic 5.4.0-91-generic
还要检查 /boot 目录并在那里执行相同的过程。
然后检查是否释放了一些空间:
df -h
最后运行 apt 来修复损坏的软件包:
sudo apt -f install