Linux节点释放,关于linux:如何释放Inode的使用量?
我有一個磁盤驅動器,其索引節點使用率為100%(使用df -i命令)。
但是,在實質上刪除文件后,使用率仍為100%。
那么正確的方法是什么?
磁盤空間使用較少的磁盤驅動器如何可能具有
Inode的使用率比磁盤空間使用率更高的磁盤驅動器高?
如果我壓縮大量文件,是否有可能減少使用的inode數量?
想給你50分的問題。 我能怎么做! :)
@Sophy不要那樣做。 你會被自動禁止
@StevenLu謝謝您的信息! 我想感謝他,因為我花了幾天時間解決我的問題。 但是這個問題可以幫助我。 再次感謝
@Sophy:為什么要為SO獎勵一些題外話? :)那絕對不是編程問題,無論獲得多少票。
空目錄也會占用inode。 刪除它們可以釋放一些索引節點。 在某些用例中,該數字可能很重要。 您可以使用以下命令刪除空目錄:find。 類型d-空-刪除
有用,但我投票決定關閉此問題為離題,因為這似乎屬于unix.stackexchange.com
如果您很不幸,您已經使用了所有索引節點的大約100%,并且無法創建Scipt。
您可以使用df -ih進行檢查。
然后,此bash命令可能會幫助您:
sudo find . -xdev -type f | cut -d"/" -f 2 | sort | uniq -c | sort -n
是的,這將花費一些時間,但是您可以找到包含最多文件的目錄。
可以解決問題。我的問題是/ lib / php / sessions目錄中有大量會話。也許有人有同樣的問題
Parallels plesk無法加載,ftp無法打開會話,Internet磁盤配額被取消(122)是當您的服務提供商將inode數(?文件)設置為最大時會遇到的一些問題即使您有無限的空間,也為20,000個inode(?文件)。
有人應該將此查找,剪切,uniq排序重寫為單個awk命令!
有時,它也有助于嘗試查找占用大量空間的目錄。例如,如果使用Apache默認配置啟用了mod_disk_cache,則您會發現varcacheapache2mod_disk_cache下的每個目錄僅具有合理的條目數量,但是整個層次結構將占用您的所有inode。運行du -hs *可能會提示一些占用比您預期更多的空間的地方。
@mogsie,awk是否能夠處理可能返回的數百萬行?
@alxndr awk可以保留目錄的哈希值和文件計數,而無需進行單調和分類。就是說,也許這是一個改進:find . -maxdepth 1 -type d | grep -v ^\.$ | xargs -n 1 -i{} find {} -xdev -type f | cut -d"" -f 2 | uniq -c | sort -n-這僅對最后一個列表進行排序。
如果您無法創建任何文件,則即使失敗也可能會失敗,因為sort可能無法將所有內容保留在內存中,并會嘗試自動回退以寫入臨時文件。一個顯然會失敗的過程...
謝謝,這完全幫助了我。我的小型VM的空間不足,但實際上是inode。最初,我四處清理大文件,但無濟于事,然后我運行了您的腳本并找到了一個包含6萬個小文件的目錄。我擺脫了他們,現在我重新開始營業。謝謝!
sort對我來說失敗了,但是我能夠給出有效的--buffer-size=10G。
@mogsie在我的版本中使用了一些gawk。這也算目錄。
@mogsie這是腳本的一個版本,它還計算目錄并處理包含換行符的文件名:find . -maxdepth 1 -not -path . -type d -print0 | xargs -0 -n 1 -I{} find {} -xdev -not -path {} -print0 | gawk BEGIN{RS="\0";FS="";ORS="\0"}{print $2} | uniq -cz | sort -nz。 gawk命令可以替換為grep -ozZ \.[^]*(由GNU grep 2.25測試)。不幸的是,cut不能處理空終止行。
@FrederickNord,sort失敗時的錯誤消息是什么?如何報告失敗?
@SteMa,目錄不可以自我清理嗎?
即使磁盤不是很滿,也很容易使用大量的索引節點。
索引節點已分配給文件,因此,如果您有成千上萬個文件(每個都有1字節),則在磁盤用盡之前,節點用盡了很長時間。
如果文件具有多個硬鏈接,則刪除文件也可能不會減少inode的數量。如我所說,inode屬于文件,而不是目錄條目。如果文件有兩個鏈接的目錄條目,則刪除其中一個不會釋放索引節點。
此外,您可以刪除目錄條目,但是,如果正在運行的進程仍打開了文件,則不會釋放索引節點。
我最初的建議是刪除所有可以刪除的文件,然后重新啟動該框以確保沒有使文件保持打開狀態的進程。
如果您這樣做仍然有問題,請告訴我們。
順便說一句,如果您要查找包含許多文件的目錄,此腳本可能會有所幫助:
#!/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_$$
當然,>tmpcount_em_$$僅在有空間的情況下才起作用...如果是這樣,請參閱@simons答案。
@alxndr,這就是為什么將文件系統分開通常是一個好主意的原因-這樣,填充類似tmp之類的內容不會影響您的其他文件系統。
您的答案非常適合"如果刪除該文件,系統將不會在重新啟動后繼續使用該文件"。但是有人問,"刪除inode指針后如何回收或重用inode?"。基本上,Linux內核每次創建文件時都會在文件中創建一個新的索引節點,并且在刪除文件時也不會自動回收該索引節點。
@paxdiablo,您說:"我最初的建議是刪除所有可以刪除的文件,然后重新啟動該框,以確保沒有使文件保持打開狀態的進程。"但是其產品服務器無法重新啟動,因此如何在不重新啟動的情況下釋放那些inode
@AshishKarpe,我想您是在談論您自己的情況,因為OP沒有提及生產服務器。如果您不能立即重啟,則有兩種可能性。首先,希望運行中的進程最終關閉當前文件,以便可以釋放磁盤資源。其次,即使生產服務器也應有一定程度的重啟空間-只需安排一些計劃內的停機時間,或等待下一個停機時間窗口出現。
發現在/ tmp中創建了許多小文件,這些文件正在消耗inode,因此使用cmd" find / tmp -type f -mmin +100 -name" *" | perl -nle unlink;"將其釋放。 ..........謝謝
非常感謝這篇文章。我有一臺RHEL 6.3服務器,該服務器具有所有可用分區,但是由于count_em腳本,由于一些奇怪的緩存文件填充了/ var / lib / sss / db,因此我能夠看到/ var分區中的inode全部用完了目錄 。我所有的應用程序(包括auditd和lvm)都沒有任何可用空間。現在到真正的問題... :-(
我想您想要的是ls -A而不是ls -A。你為什么要數。和..?
我的情況是我沒有i節點,并且已經刪除了所有可能的內容。
$ df -i
Filesystem ? ? Inodes ?IUsed ?IFree IUse% Mounted on
/dev/sda1 ? ? ?942080 507361 ? ? 11 ?100% /
我在ubuntu 12.04LTS上,無法刪除占用約40萬個inode的舊linux內核,因為apt由于缺少軟件包而被破壞了。而且我無法安裝新軟件包,因為我不在inode里面,所以被卡住了。
我最終手動刪除了一些舊的Linux內核,以釋放大約10,000個inode。
$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*
這足以讓我安裝缺少的軟件包并修復我的apt
$ sudo apt-get install linux-headers-3.2.0-76-generic-pae
然后使用apt刪除其余的舊Linux內核
$ sudo apt-get autoremove
現在情況好多了
$ df -i
Filesystem ? ? Inodes ?IUsed ?IFree IUse% Mounted on
/dev/sda1 ? ? ?942080 507361 434719 ? 54% /
在類似情況下,這是最接近我自己的方法。值得注意的是,在help.ubuntu.com/community/Lubuntu/Documentation/
我的情況恰好!但是不得不使用" sudo apt-get autoremove -f"來進行
執行以下操作是否安全:sudo rm -rf usrsrclinux-headers-3.2.0-2*,如果我確定我沒有使用該內核?
@MarsLee您可以使用" uname -a"檢查當前正在運行的內核
一個人叫$ sudo apt-get autoremove幫了我大忙。
我的解決方案:
嘗試查找這是否是inode的問題:
df -ih
嘗試查找具有大inode數量的根文件夾:
for i in /*; do echo $i; find $i |wc -l; done
嘗試查找特定的文件夾:
for i in /src/*; do echo $i; find $i |wc -l; done
如果這是linux標頭,請嘗試使用以下命令刪除最舊的標頭:
sudo apt-get autoremove linux-headers-3.13.0-24
我個人將它們移動到一個已安裝的文件夾(因為對我來說,上一個命令失敗)并使用以下命令安裝了最新的文件夾:
sudo apt-get autoremove -f
這解決了我的問題。
就我而言,問題是SpamAssasin-Temp。 find varspoolMailScannerincomingSpamAssassin-Temp -mtime +1 -print | xargs rm -f完成了工作:)謝謝!
對我來說,這要花幾個小時。但是,有一個簡單的解決方案:當第二個命令掛在特定目錄上時,請終止當前命令,然后重新將/ *更改為掛在其上的任何目錄。我能夠深入分析罪魁禍首。
我使用了此命令的此變體以便在同一行上打印數字:for i in usrsrc*; do echo -en"$i\t"; find $i 2>devnull |wc -l; done
for i in src*; do echo"$i, `find $i |wc -l`"; done|sort -nrk 2|head -10展示前10大目錄
我有同樣的問題,通過刪除php的目錄會話來解決它
rm -rf /var/lib/php/sessions/
如果您使用的是較早的php版本,則可能在/var/lib/php5下。
使用以下權限重新創建
mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/
默認情況下,Debian上目錄的權限顯示為drwx-wx-wt(1733)
知道為什么會這樣嗎?
@Sibidharan在我的情況下,這是因為清除舊PHP會話的PHP cron工作無法正常工作。
rm -rf varlibphpsessions*可能是一個更好的命令-它不會刪除會話目錄,只刪除其目錄...那么您不必擔心重新創建它
我沒有php會話,但有magento會話問題,與此類似。感謝您的指導。
php會話不應通過cron作業清除,請在php.ini php.net/manual/zh/中設置session.gc_maxlifetime
您可以使用RSYNC刪除大量文件
rsync -a --delete blanktest/ test/
創建其中包含0個文件的blanktest文件夾,命令將使您的測試文件夾與大量文件同步(我已使用此方法刪除了近5M個文件)。
感謝http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
從文章/評論中可以看出,由于擴展了通配符并傳遞/處理了每個參數,對于許多文件來說,這比rm *更快,但是對于刪除包含很多文件的test文件夾,rm test很好文件。
垃圾郵件攻擊后,我們在HostGator帳戶(所有主機上都設置了inode限制)上經歷了這一情況。它在/root/.cpanel/comet中留下了大量隊列記錄。如果發生這種情況,并且發現沒有可用的inode,則可以通過shell運行以下cpanel實用程序:
/usr/local/cpanel/bin/purge_dead_comet_files
如前所述,如果有很多小文件,文件系統可能會用盡inode。我提供了一些方法來查找包含最多文件的目錄。
最近,我們遇到了類似的問題,如果某個進程引用了已刪除的文件,則不會釋放該Inode,因此您需要檢查lsof /,然后終止進程并重新啟動該進程將釋放這些inode。
如果這里不對,請糾正我。
eaccelerator可能會導致此問題,因為它將PHP編譯為塊...我在負載較重的站點上使用Amazon AWS服務器遇到了此問題。如果仍然存在問題,請通過刪除/ var / cache / eaccelerator中的eaccelerator緩存來釋放Inode。
rm -rf /var/cache/eaccelerator/*
(或任何您的緩存目錄)
到目前為止,對這個問題有許多答案,而以上所有內容似乎都是具體的。 我認為在使用過程中使用stat會很安全,但是取決于OS,您可能會遇到一些inode錯誤。 因此,使用64bit實現您自己的stat調用功能以避免任何溢出問題似乎是相當兼容的。
我們很喜歡這里的例子;)
如果使用docker,請刪除所有圖像。 他們使用了很多空間。
停止所有容器
docker stop $(docker ps -a -q)
刪除所有容器
docker rm $(docker ps -a -q)
刪除所有圖片
docker rmi $(docker images -q)
對我有用
這無助于檢測" inode過多"是否是問題所在。
這與Docker無關。
總結
以上是生活随笔為你收集整理的Linux节点释放,关于linux:如何释放Inode的使用量?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贴纸UI效果如何制作,4个做贴纸效果的小
- 下一篇: 基于java jsp的健身房会员卡管理系