安装软件包时显示“设备上没有剩余空间”,但我还有剩余空间

安装软件包时显示“设备上没有剩余空间”,但我还有剩余空间

无论是通过更新管理器,还是通过终端,我都会出错。

当我尝试时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查找当前内核,您不想删除它。

然后尝试:

  1. 重新启动或尝试终止打开了大文件(该文件已被删除)的进程sudo lsof +L1
  2. 删除未使用的包sudo apt-get autoremove
  3. 清理缓存sudo apt-get clean或手动/var/cache/apt/archives
  4. 使用apt-get removesudo dpkg --purge删除一些旧内核或重型软件包。也许你仍然会得到unable to create /usr/src/linux-headers...
  5. 如果你到达这里,你将使用那些缓慢的技术来找到有问题的文件夹,但首先使用类似以下的方法找到常见的嫌疑人for i in /usr/src/*; do echo $i; find $i |wc -l; done
    1. Linux 头文件夹:/usr/src/linux-headers-*
    2. 日志:/var/log/

特定文件夹计数器:

  • 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

相关内容