Versi pendek : rm -rf mydir
, dengan mydir
(rekursif) mengandung 2,5 juta file, membutuhkan waktu sekitar 12 jam pada mesin sebagian besar menganggur.
Informasi lebih lanjut : Sebagian besar file yang dihapus adalah tautan keras ke file di direktori lain (direktori yang dihapus sebenarnya adalah cadangan tertua yang dibuat oleh rsnapshot
; rm
perintah sebenarnya diberikan oleh rsnapshot
). Jadi sebagian besar entri direktori dihapus - konten file itu sendiri tidak banyak; itu dalam urutan puluhan GB.
Saya jauh dari yakin bahwa itu btrfs
adalah pelakunya. Saya ingat cadangan juga sangat lambat sebelum saya mulai menggunakan btrfs
, tetapi saya tidak yakin bahwa kelambatan dalam penghapusan.
Mesin tersebut adalah Intel Core i5 2.67 GHz dengan 4 GB RAM. Ini memiliki dua disk SATA: satu memiliki OS dan beberapa hal lainnya, dan disk cadangan adalah 1 TB WDC WD1002FAEX-00Z3A0
. Motherboard adalah Asus P7P55D.
Sunting : Mesin ini adalah debian wheezy dengan Linux 3.16.3-2~bpo70+1
. Beginilah cara sistem file di-mount:
root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Sunting : Menggunakan rsync -a --delete /some/empty/dir mydir
membutuhkan waktu sekitar 6 jam. Peningkatan yang signifikan berakhir rm -rf
, tapi saya pikir masih terlalu banyak. ( Penjelasan mengapa rsync
lebih cepat darirm
: "[M] sistem file pertama menyimpan struktur direktori mereka dalam format btree, urutan [di] yang Anda hapus file ... penting. Kita harus menghindari menyeimbangkan kembali btree ketika Anda melakukan unlink .... rsync -a --delete
... melakukan penghapusan secara berurutan ")
Sunting : Saya memasang disk lain yang memiliki 2,2 juta file (secara rekursif) dalam direktori, tetapi pada XFS. Berikut adalah beberapa hasil perbandingan:
On the XFS disk On the BTRFS disk
Cached reads[1] 10 GB/s 10 GB/s
Buffered reads[1] 80 MB/s 115 MB/s
Walk tree[2] 11 minutes 43 minutes
rm -rf mydir[3] 7 minutes 12 hours
[1] Dengan hdparm -T /dev/sdX
dan hdparm -t /dev/sdX
.
[2] Waktu yang diperlukan untuk berjalan find mydir -print|wc -l
segera setelah boot.
[3] Pada disk XFS, ini segera setelah berjalan dengan pohon find
. Pada disk BTRFS itu adalah pengukuran lama (dan saya tidak berpikir itu dengan cache pohon).
Tampaknya menjadi masalah dengan btrfs
.
btrfs
? Ini mungkin, tentu saja, tetapi apakah Anda pikir itu relevan? Saat ini saya tidak dapat mengingat mengapa saya memutuskan untuk mencobabtrfs
.btrfs
karena saya ingin kompresi transparan. Sekarang:rsnapshot
menggunakan tautan keras. Tidak ada opsi untuk tidak menggunakan tautan keras. Jadi tautan keras tumpang tindih denganbtrfs
fungsionalitas copy-on-write, tapi saya tidak bisa berbuat banyak tentang itu.Jawaban:
Yah ini masih merupakan masalah Btrfs, yang terkenal bahwa menghapus banyak file kecil memang memakan waktu yang cukup lama dibandingkan dengan sistem file lainnya.
Jika Anda tidak menyukainya, Anda dapat menunggu hingga upstream telah memperbaikinya atau beralih ke sistem file lain yang lebih baik.
Namun kesalahan utama Anda adalah menggunakan kernel kuno (3,16, ya itu sudah kuno ketika Anda memposting) dengan btrfs. Btrfs adalah sistem file yang masih dalam pengembangan, jadi Anda harus selalu tetap dengan versi kernel terbaru dan terhebat untuk menghubungi perbaikannya. Jika distribusi Anda tidak melakukan backports, Anda bisa melakukannya sendiri atau Anda kacau.
Btrfs mendapat banyak peningkatan kinerja dalam versi kernel 3.19 - ini adalah versi minimum yang harus Anda gunakan dalam produksi, versi kernel Anda 3.16 jelas-jelas menyebalkan tanpa backports.
Juga perlu diingat bahwa menurut Chris Mason dia menganggap Btrf stabil sekarang, tetapi belum siap produksi.
sumber
btrfs
. Terlalu hyped sementara perkembangannya sepertinya akan berlangsung selamanya.Saya agak terlambat ke pesta ini, tapi di sini ada trik untuk menghapus dengan cepat pohon btrf yang sangat besar:
Kernel akan memulai reklamasi ruang di latar belakang, sehingga Anda tidak akan memiliki ruang yang tersedia dengan segera, tetapi prosesnya seharusnya jauh lebih cepat daripada melakukan penghapusan pengguna-lahan apa pun.
sumber
Anda bisa mengganti nama direktori dan kemudian menghapus direktori yang diubah namanya dalam proses latar belakang. Ini tidak akan mempercepat operasi penghapusan. Namun, ini akan memungkinkan program untuk terus maju dengan direktori kosong saat operasi penghapusan sedang berlangsung di samping.
Saya tidak yakin apakah ini akan berfungsi dalam kasus penggunaan Anda. Itu tergantung jika program tidak dapat melanjutkan sampai disk idle (yaitu akan melakukan beberapa operasi disk yang berat). Itu tergantung apakah program akan mengisi disk dengan banyak data.
sumber