Saya telah mencoba menggunakan rsnapshot untuk membuat cadangan, tetapi saya merasa itu tidak dapat digunakan. Meskipun ia dapat melakukan diff direktori (50gb) dan menduplikatnya (menghubungkan setiap file) dalam beberapa menit, dan saya dapat cp seluruh direktori dalam waktu sekitar setengah jam, dibutuhkan lebih dari satu jam untuk menghapusnya. Bahkan secara langsung menggunakan rm -rfv
, saya menemukan itu bisa memakan waktu hingga setengah detik untuk rm file tunggal, sedangkan cp
dan link
perintah selesai secara instan.
Mengapa rm begitu lambat? Apakah ada cara yang lebih cepat untuk menghapus hardlink secara rekursif? Tidak masuk akal bagi saya bahwa menyalin file seharusnya lebih cepat daripada menghapusnya.
Filesystem yang sedang saya kerjakan adalah drive penyimpanan eksternal, terhubung melalui usb dan ketik fuseblk (yang menurut saya artinya adalah ntfs). Komputer saya menjalankan linux ubuntu.
Output dari atas:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
sumber
fuseblk
bukan berarti drive tersebut adalah NTFS, itu hanya berarti ia dipasang sebagai perangkat blok FUSE. Itu bisa hampir apa saja.Jawaban:
Pada akhirnya, apa pun yang Anda lakukan,
rm
harus dijalankanunlink
pada setiap file yang ingin Anda hapus (bahkan jika Anda memanggilrm -r
direktori induk). Jika ada banyak file untuk dihapus, ini bisa memakan waktu lama.Ada dua proses yang sangat memakan waktu ketika Anda menjalankan
rm -r
:readdir
, diikuti oleh,unlink
.Menemukan semua file, dan kemudian melalui setiap file untuk menghapusnya, dapat memakan waktu yang sangat, sangat lama.
Jika Anda menemukan ini "tidak dapat digunakan" karena membuat direktori tidak dapat digunakan untuk beberapa waktu, pertimbangkan untuk memindahkan direktori induk sebelum menghapusnya. Ini akan membebaskan nama itu agar program dapat digunakan kembali, tanpa waktu yang terlalu merepotkan.
Dengan asumsi bahwa sistem file benar - benar NTFS (tidak jelas dari pertanyaan Anda), NTFS umumnya cukup lambat dalam menghapus petak besar file. Anda mungkin mempertimbangkan untuk menggunakan filesystem yang lebih cocok untuk keperluan Anda (filesystem ext yang lebih baru memiliki kinerja penghapusan yang cukup bagus, jika Anda tidak memiliki kebutuhan khusus lainnya). FUSE itu sendiri juga tidak terlalu cepat, secara umum. Anda mungkin mempertimbangkan untuk melihat apakah Anda dapat melakukan ini dengan cara yang tidak menggunakan FUSE.
sumber
Mengapa rm begitu lambat? Saya tidak punya ide. Tapi saya tahu cara yang lebih cepat:
Pembaruan: Jawaban pada Serverfault ini memiliki beberapa penjelasan. Sepertinya rsync menghapus file dalam urutan tertentu yang menyebabkan pohon sistem file tetap seimbang, dan tidak pernah perlu penyeimbangan ulang. rm hanya akan menghapus file dan menyebabkan banyak penyeimbangan kembali saat dihapus. Ada beberapa informasi tentang penyeimbangan ulang di sini .
sumber
rm -rf
?rsync
masih memilikiunlink()
semua file ditest/
, dan mungkin itulah yang membutuhkan waktu.unlink(2)
di direktori (dan ingat untuk melakukannyafsck
nanti) ...Yah, saya pernah punya masalah yang sama dengan Anda. Saya menemukan bahwa "wa" Anda tinggi, bisa Anda gunakan
untuk memeriksa apakah utilisasi disk Anda tinggi, jika demikian, itu berarti disk Anda cukup sibuk. Periksa apakah ada proses lain yang menulis ke disk terus menerus.
Untuk kemudahan, gunakan
untuk memeriksa apakah b tinggi atau r < b . Itu menunjukkan sesuatu yang salah. Dalam situasi Anda, saya pikir disk io adalah alasan asli.
sumber