Bagaimana cara deduplikasi data 40TB?

17

Saya telah mewarisi sekelompok riset dengan ~ 40TB data di tiga sistem file. Data ini terbentang hampir 15 tahun, dan ada kemungkinan besar jumlah duplikat yang baik karena para peneliti menyalin data satu sama lain untuk alasan yang berbeda dan kemudian hanya bertahan pada salinan.

Saya tahu tentang alat de-duping seperti fdupes dan rmlint. Saya mencoba untuk menemukan satu yang akan bekerja pada set data yang besar. Saya tidak peduli apakah perlu berminggu-minggu (atau bahkan mungkin berbulan-bulan) untuk merayapi semua data - saya mungkin akan mempercepatnya untuk mempermudah sistem file. Tapi saya perlu menemukan alat yang entah bagaimana super efisien dengan RAM, atau dapat menyimpan semua data perantara yang dibutuhkan dalam file daripada RAM. Saya berasumsi bahwa RAM saya (64GB) akan habis jika saya merayapi semua data ini sebagai satu set.

Saya sedang bereksperimen dengan fdupes sekarang di pohon 900GB. Ini 25% dari keseluruhan dan penggunaan RAM telah perlahan-lahan merayap sepanjang waktu, sekarang di 700MB.

Atau, apakah ada cara untuk mengarahkan proses menggunakan RAM yang dipetakan disk sehingga ada lebih banyak tersedia dan tidak menggunakan sistem RAM?

Saya menjalankan CentOS 6.

Michael Stauffer
sumber
Sistem file adalah XFS, jika itu relevan. Yaitu, saya tahu ini bukan fs dengan kemampuan de-duping seperti XFS.
Michael Stauffer
mengapa Anda khawatir tentang RAM sejak awal? OS memiliki algoritma manajemen memori sendiri dan fakta bahwa penggunaan RAM "merayap" tidak berarti pada akhirnya akan memakan semua RAM Anda. Saya cukup yakin itu tidak akan terjadi.
Seni Gertner
1
Saya tidak tahu bagaimana alat khusus bekerja, tetapi Anda bisa menghitung hash untuk setiap file dan mencatatnya bersama jalur file, lalu urutkan berdasarkan hash dan deduplicate. Seharusnya bisa dilakukan dengan skrip Python sederhana atau mungkin bahkan di Bash. Penggunaan RAM harus minimal kecuali untuk langkah penyortiran, tapi saya kira Anda bisa menggunakan semacam mergesort yang dimodifikasi untuk menjaganya tetap rendah.
gronostaj
1
Ya, alat khusus menghitung hash, tetapi pertama-tama lakukan hal-hal seperti melihat ukuran file, dan hash hanya permulaan file untuk membatasi jumlah hash penuh yang perlu dihitung.
Michael Stauffer
Adapun RAM, saya khawatir tentang memperlambat fileserver - lihat komentar saya di bawah ini untuk Jawaban.
Michael Stauffer

Jawaban:

4

Atau, apakah ada cara untuk mengarahkan proses menggunakan RAM yang dipetakan disk sehingga ada lebih banyak tersedia dan tidak menggunakan sistem RAM?

Ya, ini disebut drive swap. Anda mungkin sudah memilikinya. Jika Anda khawatir kehabisan RAM maka meningkatkan ini adalah tempat yang baik untuk memulai. Ini bekerja secara otomatis, jadi tidak perlu melakukan sesuatu yang istimewa.

Saya tidak akan khawatir tentang fdupes. Cobalah, itu harus bekerja tanpa masalah.

Krowe
sumber
Saya berpikir bahwa mengandalkan swap akan memperlambat keseluruhan sistem - ini adalah server file yang sibuk. Tapi mungkin tidak cukup untuk dikhawatirkan? Saya bisa menggunakan ulimit untuk mencegah proses menggunakan lebih dari ram sistem dalam hal apapun, saya kira, sebagai failafe. Tapi sepertinya krowe dan smc tidak berpikir fdupes akan menggunakan ram sebanyak itu, jadi aku harus mencobanya.
Michael Stauffer
1

menemukan duplikat berdasarkan hashkey bekerja dengan baik dan sangat cepat.

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
kumar
sumber
0

Tulis aplikasi cepat untuk berjalan di pohon, baik mendorong (hash, mtime) => filepath ke kamus atau menandai file untuk dihapus jika entri sudah ada. Hash hanya akan menjadi MD5 yang dihitung selama byte N pertama. Anda dapat melakukan beberapa lintasan berbeda, dengan hash di atas N kecil dan kemudian yang lain dengan hash di atas N. besar

Anda mungkin bisa melakukan ini dalam kurang dari dua atau tiga puluh baris Python (menggunakan os.walk ()).

Dustin Oprea
sumber