问题描述
我的第一个问题是当我尝试apt-get更新/升级。在升级时出现以下错误:
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,这是输出(在提示符后显示yes)
(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升级相同的错误
当我运行df时,我得到了这个/boot:
/dev/sda1 233191 230297 0 100% /boot
所以,我在其他地方读到我应该尝试清除旧的kernals。我检查了我曾与哪些kernals
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).
我怎样才能释放/扩展启动而不会搞乱我的安装?
最佳解决方案
释放根文件系统上的空间
要释放根文件系统上的空间,您可以尝试执行apt-get clean
。
如果这样做不起作用,你可以去/var /cache /apt /archives并从缓存中手动删除一些文件以获得一些空间,例如:
sudo rm linux-headers-*
如果需要的话,在这里删除所有的.deb文件并不会造成什么影响 – 这就是apt-get clean
所做的。如果他们再次需要,他们将自动成为re-downloaded。
释放/boot文件系统上的空间
原始海报有一个单独的/启动分区,这是完整的,并防止apt系统工作。他有必要在那里腾出空间。
如果有足够的空间,请进入/boot并删除一个或两个配置文件:
sudo rm config-3.2.0-19-generic-pae
例如,但使用您打算删除的内核版本之一的名称。这将释放一点空间(每个约144K)。
如果你需要更多的空间单独删除旧的vmlinuz initrd,abi和System.map文件,直到你有足够的空间(我的一个i386内核版本大约22 megs)。
无论你做什么,都不要全部删除它们。您至少应该保留每种文件的最新两个匹配版本,针对您使用的每种内核。
然后继续使用apt-get安装命令。如上所述,他们可能必须将re-download中的某些debs删除,但如果这样会自动发生。当你需要重新工作时,通过使用apt-get清除与你删除的文件相对应的包 – 因此一切都匹配。
/boot中的配置文件是内核团队用来构建相同名称的内核的内核配置。除非你想要它的参考或帮助你构建你自己的内核,否则它应该是无害的。
最后,你需要从/boot分区中手动删除一个或两个旧的内核软件包,以便为新软件包腾出更多空间。
次佳解决方案
在我的情况下,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
我重新启动,现在正在使用/boot的4%。
第三种解决方案
您可以使用dpkg
而不是apt-get
删除较旧的内核:
sudo dpkg -r linux-image-3.2.0-29-generic
第四种方案
这是我用来清理这个过程的过程。
我注意到在启动目录中还有一些旧版本的文件
$ ls /boot
vmcoreinfo-2.6.31-17-server
包管理器会列出旧版本
dpkg -l | grep linux-image
因此,我使用这个命令(autoremove也会删除我不想删除的更新图像)
sudo apt-get purge linux-image-2.6.31-17-server
我还剩下一些标题
dpkg -l | grep linux-headers
所以我这样做了:
sudo apt-get purge linux-headers-2.6.32-34
最后还有一个包裹,我无法用apt-get清除
$ dpkg -l | grep linux-image
rc linux-image-2.6.28-11-server
感谢下面的线程,我用下面的方法做了:Remove a package marked as rc by dpkg
sudo dpkg --purge linux-image-2.6.28-11-server
第五种方案
你不能对软件包采取行动,但你可以对其他文件采取行动。首先,浏览您的主文件夹,查看是否有任何可删除的内容。如果没有,尝试将大量文件移动到另一个分区(或闪存驱动器),然后尝试sudo apt-get install -f
清理程序包依赖性问题(很可能是通过dpkg
安装了.deb文件),然后清除所有内核。一旦您安全地拥有至少10 MB,请尝试清除不需要的软件或文件。