
我使用的是 Ubuntu 14.04。一段時間以來,我無法同時運行更多程式。這df -h
給出了:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 25G 3.4G 88% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 16G 4.0K 16G 1% /dev
tmpfs 3.2G 724K 3.2G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 16G 59M 16G 1% /run/shm
none 100M 40K 100M 1% /run/user
/dev/sda2 438G 138M 416G 1% /scratch
AFS 8.6G 0 8.6G 0% /afs
和df -i
:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1875968 1875968 0 100% /
none 4106915 11 4106904 1% /sys/fs/cgroup
udev 4103190 499 4102691 1% /dev
tmpfs 4106915 524 4106391 1% /run
none 4106915 3 4106912 1% /run/lock
none 4106915 122 4106793 1% /run/shm
none 4106915 27 4106888 1% /run/user
/dev/sda2 29138944 709 29138235 1% /scratch
AFS 9000000 0 9000000 0% /afs
我也嘗試過這裡的建議:bash: echo: 寫入錯誤: 裝置上沒有剩餘空間,沒有幫助,實際上它會使情況變得更糟。現在,如果我進入終端並部分寫入資料夾的名稱,我按下Tab 並得到:
cd Pybash: cannot create temp file for here-document: No space left on device
我只想寫的地方
cd Python
編輯: 的輸出sudo du -hxd1 /
是:
1.5G /var
22G /usr
18M /etc
16K /lost+found
36K /home
349M /opt
68K /tmp
9.7M /bin
4.2M /libx32
12K /.config
2.5M /root
4.0K /mnt
4.0K /lib64
13M /sbin
81M /boot
505M /lib
3.5M /lib32
12K /media
4.0K /srv
25G /
答案1
空間不是這裡的問題。您的目錄中有很多空(或接近空)檔案。它們每個都需要一個 inode,並且您已經使用了它們。找到該目錄:
for i in /* ; do echo "$i" ; find "$i" | wc -l ; done
(您應該以 root 身分執行此操作)。這可能會列出一個包含大量文件的目錄。向下鑽取,直到找到耗盡索引節點的檔案。刪除所有這些檔案。那你暫時沒事了。當然,這些文件的來源是另一個故事。
答案2
從 中可以看出df -h
,根分區上仍有剩餘空間。但是,df -i
顯示您已用完索引節點。在我的電腦上,我的根分區使用了 7.3G,但只使用了 320,000 個索引節點,因此您可能有很多非常小的檔案堵塞了某個地方。
有關何處的討論,請參見,例如Stack Exchange - 尋找索引節點的使用位置。我會從該頁面嘗試以下操作:
sudo find / -xdev -printf '%h\0' | sort -z | uniq -cz | sort -nrzk 1 | tr '\0' '\n' | head -n 50
如果您使用的是更新版本的 Ubuntu(例如 15.10),那麼這個較短的命令也可能會更快:
sudo du / --inodes -xS | sort -rh | head -n 50
兩者都會為您提供一個目錄列表,按它們使用的索引節點數量排序。您可能會發現一個數字非常高(可能在/var
某個地方)。這應該讓您了解可以刪除哪些文件,但如果您有任何疑問,請先回到此處詢問。
作為可能正常情況的參考,在我的計算機(運行 Ubuntu 15.10)上,我從該命令得到以下輸出:
3297 /usr/share/app-install/desktop
3022 /usr/share/man/man3
2325 /usr/bin
2149 /usr/share/man/man1
2104 /usr/share/app-install/icons
1816 /usr/lib/x86_64-linux-gnu
1089 /usr/src/linux-headers-4.2.0-19/include/linux
1089 /usr/src/linux-headers-4.2.0-18/include/linux
1089 /usr/src/linux-headers-4.2.0-16/include/linux
...
這是對更簡單命令的解釋。 sudo
需要以 root 身分執行 du 命令,因此我們可以在普通用戶可能無法讀取的資料夾中找到檔案。 du /
給出根目錄的磁碟使用情況/
; --inodes
告訴它列出 inode 使用情況,-S
僅列出目錄本身中的文件而不是子目錄中的文件,並且-x
不要跨越文件系統邊界(因為您的問題肯定是 on/
和 not on,例如,/scratch
)。然後我們透過管道輸出該命令來sort
尋找最嚴重的違規者;-r
反轉排序,使最大的位於頂部,並按-h
數字而不是按字母順序排序。最後,head -n 50
僅輸出前 50 行(即最嚴重的 50 條違規者)。
這是更複雜命令的解釋。 sudo
需要以 root 身分執行 find 命令,這樣我們就可以在普通使用者可能無法讀取的資料夾中尋找檔案。 find /
給出根目錄上所有檔案的列表/
;-xdev
告訴find
不要跨越檔案系統邊界(因為你的問題肯定是 on/
和 not on,例如/scratch
);-printf '%h\0'
列印以零位元組結尾的目錄名稱。然後我們將該命令的輸出透過管道傳輸到sort -z
,然後uniq -cz
計算每個目錄被列印的次數(即每個目錄中有多少個檔案);sort
這裡需要,因為uniq
需要一個排序列表。然後我們找出最嚴重的違規者;-r
反轉排序,使最大的位於頂部,並按-n
數字而不是按字母順序排序。 tr '\0' '\n'
用新行取代零位元組。最後,head -n 50
僅輸出前 50 行(即最嚴重的 50 條違規者)。