Jadi seorang klien saya mendapat email dari Linode hari ini mengatakan server mereka menyebabkan layanan cadangan Linode meledak. Mengapa? Terlalu banyak file. Saya tertawa dan kemudian berlari:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Sampah. 2,4 juta inode digunakan. Apa yang terjadi ?!
Saya telah mencari tersangka yang jelas ( /var/{log,cache}
dan direktori tempat semua situs di-host) tetapi saya tidak menemukan sesuatu yang benar-benar mencurigakan. Di suatu tempat di binatang ini saya yakin ada direktori yang berisi beberapa juta file.
Untuk konteks pertama, server saya yang sibuk menggunakan inode 200k dan desktop saya (instalasi lama dengan lebih dari 4TB penyimpanan yang digunakan) hanya lebih dari satu juta. Ada masalah.
Jadi pertanyaan saya adalah, bagaimana saya menemukan di mana masalahnya? Apakah ada du
inode?
sumber
Jawaban:
Periksa
/lost+found
kalau-kalau ada masalah disk dan banyak sampah akhirnya terdeteksi sebagai file terpisah, mungkin salah.Periksa
iostat
untuk melihat apakah beberapa aplikasi masih menghasilkan file seperti orang gila.find / -xdev -type d -size +100k
akan memberi tahu Anda jika ada direktori yang menggunakan lebih dari 100kB ruang disk. Itu akan menjadi direktori yang berisi banyak file, atau berisi banyak file di masa lalu. Anda mungkin ingin menyesuaikan angka ukuran.Saya tidak berpikir ada kombinasi opsi untuk GNU
du
untuk membuatnya menghitung 1 per entri direktori. Anda dapat melakukan ini dengan membuat daftar file denganfind
dan melakukan sedikit penghitungan dalam awk. Ini adalahdu
untuk inode. Diuji minimal, tidak mencoba mengatasi nama file yang berisi baris baru.Penggunaan:
du-inodes /
. Mencetak daftar direktori yang tidak kosong dengan jumlah total entri di dalamnya dan subdirektori secara rekursif. Arahkan output ke file dan tinjau sesuka Anda.sort -k1nr <root.du-inodes | head
akan memberi tahu Anda pelanggar terbesar.sumber
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Anda dapat memeriksa dengan skrip ini:
Ini mencetak 10 subdirektori teratas berdasarkan jumlah file. Jika Anda ingin x atas, ubah
head
denganhead -n x
, di manax
bilangan alami lebih besar dari 0.Untuk 100% hasil pasti, jalankan skrip ini dengan hak akses root:
sumber
10: read: Illegal option -d
... menggosok-d
bendera dariread
berharap tidak ada hal buruk yang akan terjadi. Akan membiarkan Anda tahu kapan selesai menjalankan ...Seringkali lebih cepat daripada menemukan, jika basis data lokasi Anda mutakhir:
Ini akan membuang seluruh basis data lokasi, menghapus semua yang melewati tanda '/' terakhir di path, lalu sortir dan "uniq -c" memberi Anda jumlah file / direktori per direktori. "sort -n" disalurkan untuk memberi Anda sepuluh direktori dengan banyak hal di dalamnya.
sumber
find /path/to/parent -xdev > filelist
pertama, lalu arahkan untuk membaca input dari daftar itu.Saran lain:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Gunakan pencarian ini untuk menemukan file terbesar di server Anda.
Temukan file lebih dari 1GB
Temukan file lebih dari 100MB
Temukan file lebih dari 10MB
Bagian pertama adalah perintah find menggunakan flag "-size" untuk menemukan file dengan ukuran berbeda yang diukur dalam kilobyte.
Bit terakhir di akhir dimulai dengan "-exec" memungkinkan untuk menentukan perintah yang ingin kita jalankan pada setiap file yang kita temukan. Di sini perintah "ls -lh" untuk memasukkan semua informasi yang dilihat saat mendaftar isi direktori. Jam menjelang akhir sangat membantu karena mencetak ukuran setiap file dalam format yang dapat dibaca manusia.
sumber
Ini bekerja untuk saya ketika yang lain gagal di Android melalui shell:
sumber
Saya suka menggunakan sesuatu seperti
du --inodes -d 1
untuk menemukan direktori yang baik secara rekursif atau langsung berisi banyak file.Saya juga menyukai jawaban ini: https://unix.stackexchange.com/a/123052
sumber