Ham blok cihazların karşılaştırılması


12

İki blok cihazı karşılaştırmamı sağlayan bir yardımcı program (veya bir kabuk büyüsü) var mı?

Ayrıntılar: dd kullanarak biraz daha büyük bir SATA cihazına yedeklediğim bir büyük (0,5 TB) RAID cihazım var. Aygıtın üzerinde birkaç bölüm var, ancak bölümlenmiş aygıt düğümlerinden değil, 'üst' aygıttan kopyalıyorum (örneğin, / dev / hda kopyalayıp örneğin / dev / hda1 değil).

Yedeklemenin iyi / doğru olduğunu doğrulamak istiyorum.

Her cihazda md5sum çalıştırmayı düşündüm, ancak ikinci cihaz birinciden biraz daha büyük olduğu için bana doğru bir sonuç vermeyecek ve bu nedenle ekstra baytlar hash'i değiştirecek.

Yanıtlar:


13

Komutu kullanırdım

cmp /dev/hda /dev/hdb

ilk farklı baytta duracak, ofsetini yazacak veya daha kısa olanda EOF üzerinde duracaktır.


Bu sayfada EOF'da durmakla ilgili bir şey görmüyorum, bu bir yerde belgelenmiş mi?
Kevin

Aslında, çıkış durumu şöyle der: "1: Dosyalar farklı; bu, bir dosyanın diğerinin ilk kısmı ile aynı olduğu durumu içerir." Bu, eğer daha kısa ise onları özdeş olarak bildirmediği anlamına gelir.
Kevin

@Kevin: from info cmp: "'cmp' komutu iki dosyayı karşılaştırır ve farklıysa ilk bayt ve satır numaralarını farklı olduklarını söyler."
enzotib

1
Değeri, küçük olmayan sürücünün sonunda (veya bölüm sınırında) sıfır dışında durumla çıkmadan durdurmak --bytes=LIMITiçin LIMITdeğeri daha küçük aygıtın bayt boyutuna ayarlayarak kullanabilirsiniz cmp.
rozcietrzewiacz

/ dev / sda'nın bir / dev / loop0 kopyası varsa ve / dev / loop0 için değişiklikler yaparsam, / dev / sda'ya nasıl yeni değişiklikler ekleyebilirim? Teşekkür ederim
Milor123

2

Sürücülerin gerçekte ne kadar dolu olduğuna bağlı olarak, dosya sistemlerini monte etmek ve yapmak en hızlı olabilir

diff -qr /mnt/root1 /mnt/root2

Aksi takdirde, böyle bir şey söyleyebilirim:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Açıkçası , daha küçük sürücünün sonunda ne kadar büyük yapmanız bsve countdurmanız (veya çok daha uygunsa hemen önce) gerektiğini anlayın.

Veya enzotibin yorumu sayesinde, kullanabileceğiniz gibi görünüyor cmp, ancak -nbayt sayısını iki sürücünün daha kısa ile sınırlamak için bayrağa ihtiyacınız olacak .

cmp /dev/sda /dev/sdb -n 500GB

Maalesef cihazı bir NTFS birimi olarak bağlayamıyorum ve üzerinde doğru sürücüler olmadan bir LiveCD var. İkinci komut için kullandığınız alt kabuklar, dif'ye beslemeden önce tüm cihazı belleğe emmeye çalışmaz mı?
alanxz

1
@alanxz Hayır, diffalt kabuklar yazmadan önce tüm cihazı okumaz. baytları okuduktan hemen sonra ddyazar bs(veya burada belirtilmemişse işlenir) ve fifookunana kadar bloke eden s'ye yazarlar .
Kevin

Kabuk düzeyinde daha fazla düşünüyordum (ya da FIFO'yu uygulayan ne varsa). Ama bu sorumu cevaplıyor!
alanxz

2

İkili diff yazılımı arıyorsunuz

rdiff
yedekleme ve ağ iletimi için tasarlanmıştır, rdiff-backup'a bakın ve yedekleme için yineleme

xdelta3
, açık kaynaklı bir ikili dif, diferansiyel sıkıştırma araçları, VCDIFF (RFC 3284) delta sıkıştırmasıdır.

bsdiff
çok !! bellek aç, blok cihazlar için uygun değildir.


1

Tam olarak bu tür bir şey yapan bsdiff adlı bir yardımcı program var . Gerçekten hızlı yapar ve ihtiyacınız varsa ikili bir yama oluşturabilir.

Çevresiyle ilgili bazı açıklamalar için bu gönderiye bakın .


bsdiff'nin işi sadece iki dosyayı karşılaştırmaktan daha karmaşıktır, bu yüzden daha basit olduğundan daha hızlı olabileceğinden şüpheliyim cmp.
enzotib

Bağlantı koptu.
Owen Pauling

1

Aşağıdaki gibi iki farklı boyutta blok cihazı karşılaştırabilirsiniz md5sum:

(küçük cihazın olduğu varsayılarak /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

fsckYedekleme üzerinde çalışmayı düşünün . losetupYedeklemeye katıştırılmış bölümlerde geri döngü aygıtlarını ayarlamak için bazı hileler oynamanız gerekebilir , ancak dosya denetimi dosya yapısının tutarlı olduğunu söylüyorsa verilerin kendisi muhtemelen iyidir.

Tam bir sağlama toplamı istiyorsanız, yedeklemenin dahili 'bölümlerine' ve her birinin ayrı ayrı md5sumuna bakmak için ofsetleri olan geri döngü aygıtlarını kullanabilirsiniz, ancak bir zorlama fscksize bayt karşılaştırmaları veya sağlama toplamı hesaplamaları için bayttan çok daha hızlı bir temel fikir verebilir.

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.