Saya memiliki filesystem ext3 yang terpasang dengan opsi default. Di atasnya saya punya beberapa file ~ 100GB.
Penghapusan file semacam itu membutuhkan waktu lama (8 menit) dan menyebabkan banyak lalu lintas io, yang meningkatkan beban di server.
Apakah ada cara untuk membuat perusahaan tidak mengganggu?
Jawaban:
Jawaban yang paling menarik pada awalnya dimakamkan di komentar pada pertanyaan. Ini dia sebagai jawaban kelas satu untuk membuatnya lebih terlihat:
Tautan itu adalah analisis yang sangat menyeluruh untuk eksplorasi dan penemuan solusi yang bisa diterapkan.
Perhatikan juga:
Artikel itu mengatakan:
yang benar, tetapi TafT pengguna mengatakan jika Anda ingin tidak ada gangguan maka
-c3
'idle' akan menjadi pilihan yang lebih baik daripada-c2
'upaya terbaik'. Dia telah terbiasa-c3
membangun di latar belakang dan menemukannya bekerja dengan baik tanpa menyebabkan bangunan menunggu selamanya. Jika Anda benar-benar memiliki 100% penggunaan io maka-c3
tidak akan membiarkan penghapusannya selesai tetapi dia tidak berharap itu adalah apa yang Anda miliki berdasarkan tes yang dikerjakan.sumber
Tingkatkan ke ext4 atau sistem file modern lain yang menggunakan luasan. Karena ext3 menggunakan skema blok tidak langsung daripada ekstensi, menghapus file-file besar pasti membutuhkan banyak pekerjaan.
sumber
Anda dapat mencoba ionice . Itu tidak akan membuatnya lebih cepat tetapi mungkin membuatnya kurang mengganggu.
sumber
Dalam hal efisiensi, menggunakan satu rm per file tidak optimal, karena memerlukan garpu dan eksekutif untuk setiap rm.
Dengan asumsi Anda memiliki list.txt yang berisi file yang ingin Anda hapus ini akan lebih efisien tetapi masih akan lambat:
Pendekatan lain adalah:
nice -20 xargs -i rm {} < list.txt
(ini akan memakan waktu lebih sedikit tetapi akan sangat mempengaruhi sistem Anda :)
atau
Saya tidak tahu seberapa cepat ini tetapi:
atau
Buat titik pemasangan khusus dengan sistem file cepat (menggunakan perangkat loop?), Gunakan itu untuk menyimpan dan menghapus file besar Anda.
(mungkin memindahkan file di sana sebelum Anda menghapusnya, mungkin lebih cepat atau mungkin hanya melepasnya ketika Anda ingin file hilang)
atau
cat /dev/null > /file/to/be/deleted
(Jadi ukurannya nol sekarang) dan jika Anda ingin menghilang begitu sajarm -rf <file>
sekarangatau bahkan lebih baik
jatuhkan kucing dan lakukan saja
# > /file/to/be/emptied
sumber
Saya mengalami masalah dalam mendapatkan direktori untuk dihapus pada kecepatan yang masuk akal, ternyata proses itu mengunci disk dan membuat tumpukan proses mencoba mengakses disk. ionice tidak berfungsi, hanya terus menggunakan 99% dari IO disk dan mengunci semua proses lainnya.
Inilah kode Python yang bekerja untuk saya. Menghapus 500 file sekaligus, kemudian mengambil jeda 2 detik untuk membiarkan proses lain melakukan pekerjaan mereka, lalu melanjutkan. Bagus sekali.
sumber
Dua sen saya.
Saya sudah mendapatkan masalah ini. "Dalam skrip berurutan yang harus berjalan cepat, prosesnya menghapus banyak file" .. Jadi "rm" akan membuat kecepatan skrip itu dekat dengan waktu tunggu / eksekutif IO.
Jadi untuk membuat segalanya lebih cepat, saya telah menambahkan proses lain (skrip bash) diluncurkan per cron .. seperti pengumpul sampah, ini menghapus semua file dalam direktori tertentu.
Lalu saya telah memperbarui skrip asli dengan mengganti "rm" dengan mv ke "folder sampah" (ganti nama file dengan menambahkan penghitung di akhir namanya untuk menghindari tabrakan).
Ini berfungsi untuk saya, skrip berjalan setidaknya 3 kali lebih cepat. tetapi hanya berfungsi baik jika folder sampah dan file asli berada di bawah titik pemasangan yang sama (perangkat yang sama) untuk menghindari penyalinan file. (mv pada perangkat yang sama mengkonsumsi lebih sedikit IO daripada rm)
Semoga itu bisa membantu ..
sumber
Perhatikan juga bahwa jawaban oleh Dennis Williamson, yang menyarankan ionice sebagai solusi untuk beban, hanya akan berfungsi jika perangkat blok Anda menggunakan penjadwal io CFQ.
sumber
Anda dapat mencoba membuat sistem file loop untuk menyimpan cadangan Anda.
Lalu, saat Anda ingin menghapus cadangan:
Presto! Seluruh sistem file virtual dihapus dalam beberapa saat.
sumber
Anda dapat menggunakan multitheading xargs whith
di mana 30 adalah jumlah utas yang ingin Anda buat. Jika Anda menggunakan nol, sistem akan membuat utas maksimum yang tersedia bagi pengguna yang menjalankan tugas.
sumber
find
memiliki-delete
opsi yang merupakan alternatif yang jauh lebih baik./ dev / null adalah file bukan direktori. Tidak dapat memindahkan file, ke file, atau Anda berisiko menimpanya.
Saya rasa ini tidak praktis. Itu akan menggunakan I / O lebih banyak daripada yang diinginkan OP.
sumber
Sebenarnya itu adalah perangkat dan semua data yang ditulis untuk itu akan dibuang begitu
mv <file> /dev/null
masuk akalsumber