Saya mencoba tidur. Meskipun bagus (dan memiliki beberapa fitur berbeda yang berguna yang mungkin menjadikannya pilihan terbaik bagi banyak orang), tampaknya memindai keseluruhan semua file target untuk checksum.
Yang sangat lambat.
Program lain di sisi lain, seperti rdfind dan rmlint, memindai secara berbeda.
rdfind memiliki fitur "eksperimental" untuk menggunakan btrfs reflink. (Dan opsi "solid" untuk hardlink, symlink, dll.)
rmlint memiliki opsi "solid" untuk klon btrf, reflink, hardlink biasa, symlink, delete, dan perintah khusus Anda sendiri.
Tetapi yang lebih penting, rdfind dan rmlint secara signifikan lebih cepat. Seperti dalam, urutan besarnya. Alih-alih memindai semua file target untuk checksum, ia melakukan ini, kira-kira:
- Pindai seluruh sistem file target, kumpulkan hanya jalur dan filesize.
- Hapus dari pertimbangan, file dengan ukuran file yang unik. Ini saja, menghemat waktu dan aktivitas disk. ("Scads" adalah beberapa fungsi eksponensial terbalik atau sesuatu.)
- Dari kandidat yang tersisa, pindai N byte pertama. Hapus dari pertimbangan, mereka dengan ukuran file yang sama tetapi berbeda N byte pertama.
- Lakukan hal yang sama untuk byte N terakhir.
- Hanya itu (biasanya sebagian kecil ) yang tersisa, pindai checksum.
Keuntungan lain dari rmlint yang saya ketahui:
- Anda dapat menentukan checksum. MD5 terlalu menakutkan? Coba sha256. Atau 512. Atau perbandingan bit-untuk-bit. Atau fungsi hashing Anda sendiri.
- Ini memberi Anda pilihan Btrfs "clone", dan "reflink", bukan hanya reflink. "cp --reflink = selalu" hanya sedikit berisiko, karena ini bukan atom, tidak mengetahui apa lagi yang terjadi pada file di kernel, dan tidak selalu mempertahankan metadata. "Clone", OTOH (yang merupakan istilah steno ... Saya kehabisan nama terkait API resmi), adalah panggilan tingkat kernel yang atomik dan mempertahankan metadata. Hampir selalu menghasilkan hal yang sama, tetapi sedikit lebih kuat dan aman. (Meskipun sebagian besar program cukup pintar untuk tidak menghapus file duplikat, jika tidak berhasil membuat reflink temp ke yang lain.)
- Ini memiliki banyak pilihan untuk banyak kasus penggunaan (yang juga merupakan kelemahan).
Saya membandingkan rmlint dengan deduperemove - yang juga secara buta memindai semua file target untuk checksum. Duperemove membutuhkan beberapa hari pada volume saya untuk menyelesaikan (4 saya pikir), menjadi miring penuh. fmlint membutuhkan beberapa jam untuk mengidentifikasi duplikat, kemudian kurang dari sehari untuk menyimpulkannya dengan klon Btrfs.
(Yang mengatakan, siapa pun yang berusaha untuk menulis dan mendukung perangkat lunak yang kuat dan berkualitas dan memberikannya secara gratis, pantas mendapat pujian utama!)
Btw: Anda harus menghindari pemotongan menggunakan hardlink biasa sebagai solusi pemotongan "umum", dengan segala cara.
Walaupun hardlink dapat sangat berguna dalam kasus penggunaan bertarget tertentu (misalnya file individual atau dengan alat yang dapat memindai jenis file tertentu yang melebihi beberapa ukuran minimum - atau sebagai bagian dari banyak solusi backup / snapshot gratis dan komersial), itu dapat menjadi bencana untuk "deduplikasi" pada sistem file yang umum digunakan. Alasannya adalah bahwa sebagian besar pengguna mungkin memiliki ribuan file di sistem file mereka, yang identik biner, tetapi secara fungsional sama sekali berbeda.
Sebagai contoh, banyak program menghasilkan template dan / atau file pengaturan tersembunyi (kadang-kadang di setiap folder yang dapat dilihatnya), yang awalnya identik - dan sebagian besar tetap demikian, sampai Anda, pengguna, tidak memerlukannya.
Sebagai ilustrasi khusus: File cache thumbnail foto, yang dihasilkan oleh banyak program dalam folder yang berisi foto-foto (dan karena alasan yang baik - mudah dibawa), dapat memakan waktu berjam-jam atau berhari-hari untuk menghasilkan tetapi kemudian membuat menggunakan aplikasi foto sangat mudah. Jika file-file cache awal semuanya di-hardlink bersama-sama, maka Anda kemudian membuka aplikasi pada direktori dan itu membangun cache besar ... lalu coba tebak: Sekarang SETIAP folder yang memiliki cache yang sebelumnya di-hardlink, sekarang memiliki cache yang salah. Berpotensi, dengan hasil bencana yang dapat mengakibatkan kerusakan data yang tidak disengaja. Dan juga berpotensi dengan cara yang meledak solusi cadangan yang tidak menyadari hardlink.
Selain itu, dapat merusak seluruh snapshot. Inti dari snapshot adalah agar versi "live" dapat terus berubah, dengan kemampuan untuk memutar kembali ke keadaan sebelumnya. Jika semuanya dihubungkan bersama ... Anda "memutar kembali" ke hal yang sama.
Namun kabar baiknya adalah bahwa deduping dengan Btrfs clone / reflink, dapat membatalkan kerusakan itu (saya pikir - karena selama pemindaian, itu akan melihat file yang di-link dengan identik ... kecuali ia memiliki logika untuk tidak mempertimbangkan hardlink. Mungkin tergantung pada utilitas spesifik yang melakukan deduping.)