40 TB'lık veri nasıl tekilleştirilir?


17

Üç dosya sisteminde ~ 40 TB veri içeren bir araştırma kümesi miras aldım. Veriler neredeyse 15 yıl öncesine uzanıyor ve araştırmacılar birbirlerini farklı nedenlerle kopyalayıp daha sonra kopyalara asıldığından büyük olasılıkla iyi miktarda kopya var.

Ben fdupes ve rmlint gibi de-duping araçları biliyorum. Böyle büyük bir veri kümesi üzerinde çalışacak bir tane bulmaya çalışıyorum. Tüm verileri taramak haftalar (hatta belki aylar) alır mı umurumda değil - muhtemelen dosya sistemlerinde kolay gitmek için yine de kısaltacağım. Ancak RAM ile bir şekilde süper verimli bir araç bulmam gerekiyor veya ihtiyaç duyduğu tüm aracı verileri RAM yerine dosyalarda saklayabiliyorum. Tüm bu verilerden bir set olarak tararsam RAM'imin (64GB) tükendiğini varsayıyorum.

Şu anda 900 GB'lık bir ağaçta fdupes deniyorum. Yolun% 25'i ve RAM kullanımı yavaş yavaş sürünüyor, şimdi 700MB'da.

Veya, disk eşlemeli RAM'i kullanmak için bir işlemi yönlendirmenin bir yolu var mı, bu yüzden daha fazla kullanılabilir ve sistem RAM'i kullanmıyor mu?

CentOS 6 kullanıyorum.


İlgili olması durumunda dosya sistemleri XFS'dir. Yani, XFS gibi de-duping yeteneklerine sahip bir fs olmadığını biliyorum.
Michael Stauffer

neden RAM konusunda endişeleniyorsun? İşletim sisteminin kendi bellek yönetimi algoritmaları vardır ve RAM kullanımının "sürünme" olması, sonunda tüm RAM'inizi yiyeceği anlamına gelmez. Bunun olmayacağından eminim.
Art Gertner

1
Özel araçların nasıl çalıştığını bilmiyorum, ancak her dosya için karma hesaplayabilir ve dosya yolu ile birlikte günlüğe kaydedebilir, sonra karma ve tekilleştirmeye göre sıralayabilirsiniz. Basit bir Python betiği ile veya belki de Bash'te yapılabilir. RAM kullanımı, sıralama adımı dışında en az düzeyde olmalıdır, ancak sanırım makul düzeyde düşük tutmak için bir çeşit modifiye edilmiş birleştirme birleşimi kullanabilirsiniz.
gronostaj

1
Evet, adanmış araç karmayı hesaplar, ancak önce dosya boyutuna bakmak ve karmayı hesaplamak için gereken tam karma miktarını sınırlamak için yalnızca dosyaların başlangıcı gibi şeyler yapın.
Michael Stauffer

RAM'e gelince, dosya sunucusunu yavaşlatmaktan endişeliydim - aşağıdaki cevaba aşağıdaki yorumuma bakın.
Michael Stauffer

Yanıtlar:


4

Veya, disk eşlemeli RAM'i kullanmak için bir işlemi yönlendirmenin bir yolu var mı, bu yüzden daha fazla kullanılabilir ve sistem RAM'i kullanmıyor mu?

Evet, takas sürücüsü denir. Muhtemelen zaten bir tane var. RAM'iniz bittiğinde endişeleniyorsanız, bu artışı artırmak için iyi bir yerdir. Otomatik olarak çalışır, bu yüzden özel bir şey yapmaya gerek yoktur.

Ben fdupes için endişe olmaz. Deneyin, sorunsuz çalışmalıdır.


Takasa güvenmenin tüm sistemi yavaşlatacağını düşünüyordum - bu meşgul bir dosya sunucusu. Ama endişelenmek için yeterli değil mi? Her durumda, sistemin güvenli bir şekilde ram'dan fazlasını kullanmasını önlemek için ulimit kullanabilirim, sanırım, bir arıza güvenliği olarak. Ama krowe ve smc, fdupes'in bu kadar koç kullanacağını düşünmüyor gibi görünüyor, bu yüzden sadece denemeliyim.
Michael Stauffer

1

hashkey'e dayalı kopyalar bulmak iyi çalışır ve çok hızlıdır.

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

0

Ağaçlara yürümek için hızlı bir uygulama yazın, ya (hash, mtime) => dosyayolunu bir sözlüğe bastırın ya da giriş zaten varsa silinmek üzere dosyayı işaretleyin. Karma yalnızca ilk N bayt üzerinden hesaplanan bir MD5 olacaktır. Küçük bir N üzerinde bir karma ve daha sonra büyük bir N üzerinde bir karma ile birkaç farklı geçiş yapabilirsiniz.

Bunu muhtemelen yirmi veya otuz satırdan daha az Python'da yapabilirsiniz (os.walk () kullanarak).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.