Kami menggunakan rsnapshot untuk cadangan. Itu menyimpan banyak snapshot dari file yang dicadangkan, tetapi itu menghapus yang lama. Ini bagus. Namun butuh sekitar 7 jam untuk melakukan rm -rf
pada pohon direktori besar. Sistem file adalah XFS. Saya tidak yakin berapa banyak file yang ada, tetapi mungkin jumlahnya jutaan.
Apakah ada cara untuk mempercepatnya? Apakah ada perintah yang sama rm -rf
dan tidak memakan waktu berjam-jam?
find . -delete -name directory
dan jauh lebih cepat daripadarm -rf
.Jawaban:
Tidak.
rm -rf
melakukan traversal depth-first rekursif dari sistem file Anda, memanggilunlink()
setiap file. Dua operasi yang menyebabkan proses berjalan lambat adalahopendir()
/readdir()
danunlink()
.opendir()
danreaddir()
tergantung pada jumlah file dalam direktori.unlink()
tergantung pada ukuran file yang dihapus. Satu-satunya cara untuk membuat ini berjalan lebih cepat adalah dengan mengurangi ukuran dan jumlah file (yang saya kira tidak mungkin) atau mengubah sistem file menjadi yang dengan karakteristik yang lebih baik untuk operasi tersebut. Saya percaya bahwa XFS baik untuk memutuskan tautan () pada file besar, tetapi tidak begitu baik untuk struktur direktori besar. Anda mungkin menemukan bahwa ext3 + dirindex atau reiserfs lebih cepat. Saya tidak yakin seberapa baik tarif JFS, tapi saya yakin ada banyak tolok ukur kinerja sistem file yang berbeda.Sunting: Tampaknya XFS sangat buruk dalam menghapus pohon , jadi pasti ubah sistem file Anda.
sumber
unlink
tidak melakukan apa-apa untuk konten yang sebenarnya tetapi untuk melakukanunlink
panggilan sistem, kode sistem file masih lebih banyak yang harus dilakukan jika tautan yang dihapus adalah yang terakhir ke file dan jika saat ini tidak terbuka. Ini tentu saja tergantung pada sistem file tetapi kemudian akan ada perbedaan yang sangat terlihat ketika file yang dihapus sangat besar.Sebagai alternatif, pindahkan direktori ke samping, buat ulang dengan nama, izin, dan kepemilikan yang sama dan mulai ulang aplikasi / layanan yang peduli dengan direktori itu.
Anda kemudian dapat "nice rm" direktori asli di latar belakang tanpa harus khawatir tentang pemadaman yang berkepanjangan.
sumber
Pastikan Anda memiliki opsi pemasangan yang tepat untuk XFS.
Menggunakan -ologbufs = 8, logbsize = 256k dengan XFS mungkin akan tiga kali lipat kinerja penghapusan Anda.
sumber
Jika Anda melakukan rm secara efektif di tingkat file maka itu akan memakan waktu lama. Inilah mengapa snapshot berbasis blok sangat bagus :).
Anda dapat mencoba membagi rm ke dalam area yang terpisah dan mencoba melakukannya secara paralel namun saya mungkin tidak mengharapkannya untuk melakukan perbaikan. XFS diketahui memiliki masalah menghapus file dan jika itu adalah sebagian besar dari apa yang Anda lakukan maka mungkin sistem file yang berbeda untuk itu akan menjadi ide.
sumber
Ada baiknya menggunakan ionice untuk operasi intensif IO seperti itu terlepas dari sistem file yang digunakan.
Saya menyarankan perintah ini:
Ini akan bermain dengan baik untuk operasi latar belakang di server dengan beban IO yang berat.
sumber
Saya tahu ini sudah tua, tetapi saya pikir saya harus memberikan saran. Anda menghapus file-file itu secara berurutan, menjalankan operasi paralel rm mungkin mempercepatnya.
http://savannah.nongnu.org/projects/parallel/ parallel biasanya dapat digunakan sebagai ganti xargs
jadi jika Anda menghapus semua file di deltedir
Itu akan meninggalkan Anda dengan hanya struktur direktori kosong untuk dihapus.
Catatan: Anda kemungkinan masih akan mencapai batasan sistem file seperti yang disebutkan di atas.
sumber
Apakah opsi alternatif di sini adalah memisahkan data sedemikian rupa sehingga Anda dapat membuang dan membangun kembali sistem file yang sebenarnya alih-alih melakukan rm?
sumber
Bagaimana dengan mengurangi kebaikan perintah? Seperti:
sumber