Solusi saya:
Coba temukan apakah ini masalah inode dengan:
df -ih
Coba temukan folder root dengan jumlah inode yang besar:
for i in /*; do echo $i; find $i |wc -l; done
Coba temukan folder tertentu:
for i in /src/*; do echo $i; find $i |wc -l; done
Jika ini adalah header linux, coba hapus yang terlama dengan:
sudo apt-get autoremove linux-headers-3.13.0-24
Secara pribadi saya memindahkannya ke folder yang terpasang (karena bagi saya perintah terakhir gagal) dan menginstal yang terbaru dengan:
sudo apt-get autoremove -f
Ini menyelesaikan masalah saya.
Situasi saya adalah saya kehabisan inode dan saya telah menghapus semua yang saya bisa.
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
Saya menggunakan ubuntu 12.04LTS dan tidak dapat menghapus kernel linux lama yang memakan sekitar 400.000 inode karena apt rusak karena paket yang hilang. Dan saya tidak dapat menginstal paket baru karena saya kehabisan inode sehingga saya macet.
Saya akhirnya menghapus beberapa kernel linux lama dengan tangan untuk membebaskan sekitar 10.000 inode
$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*
Ini cukup untuk membiarkan saya menginstal paket yang hilang dan memperbaiki apt
saya$ sudo apt-get install linux-headers-3.2.0-76-generic-pae
dan kemudian hapus sisa kernel linux lama dengan apt
$ sudo apt-get autoremove
semuanya jauh lebih baik sekarang
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 434719 54% /
Sangat mudah bagi disk untuk menggunakan inode dalam jumlah besar meskipun disk tidak terlalu penuh.
Sebuah inode dialokasikan ke file jadi, jika Anda memiliki banyak sekali file, masing-masing berukuran 1 byte, Anda akan kehabisan inode jauh sebelum Anda kehabisan disk.
Mungkin juga menghapus file tidak akan mengurangi jumlah inode jika file tersebut memiliki banyak tautan keras. Seperti yang saya katakan, inode milik file, bukan entri direktori. Jika file memiliki dua entri direktori yang ditautkan dengannya, menghapus salah satunya tidak akan membebaskan inode.
Selain itu, Anda dapat menghapus entri direktori tetapi, jika proses yang berjalan masih membuka file, inode tidak akan dibebaskan.
Saran awal saya adalah menghapus semua file yang Anda bisa, lalu mem-boot ulang kotak untuk memastikan tidak ada proses yang dibiarkan menahan file tetap terbuka.
Jika Anda melakukannya dan masih mengalami masalah, beri tahu kami.
Omong-omong, jika Anda mencari direktori yang berisi banyak file, skrip ini dapat membantu:
#!/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_$$
Jika Anda sangat tidak beruntung, Anda telah menggunakan sekitar 100% dari semua inode dan tidak dapat membuat skrip. Anda dapat memeriksanya dengan df -ih
.
Maka perintah bash ini dapat membantu Anda:
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
Dan ya, ini akan memakan waktu, tetapi Anda dapat menemukan direktori dengan file terbanyak.