无论是通过更新管理器,还是通过终端,我都会出错。
当我尝试时sudo apt-get update && sudo apt-get upgrade
:
Fetched 1,024 kB in 20s (51.0 kB/s)
Reading package lists... Done
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-headers-generic :
Depends: linux-headers-3.13.0-29-generic but it is not installed
E: Unmet dependencies. Try using -f.
当我尝试时sudo apt-get -f install
:
Unpacking linux-headers-3.13.0-29-generic (3.13.0-29.53) ...
dpkg: error processing archive /var/cache/apt/archives/linux-headers-3.13.0-29-generic_3.13.0-29.53_amd64.deb
(--unpack): unable to create /usr/src/linux-headers-3.13.0-29-generic/include/config/inotify/user.h.dpkg-new' (while processing./usr/src/linux-headers-3.13.0-29-generic/include/config/inotify/user.h'): 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)
Errors were encountered while processing: /var/cache/apt/archives/linux-headers-3.13.0-29-generic_3.13.0-29.53_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
当我打开 Ubuntu 软件中心时,出现以下文本:
无法安装新软件,因为当前安装的软件有问题。是否要立即修复此问题?
我可以选择“修复”或“取消”。如果我点击“修复”,则会收到以下错误:
Package operation failed
the installation or removal of a software package failed.
(Reading database ... 417598 files and directories currently installed.)
Preparing to unpack .../linux-headers-3.13.0-29-generic_3.13.0-29.53_amd64.deb ... Unpacking linux-headers-3.13.0-29-generic (3.13.0-29.53) ...
dpkg: error processing archive /var/cache/apt/archives/linux-headers-3.13.0-29-generic_3.13.0-29.53_amd64.deb
(--unpack): unable to create /usr/src/linux-headers-3.13.0-29-generic/include/config/bug.h.dpkg-new' (while processing./usr/src/linux-headers-3.13.0-29-generic/include/config/bug.h'): 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)
Errors were encountered while processing: /var/cache/apt/archives/linux-headers-3.13.0-29-generic_3.13.0-29.53_amd64.deb
Error in function: dpkg: dependency problems prevent configuration of linux-headers-generic: linux-headers-generic depends on linux-headers-3.13.0-29-generic; however: Package linux-headers-3.13.0-29-generic is not installed.
dpkg: error processing package linux-headers-generic (--configure): dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic: linux-generic depends on linux-headers-generic (= 3.13.0.29.35); however: Package linux-headers-generic is not configured yet.
dpkg: error processing package linux-generic (--configure): dependency problems - leaving unconfigured
磁盘已满错误很奇怪,因为我的磁盘都没有已满。我知道这一点,因为当我运行 时df
,我得到了以下信息:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 36178648 13162504 21155332 39% /
none 4 0 4 0% /sys/fs/cgroup
udev 3873544 12 3873532 1% /dev
tmpfs 776860 1384 775476 1% /run
none 5120 0 5120 0% /run/lock
none 3884300 25276 3859024 1% /run/shm
none 102400 68 102332 1% /run/user
/dev/sda2 124327968 42583252 81744716 35% /media/sudoer/48AEC994AEC97B48
/dev/sda3 807468724 121812996 685655728 16% /media/sudoer/New Volume
我现在该做什么?提前致谢。
答案1
在unix文件系统上,文件和目录有两部分:索引节点和数据。
inode 中存储了有关文件的信息,例如权限、所有者、更改时间、访问时间等。
inode 总数是有限的No space left on device
,因此即使磁盘不是很满,如果达到这样的限制,你仍然可以得到。
使用:
df -i
查看 inode 时,如果得到 100%IUse
和 0 IFree
,则表示你有很多小的文件。
例如,如果您有 20 亿个大小为 1 字节的文件,您可能会达到 inode 限制,但您的磁盘可能并未完全填满。
如果是这种情况,请尝试删除更多文件,然后重做apt-get update
。
答案2
你可以使用以下命令清理 /boot 中的空间(删除旧的 Linux 标头等):
sudo apt-get autoremove
答案3
我也遇到了这个问题,根据提示,
无法创建 /usr/src/linux-headers-3.13.0-29-generic/include/...
正如 Lety 所解释的,“inode 的总数是有限的”。因此,我使用包管理器删除了一些旧的 linux-headers 包,这样/usr
就有足够的 inode,例如sudo apt-get remove linux-headers-3.13.0-3*
,然后我就可以运行sudo apt-get install -f
以继续安装。
答案4
正如@Lety 所说,问题是如何找到包含大量小文件的文件夹,这些小文件浪费了所有的 inode(如图df -i
所示)。
使用以下方法查找重量级软件包(例如旧内核)
wajig sizes | tail -n 30
需要wajig
安装,否则:
dpkg-query --show --showformat='${Package;-50}\t${Installed-Size}\n' | sort -k 2 -n | grep -v deinstall | awk '{printf "%.3f MB \t %s\n", $2/(1024), $1}'|tail -n 10
用于uname -r
查找当前内核,您不想删除它。
然后尝试:
- 重新启动或尝试终止打开了大文件(该文件已被删除)的进程
sudo lsof +L1
- 删除未使用的包
sudo apt-get autoremove
- 清理缓存
sudo apt-get clean
或手动/var/cache/apt/archives
- 使用
apt-get remove
或sudo dpkg --purge
删除一些旧内核或重型软件包。也许你仍然会得到unable to create /usr/src/linux-headers
... - 如果你到达这里,你将使用那些缓慢的技术来找到有问题的文件夹,但首先使用类似以下的方法找到常见的嫌疑人
for i in /usr/src/*; do echo $i; find $i |wc -l; done
:- Linux 头文件夹:
/usr/src/linux-headers-*
- 日志:
/var/log/
- Linux 头文件夹:
特定文件夹计数器:
du --inodes -d 1 /usr/src/ | sort -n
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
sudo find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n