無法更新/安裝軟件包-空間問題-釋放inode

首先,由於根分區的特性,這是一個特殊的錯誤,通常在典型安裝中不會發生 

首先,我將提到問題發生的歷史以及如何解決的歷史。

我的團隊是 索尼Vaio M120AL上網本 我有大約3年的時間,他們共存320 GB硬盤 窗戶7, ,我的工作分區 Xubuntu的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-XNUMX / arch / xtensa / include / asm / coprocessor.h'):設備上沒有剩餘空間

在以前的某些情況下,我也遇到了同樣的事情,但這是因為我允許不刪除舊的內核就將它們累積起來,但是這次我檢查了一下,實際上有600 Mb可用 Conky的 從我不了解的地方開始,但是要確認這是否是我配置方式或類似方式的錯誤,我運行了 df -h:

df -h

但是我在/裡還有空間。

因此,我沒有記錯,這足以執行更新(自從進入Xubuntu以來,我已經在漫長的一年中多次這樣做),無論如何我都會做一個sudo apt-get clean 清理我下載的程序包,然後重試,但結果相同。

我仍然覺得很奇怪,但是無論如何,我還是嘗試移開/我一直使用的圖標主題,並且修改了很多(法恩莎 y 醒了)以釋放更多空間,從而最終設法執行更新,然後再次將其返回到/。

但是,這個想法仍然浮現在我的腦海,但我不知道哪一個。 幾個小時後,當我嘗試安裝一些額外的軟件包時,我再次遇到上述錯誤,並且再次有足夠的可用空間,因此我致力於進行調查。

互聯網搜索使我在以下論壇上找到了多個話題 ubuntu-is,但是某些人的答案總是相同的:您沒有足夠的空間刪除文件或擴展根分區,但是我發現在發現的不同線程中有一些共同點,即總是根分區具有可用空間,但是它類似於我的(〜600-900 Mb),分區的大小從未超過10 Gb,所以我說服了問題一定是另一個問題,這就是我之所以能獲得該職位的標題 ESTA 頁面,問題是根分區已使用了100%的inode。

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

100%使用了inode

100%使用了inode

現在是解釋。

索引節點使用丹尼斯·里奇(Dennis Ritchie)的話:

索引,由於文件系統的結構有些不尋常,該結構將對文件的訪問信息作為平面列表存儲在磁盤上,而保留了目錄的所有層次結構信息

因此,對於給定的文件系統,可能仍然有可用空間來存儲文件,但是由於系統中存在許多文件,因此無法創建新文件,因此沒有索引節點可以索引它們。

關鍵是分區中的索引節點數 分機4 無法修改(還有其他類型的系統,例如 杰弗克斯 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的默認選項(這是格式化分區的默認選項),並且它的大小只剩下少量的索引節點,並且通常幾乎都是正常情況,我們所有的分區都位於EXT4中,該分區在創建該數字時會對其進行設置,以後將無法對其進行修改。

  3.   杰拉多·H 他說:

    如您所見,這是使人們遠離linux並最終回到Windows的事情,您認為這種情況下的普通用戶如何解決此問題?
    您不必浪費時間進行固定和配置這類事情,也不會浪費生產時間。
    Miguel de Icaza的發言正確,因此他決定改用Mac,因為那期間一切正常。

    1.    拉夫 他說:

      而已。 在OS X中,一切工作都很漂亮..目前無法解釋為什麼帖子評論的作者發生了什麼,所以請不要提供此評論。 它將以火焰結束。

      1.    埃利奧時間3000 他說:

        就我而言,Debian可以在我的PC上運行所有內容,結果證明我使用DVD作為額外的存儲庫,將其從Squeeze升級到Wheezy。 這樣任何人都可以更新。

    2.    法比安 他說:

      那麼,您就有了Windows用戶的頭腦。
      GNU / Linux非常適合您。
      問候

  4.   圍攻84 他說:

    這很有趣。

  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.   哈斯科 他說:

    同樣的問題發生在我身上,卻無能為力,這讓我非常困惑。 就我而言,根分區有很多可用內存,但是使用了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.   g 他說:

    好極了!

    您不僅解決了一個棘手的問題,而且在學習過程中我不斷學習(並享受)

  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
    E:返回子進程/ 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.文件Nodes-i NUsados NLibres NUso%已安裝在
    / dev / root 1915424 1915288 136 100%/

    後來我發現ntopng風暴正在觸碰我的鼻子,我消除了它們,然後...

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

    Tachán!!!

    root @ pi:/#df -i
    S.文件Nodes-i NUsados NLibres NUso%已安裝在
    / dev / root 1915424 160408 1755016 9%/

    謝謝