无法更新/安装软件包-空间问题-释放inode

首先,由于我的根分区的特性,这是一个特殊的错误,通常在典型安装中不会发生 

首先,我将提到有关问题如何发生以及如何解决的故事。

我的团队是 索尼Vaio M120AL上网本 我有大约3年的时间,他们共存320 GB硬盘 窗户7, ,我的工作分区 许本图12.04,交换分区,/ home分区以及一个与之共享信息的附加信息分区 Windows操作系统。

由于这些原因,按照大多数标准,我在两个系统上的根分区都非常小(每个分区约6GB),但是它们从来没有给我带来任何问题,因为它们足以容纳我需要的所有软件包。

现在,进入特定情况,几天前在 Xubuntu上 (其中包括一个新内核)我看到更新管理器显示一个错误,表明它正在尝试安装linux-image-3.2.0-51-generic,但是其依赖项linux-headers-3.2.0-51它不会被安装,我将详细检查错误,并且我注意到dpkg抱怨没有可用空间。

该错误说的是这种风格的东西,尽管不完全相同,因为我没有写下来:

无法创建`/usr/src/linux-headers-3.2.0-43/arch/xtensa/include/asm/coprocessor.h.dpkg-new'(正在处理../usr/src/linux-headers -3.2.0-43 / arch / xtensa / include / asm / coprocessor.h'):设备上没有剩余空间

在以前的某些情况下,我也遇到了同样的事情,但这是因为我允许几个旧内核累积而不删除它们,但是这次我检查了一下,根据 Conky的 从我不了解的地方开始,但是要确认这是否是我配置方式或类似方式的错误,我运行了 df -h:

df -h

但是我在/里还有空间。

因此,我没有记错,这足以执行更新(自从进入Xubuntu以来,我已经在漫长的一年中多次这样做),无论如何我都会做一个sudo apt-get clean 清理我下载的程序包,然后重试,但结果相同。

我仍然觉得很奇怪,但是无论如何,我还是尝试移开/我一直使用的图标主题,并且修改了很多(法恩莎 y 唤起)释放更多空间,从而最终设法执行更新,然后再次将其返回到/。

但是,这个想法仍然浮现在我的脑海,但我不知道哪一个。 几个小时后,当我尝试安装一些额外的软件包时,我再次遇到上述错误,并且再次有足够的可用空间,因此我进行了研究。

互联网搜索使我在以下论坛上找到了多个话题 ubuntu-is,但是某些人的答案总是相同的:您没有足够的空间删除文件或扩展根分区,但是我发现在发现的不同线程中有一些共同点,即总是根分区具有可用空间,但是它类似于我的(〜600-900 Mb),分区的大小从未超过10 Gb,所以我说服了问题一定是另一个问题,这就是我之所以能获得该职位的标题 页面,问题在于根分区已使用了100%的inode。

可以使用以下命令查看索引节点的使用 df-i:

100%使用了inode

100%使用了inode

现在来解释。

索引节点使用丹尼斯·里奇(Dennis Ritchie)的话:

索引,由于文件系统的结构有些不寻常,该结构将对文件的访问信息作为平面列表存储在磁盘上,而保留了目录的所有层次结构信息

因此,对于给定的文件系统,可能会发生可用空间来存储文件的情况,但是由于系统中存在许多文件,因此无法创建新文件,因此没有索引节点可以索引它们。

关键是分区中的索引节点数 EXT4 无法修改(还有其他类型的系统,例如 JFX o XFS 这里不是一个限制,因为它是动态的),它是一个固定的数字,当使用mkfs.ext4创建分区时,将根据分区的大小计算分区的固定数目,并根据位于首选项的每个inode的字节数比率 /etc/mke2fs.conf。

在安装系统时,通常使用默认首选项,其中包括一个inode = 16384关系,对于较小的分区,该首选项可能太大而无法创建足够的空间(在我的情况下)。 更改它的唯一方法是通过创建/格式化分区并使用选项指定它 -i.

但这对我来说不是一个选择,因为我已经提到过,inode与现有文件的数量有关,因此请使用下面的bash脚本: 堆栈溢出 并链接到您前面提到的页面上,以查找根分区中包含更多文件的目录:

重要的是要知道脚本会从调用位置分析目录,也就是说,就像我对分析该目录感兴趣 / 好吧,首先在航站楼,我必须与 坎德拉/ 然后如果要调用脚本
#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

得到以下结果:

这是罪魁祸首!

这是罪魁祸首!

左侧显示的数字表示存在的文件数,路径表示关联的目录,在下面的一行显示目录/ var / lib / dpkg / info,但是像往常一样,我在这里清除软件包。

但是,如果我发现了两个问题,则第一个问题虽然猫爬虫并没有从那里上升,但还有几个条目包括图标 唤起,所以我必须将它们移动是或是,此外,这说明了为什么我可以更新软件包,因为在移动它们时我从根分区中释放了许多索引节点,但是当我重新放置它们时问题又回来了。

其次,下一个最大的条目数与几个旧内核的标头相关联,并且我意识到我一直使用的消除旧内核的过程并不能消除标头,在我编写的终端中,通常使用以下步骤:

dpkg --get-selections | grep Linux映像

内核记录

显示我安装的内核,然后使用:

sudo apt-get清除程序包

其中package是所讨论内核的名称,但这不会删除关联的标头,因此我执行了以下操作:

dpkg --get-selections | grep Linux

旧标题

然后,我继续使用以下方法删除旧标题:

须藤 apt-get 清除 linux-headers-3.2.0-41 linux-headers-3.2.0-44 linux-headers-3.2.0-45 linux-headers-3.2.0-48

还有voilà,当然还有图标的问题 唤起 所以我决定将它们移动到〜/ .icons并使它们可用于整个系统,我只是在/ usr / share / icons中建立了一个符号链接,这是 df-i 这是因为消除了标题,并且在移动了图标之后又消除了标题。

堆释放的索引节点!

堆释放的索引节点!

有了这个问题,问题就解决了,我可以毫无问题地安装/更新软件包了,希望这篇文章对某人有所帮助,或者为将来在小分区中的安装提供参考,并消除由缺乏的论坛所散布的主题的神秘性。空间。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   费尔南多·包蒂斯塔

    嗨,请使用ubuntu调整( http://ubuntu-tweak.com )就像Windows的tuneup一样,它可以帮助您删除大量垃圾,并在此过程中安全地卸载旧内核,但是,它留下了先前的内核进行引导,有时最后一个内核对我不起作用,我设法进入了系统,谢谢不要全部删除。

    1.    人造丝

      我认识他已有很长时间了,但是我总是更喜欢以自己的方式去做,并理解事情的运行方式,无论如何,即使没有一对旧的头文件出现问题,它也会在或多或少的时间内呈现相同的结果。图标主题,最后,正如我提到的,这不是缺少空间的问题,而是使用的inode的问题。

  2.   毛里求斯

    感谢您分享这个。 到目前为止,我还没有遇到这个问题,因为我使用的光盘都是Linux格式,没有Windows,因为我的计算机上没有该系统。

    因此,请记住这一点,以防万一有一天我看到这个问题。

    1.    人造丝

      问题不是来自于Windows的分区(这只是我的特殊情况),而是来自于较小的根分区,小于10Gb,安装程序使用默认选项mke2fs(这是格式化分区的分区)小于4Gb,并且它的大小只剩下少量的索引节点,并且通常几乎都是正常情况,我们所有的分区都位于EXTXNUMX中,该分区在创建该数字时会对其进行设置,以后将无法对其进行修改。

  3.   杰拉多·H

    如您所见,这是使人们远离linux并最终回到Windows的事情,您如何看待这种情况下的普通用户可以解决此问题?
    您不必浪费时间修复和配置这类事情,也不必浪费生产时间。
    Miguel de Icaza的发言是正确的,这就是为什么他决定改用Mac的原因,因为在那里一切正常。

    1.    拉夫

      而已。 在OS X中,一切工作正常。.目前无法解释帖子评论的作者为什么会发生什么,所以请没有人提供此评论。 它将以火焰结束。

      1.    埃利奥时间3000

        就我而言,Debian可以在我的PC上运行所有内容,结果证明我使用DVD作为额外的存储库,将其从Squeeze升级到Wheezy。 这样任何人都可以更新。

    2.    法比安

      那么,您就有了Windows用户的头脑。
      GNU / Linux非常适合您。
      问候

  4.   sieg84

    这很有趣。

  5.   乔治

    在小磁盘上安装gentoo时,此错误非常常见,因此,即使还有60%的可用空间,许多小源文件和分区也用尽了inode。 至少该手册通过键入mke2fs -j -T small / dev / sdaX对其进行了修复,它可能在ubuntu上运行。 在我玩怪异设置之前😛

    1.    人造丝

      确实,正如我之前提到的,您可以使用-i选项指定一个inode字节比率,但是您还提到了-T使用配置文件中名为/etc/mke2fs.conf的默认模式之一的选项,在这种情况下,small将应用blocksize = 1024,inode大小= 128和字节/字节比率= 4096。

  6.   MSX

    很棒!
    这是一个典型的问题,很长一段时间以来一直困扰着您,直到您意识到它的来源。
    +10的解释😀

    1.    人造丝

      正如您所说,您度过了愉快的时光!非常感谢您的来信,来自一位非常了解您的人!

  7.   安东尼奥

    太好了!,我学到了其他东西,它通过删除旧的标头以及恢复一些inode来帮助我恢复了19Mb左右。 现在,我有更多的安装空间。 因为我是Linux的新手,所以如果您认为还可以的话,我建议您发表一篇文章,介绍如何格式化以获取最大数量的inode,以及是否可以在保留磁盘信息的同时进行格式化。
    的问候和感谢

    1.    人造丝

      正如我在条目开头的提示中所提到的那样,这是一个非常罕见的问题,并且与我的情况一样,它与较小的根分区(<10GB)相关,而其他大小的分区则不太可能发生。 现在,关于索引节点的数量的更改,正如我在条目中也提到的那样,如果不对EXT4类型的分区进行格式化就无法做到这一点,因此,如果没有进行先前的备份,就无法将信息保留在磁盘上,要更改字节比率inode,请使用mke2fs命令中的-i选项或与-T相关联的选项之一(小,大,大等)。

  8.   马里奥

    优秀的! 问题的阐述,发生原因的解释,产生的原因以及解决的步骤! 我认为这是一个杰出的贡献! 谢谢Rayonant!

  9.   戴安娜·贝多亚(Diana Bedoya)

    感谢您的文章,它对我有很大帮助。 我已经尽一切努力克服了这个错误,并且通过删除旧的标头及其相关性,我能够重新安装程序并进行更新。 谢谢!

  10.   Jasco

    我遇到了同样的问题,什么也没有发生,这使我倒挂了哈哈哈。 就我而言,根分区有很多可用内存,但是它使用了100%的inode! 关键是,如果您长期使用相同的发行版,并且不随着时间的推移而删除旧的内核,那么积压的订单将很糟糕。 就我而言,我能够以与您所说的类似的方式解决问题,只有sudo apt-get remove或purge对我不起作用,而能够删除那些废弃内核文件的关键是使用sudo dpkg –remove和–purge,我能够一一释放i节点。 您所学的一切。 我希望能早点找到该条目,因为我会早点解决此问题。 感谢您略微介绍一下inode的功能,我对此并不了解。
    很棒的博客,问候!

  11.   狮子座

    你是个古怪的人,虽然麻烦,但很好理解。 我做了所有的工作,但是我不能做的是删除以前的linux-headers,它不会让我,这让我失望
    E:dpkg被中断,您必须手动运行“ sudo dpkg –configure -a”以解决问题
    我执行它告诉我的事,它使我
    设置openshot(1.4.0-1ubuntu1)...
    追溯(最近一次通话):
    文件“ / usr / sbin / update-python-modules”,行478,在
    package.install(py_installed)
    安装中的文件“ / usr / sbin / update-python-modules”,第112行
    os.symlink(文件名,destpath)
    OSError:[Errno 2]没有这样的文件或目录
    sys.excepthook中的错误:
    追溯(最近一次通话):
    apport_excepthook中的文件“ /usr/lib/python2.7/dist-packages/apport_python_hook.py”,第128行
    os.O_WRONLY | os.O_CREAT | os.O_EXCL,0o640),'w')
    OSError:[Errno 28]设备上没有剩余空间:'/var/crash/_usr_sbin_update-python-modules.0.crash'

    最初的例外是:
    追溯(最近一次通话):
    文件“ / usr / sbin / update-python-modules”,行478,在
    package.install(py_installed)
    安装中的文件“ / usr / sbin / update-python-modules”,第112行
    os.symlink(文件名,destpath)
    OSError:[Errno 2]没有这样的文件或目录
    dpkg:错误处理openshot(–configure):
    安装了安装后脚本的线程返回错误退出代码1
    dpkg:错误:无法打开`/ var / lib / dpkg / status'以写入数据库状态:设备上没有剩余空间
    问题是,我穿什么衣服?

  12.   保罗

    非常感谢! 这篇文章对我有很大帮助。

  13.  

    好极了!

    您不仅解决了一个棘手的问题,而且在学习过程中我不断学习(并享受)

  14.   胡安·卡洛斯

    你好首先,感谢您的帖子...

    其次,不幸的是它没有帮助我。 我来找他是因为包装损坏了,由于空间不足,系统不允许我解决这个问题,实际上从这里解释的是节点i。

    因此,我按照建议尝试清除旧内核,但系统不允许我这样做:
    juan @ juan-P29G:〜$ sudo apt-get purge linux-image-3.2.0-29-generic-pae
    正在阅读包装清单...完成
    创建依赖树
    正在读取状态信息...完成
    您可能需要运行“ apt-get -f install”来更正它:
    以下软件包具有未满足的依赖性:
    tzdata-java:取决于:tzdata(= 2014i-0ubuntu0.12.04)但要安装2014e-0ubuntu0.12.04
    E:不满足依赖关系。 尝试不带软件包的“ apt-get -f install”(或指定解决方案)。

    当我遵循系统的建议时:
    juan @ juan-P29G:〜$ sudo apt-get -f安装
    正在阅读包装清单...完成
    创建依赖树
    正在读取状态信息...完成
    更正依赖项...完成
    以下额外的软件包将被安装:
    数据
    以下软件包将被更新:
    数据
    已更新1,将安装0,将其删除0,以及未更新23。
    1没有完全安装或卸下。
    0 B / 461 kB的文件需要下载。
    此操作后将释放31,7 kB。
    您要继续[是/否]吗? s
    预先配置软件包...
    (正在读取数据库…893468当前安装的文件或目录。)
    正在准备替换tzdata 2014e-0ubuntu0.12.04(使用…/ tzdata_2014i-0ubuntu0.12.04_all.deb)…
    打开tzdata替代品的包装...
    dpkg:错误处理/var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb(–unpack):
    无法备份`./usr/share/zoneinfo/posix/America/Santo_Domingo'的符号链接:设备上没有剩余空间
    未写入“ apport”报告,因为错误消息表明该错误已满磁盘
    处理时遇到错误:
    /var/cache/apt/archives/tzdata_2014i-0ubuntu0.12.04_all.deb
    电子邮件:子进程的/ usr / bin中/ dpkg来返回一个错误代码(1)

    一个恶性循环...无论如何,我会看看我能做什么。

    问候。

  15.   胡安·卡洛斯

    大家好……我知道如何打破恶性循环。

    我将使用以下命令删除最旧内核的映像:
    sudo dpkg –删除linux-image-3.2.0-29-generic-pae

    这样,我获得了4389个i节点,足以修复损坏的数据包,然后按照文章中的指示删除了较旧的内核头文件。

    现在,我将通过删除一堆旧内核来恢复更多的i节点。

    感谢和问候,胡安·卡洛斯。

  16.   匿名

    他不会让我删除标题

    我打过
    苏多鹦鹉螺

    我已经进入了/ usr / src文件夹
    在那里,我看到了“标头”文件,并删除了它们
    有了他,他已经让我下了自动删除订单

  17.   匿名

    谢谢!! 帖子可能有点老了,但它仍然非常有用,使用inode解决了问题

  18.   路易斯

    人造丝:一种示例性的解释。
    尽管就我而言,我必须扩展分区(使用Gparted),但您的帖子帮助我了解了问题。 在按照您的方法进行操作之后,我从90%的占用的inode(扩展分区后)增加到只有28%。
    非常感谢。 从现在开始,我将使用它来消除旧的内核(和标头)。
    也要感谢Juan Carlos(我有同样的问题)。
    一个拥抱。

  19.   希拉留斯

    有趣的帖子,
    就我而言,我的使用率已从100%下降到9%

    root @ pi:/ home / pi#apt-get clean
    root @ pi:/ home / pi#df -i
    S.文件i节点NUsados NLibres NUso%组装在
    / dev /根目录1915424 1915288 136 100%/

    后来我发现ntopng风暴正在触碰我的鼻子,我消除了它们,然后...

    root @ pi:/ home / pi#rm -rf / var / tmp / ntopng /

    Tachán!!!

    root @ pi:/#df -i
    S.文件i节点NUsados NLibres NUso%组装在
    / dev / root 1915424 160408 1755016 9%/

    谢谢