Saya melihat pertanyaan ini di atas stackoverflow, tetapi saya tidak menyukai jawaban apa pun, dan itu sebenarnya adalah pertanyaan yang seharusnya ada di sini di U&L.
Pada dasarnya inode digunakan untuk setiap file pada sistem file. Jadi kehabisan inode umumnya berarti Anda punya banyak file kecil yang bertebaran. Jadi pertanyaannya adalah, "direktori apa yang memiliki banyak file di dalamnya?"
Dalam hal ini, sistem file yang kita pedulikan adalah sistem file root /
, sehingga kita dapat menggunakan perintah berikut:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Ini akan membuang daftar setiap direktori pada sistem file yang diawali dengan jumlah file (dan subdirektori) di direktori tersebut. Dengan demikian direktori dengan jumlah file terbesar akan berada di bagian bawah.
Dalam kasus saya, ini akan muncul sebagai berikut:
1202 /usr/share/man/man1
2714 /usr/share/man/man3
2826 /var/lib/dpkg/info
306588 /var/spool/postfix/maildrop
Jadi pada dasarnya /var/spool/postfix/maildrop
adalah mengkonsumsi semua inode.
Perhatikan, jawaban ini memang memiliki tiga peringatan yang dapat saya pikirkan. Itu tidak benar menangani apa pun dengan baris baru di jalan. Saya tahu sistem file saya tidak memiliki file dengan baris baru, dan karena ini hanya digunakan untuk konsumsi manusia, masalah potensial tidak layak untuk diselesaikan (dan seseorang selalu dapat mengganti \n
dengan \0
dan menggunakan di sort -z
atas). Itu juga tidak menangani jika file tersebar di antara sejumlah besar direktori. Ini tidak mungkin, jadi saya menganggap risikonya dapat diterima. Ini juga akan menghitung tautan keras ke file yang sama (sehingga hanya menggunakan satu inode) beberapa kali. Sekali lagi, tidak mungkin memberikan positif palsu
Alasan utama saya tidak suka salah satu jawaban pada jawaban stackoverflow adalah mereka semua melewati batas filesystem. Karena masalah saya adalah pada sistem berkas root, ini berarti ia akan melintasi setiap sistem file yang dipasang. Melemparkan -xdev
perintah find bahkan tidak akan berfungsi dengan baik.
Misalnya, jawaban yang paling banyak dipilih adalah yang ini:
for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
Jika kita mengubahnya menjadi
for i in `find . -xdev -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
meskipun /mnt/foo
adalah mount, itu juga merupakan direktori pada sistem file root, jadi itu akan muncul find . -mount -type d
, dan kemudian akan diteruskan ke ls -a $i
, yang akan menyelam ke mount.
The find
in my answer gantinya daftar direktori setiap file tunggal di mount. Jadi pada dasarnya dengan struktur file seperti:
/foo/bar
/foo/baz
/pop/tart
kita berakhir dengan
/foo
/foo
/pop
Jadi kita hanya perlu menghitung jumlah baris duplikat.
/tmp
dan kemudian sistem dikonfigurasi untuk me-mount tmpfs/tmp
. Maka Anda tidak akan dapat menemukan file denganfind
sendirian. Senario yang tidak mungkin, tetapi patut dicatat.-printf
tampaknya merupakan ekstensi GNU untuk ditemukan, karena versi BSD yang tersedia di OS X tidak mendukungnya.Ini diposkan ulang dari sini atas permintaan penanya:
Dan jika Anda ingin tetap di sistem file yang sama Anda lakukan:
Berikut beberapa contoh output:
SEKARANG DENGAN LS:
Beberapa orang mengatakan mereka tidak memiliki coreutil terbaru dan opsi --inodes tidak tersedia untuk mereka. Jadi, ini dia:
Jika Anda penasaran, hati-dan-jiwa dari bagian yang membosankan
regex
itu menggantikanfilename
setiapls's
hasil pencarian rekursif dengan nama direktori tempat ditemukan. Dari sana itu hanya masalah memeras nomor inode berulang kemudian menghitung nama direktori berulang dan mengurutkannya.The
-U
pilihan adalah sangat membantu dengan menyortir dalam hal itu secara khusus tidak tidak memilah, dan bukan menyajikan daftar direktori dalam urutan asli - atau, dengan kata lain, denganinode
nomor.Dan tentu saja
-1
ini sangat membantu dalam memastikan hasil tunggal per baris, terlepas dari kemungkinan memasukkan baris baru dalam nama file atau masalah yang sangat disayangkan yang mungkin terjadi ketika Anda mencoba mengurai daftar.Dan tentu saja
-A
untuk semua dan-i
untuk inode dan-R
untuk rekursif dan itu panjang dan pendek.Metode yang mendasari ini adalah bahwa saya mengganti setiap nama file ls dengan nama direktori yang berisi sed. Sebagai lanjutan dari itu ... Yah, aku sendiri agak kabur. Saya cukup yakin itu secara akurat menghitung file, seperti yang Anda lihat di sini:
Ini memberikan saya hasil yang hampir sama dengan
du
perintah:DU:
LS:
Saya pikir
include
masalahnya tergantung pada direktori mana program terlihat pada awalnya - karena mereka file yang sama dan di-hardlink. Agak suka hal di atas. Saya bisa salah tentang itu - dan saya menerima koreksi ...DU DEMO
Buat direktori pengujian:
Beberapa direktori anak-anak:
Buat beberapa file:
Beberapa hardlink:
Lihatlah hardlinks:
Mereka dihitung sendiri, tetapi naik satu direktori ...
Kemudian saya menjalankan skrip saya dari bawah dan:
Dan Graeme:
Jadi saya pikir ini menunjukkan bahwa satu-satunya cara untuk menghitung inode adalah dengan inode. Dan karena menghitung file berarti menghitung inode, Anda tidak dapat menghitung dua kali inode - untuk menghitung file secara akurat inode tidak dapat dihitung lebih dari sekali.
sumber
--inodes
? yang "varian" / "rasa" / "posix-wannabes" / "implementasi" / apa pun yang memilikinya?Saya menggunakan jawaban ini dari SO T&J berjudul: Di mana semua inode saya digunakan? ketika NAS kami habis sekitar 2 tahun yang lalu:
Contoh
Memeriksa inode perangkat
Tergantung pada NAS Anda, itu mungkin tidak menawarkan
df
perintah berfitur lengkap . Jadi dalam kasus ini Anda dapat menggunakantune2fs
sebagai gantinya:Melintasi batas sistem file
Anda dapat menggunakan
-xdev
sakelar untuk mengarahkanfind
mempersempit pencariannya hanya ke perangkat tempat Anda memulai pencarian.Contoh
Katakanlah saya memiliki
/home
direktori saya yang diotomatisasi melalui saham NFS dari NAS saya, yang namanya mulder.Perhatikan bahwa titik pemasangan masih dianggap lokal ke sistem.
Sekarang ketika saya memulai
find
:Ia menemukan
/home
tetapi tidak ada konten yang diautomatiskan karena mereka berada di perangkat yang berbeda!Jenis sistem file
Anda dapat menggunakan switch to
find
,-fstype
untuk mengontrol tipe sistem file yangfind
akan ditinjau.Contoh
Sistem file apa yang saya miliki?
Jadi Anda bisa menggunakan ini untuk mengontrol persimpangan:
hanya ext3
hanya nfs
ext3 & ext4
sumber
/
penuh, dan Anda memiliki sistem file jaringan yang terpasang, Anda tidak ingin masuk ke sistem file jaringan.-fstype
untukfind
.-xtype
tidak termasuk sistem file, sepertinya melihat pada jenis file. Saya hanya menemukan contoh seperti ini:find . \( -fstype nfs -prune \)
find
melewati batas filesystem. Di mantannya. ia menyebutkan "Seperti jika ini penuh, dan Anda memiliki sistem berkas jaringan yang terpasang, Anda tidak ingin masuk ke sistem berkas jaringan".Perintah untuk menemukan inode yang digunakan:
sumber
Untuk membuat daftar penggunaan inode terperinci
/
, gunakan perintah berikut:sumber
Jawaban pasti dengan upvotes maksimum membantu memahami konsep inode di linux dan unix, tetapi itu tidak benar-benar membantu ketika datang untuk menangani masalah aktual menghapus atau menghapus inode dari disk. Cara yang lebih mudah untuk melakukan ini pada sistem berbasis ubuntu adalah menghapus header dan gambar kernel linux yang tidak diinginkan.
Akan melakukan itu untukmu. Dalam kasus saya, penggunaan inode adalah 78% karena saya menerima peringatan.
Setelah menjalankan
sudo apt-get autoremove
perintah itu turun menjadi 29%Ini hanya pengamatan saya yang menghemat waktu saya. Orang mungkin menemukan beberapa solusi yang lebih baik daripada ini.
sumber
Saya merasa lebih cepat dan lebih mudah untuk menelusuri menggunakan perintah berikut:
Anda kemudian dapat masuk ke
var
misalnya dan melihat apa inode besar menggunakan direktori di sana.sumber
Setiap jawaban sejauh ini mengasumsikan masalahnya adalah dengan banyak file dalam satu direktori, bukan banyak subdirektori yang berkontribusi terhadap masalah. Untungnya solusinya adalah dengan menggunakan lebih sedikit flag.
Atau dengan pilihan lebih pendek:
du --inodes -x | sort -n
. Sayangnya tidak semua versidu
memiliki opsi inode.sumber