Apakah ada cara untuk mengecilkan entri direktori?
Direktori maildir dovecot saya telah meningkat dalam ukuran dari 4096 default menjadi beberapa MB, dan itu mengacaukan kuota disk.
Satu-satunya cara yang saya temukan, adalah menghapus dan membuat ulang direktori. Saya berharap ada fungsi magis di suatu tempat - saya terbuka untuk apa pun, kecuali untuk assembler berkode tangan.
Sunting: Untuk anak cucu, untuk menemukan direktori> 4096:
find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
Jawaban:
Lihat juga rm di direktori dengan jutaan file ; terkait secara tangensial, tetapi kami membahasnya di sana.
Sejauh yang saya ketahui, setidaknya pada ext2 / 3, tidak, tidak ada (online) cara untuk mengecilkan mereka sebelum menghapus + membuat ulang. Tidak terpasang, beberapa sumber menyarankan
e2fsck -D
mungkin berfungsi, meskipun saya dapat mengklaim tidak ada pengalaman pribadi dengan opsi itu.Beberapa referensi untuk bacaan lebih lanjut:
sumber
Saya baru-baru ini harus menghapus dan membuat ulang direktori NFS untuk mengecilkan ukurannya setelah sebelumnya membengkak. Dalam prosesnya, saya menemukan cara yang cukup efisien untuk melakukan ini menggunakan rsync dan tautan keras. Metode ini menghindari menyalin file yang sebenarnya, sambil tetap mencapai tujuan menciptakan direktori dengan konten yang sama.
Karena kami perlu mengambil downtime untuk melakukan operasi ini selama jendela pemeliharaan kami, membuat direktori yang dibangun kembali sesegera mungkin penting bagi kami. Jika kesederhanaan lebih penting bagi Anda, ubah perintah pindah pertama ke 'rm -rf' di direktori sumber, dan lewati perintah 'rm -rf' lainnya.
Saya mengekstrak perintah-perintah ini dari proses yang lebih besar, dan mengabstraksi nama direktori, jadi minta maaf jika saya membuat kesalahan dalam terjemahan itu.
Lalu nanti, kita hapus direktori. Tergantung pada ukuran, Anda mungkin perlu menggunakan teknik yang lebih canggih untuk melakukan ini. Misalnya, menggunakan rsync dengan flag --delete untuk menyinkronkan direktori kosong ke direktori ini mungkin lebih efisien.
sumber
Saya akan melakukannya seperti ini.
cp -al
oldirnewdir
&& mv
olddirtempname
&& mv
newdirolddir
&& rm -r
tempnamedi mana olddir adalah direktori yang Anda inginkan untuk mengecilkan newdir dan tempname adalah nama file sementara
cp -al
membuat tautan ke konten olddir di newdir dan tiga perintah berikutnya menukar mereka dengan newdir dan membersihkan.sumber