DD herhangi bir doğrulama yapıyor mu?


16

ddEski bir sabit diskten yenisine veri kopyalamak için kullanıyorum . Verilerin bütünlüğünün güvenli olduğundan emin olmak istiyorum.

Bu cevap üzerine Gilles diyor ki

[Dd] başarıyla sonlandırıldıysa, yedek bir donanım arızasını engelleyen doğru ...

Bu tam olarak ne anlama geliyor? Does dddoğrulama inşa çeşit var?

Bunun yerine rsync kullanacak olsaydım --checksum, doğrulamak için de ikinci bir geçiş çalıştırırım . Bu tür bir paranoya haklı mı?


"Dürüstlük güvenlidir" tanımlayın.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Yani kopyanın orijinali ile aynı olduğunu düşünüyorum.
Sparhawk

Yalnızca düz dosyalarınız varsa, dosyaları kopyalamanın geleneksel yolu tar veya cpio kullanmaktır. GNU tar'ın doğrulama bayrağı vardır: gnu.org/software/tar/manual/html_section/tar_81.html . Bu günler rsyncmuhtemelen en basitleri olurdu.
Thorbjørn Ravn Andersen

1
"donanım arızasının engellenmesi" herhangi bir doğrulama yapılmadığını gösterir . Eğer öyleyse, donanım arızasını tespit edebilir.
Barmar

Yanıtlar:


20

ddya da başka bir uygulama muhtemelen düşündüğünüz anlamda “bir tür yerleşik doğrulama” içermez: yazılanlarla karşılaştırmak için depolama ortamındaki verileri geri okumaz. İşletim sisteminin işi budur.

Bir uygulamadan donanıma doğru bir okuma-doğrulama yapmak gerçekten mümkün değildir. Bazı senaryolarda işe yarar, ancak çoğu durumda hiçbir şey başaramaz. Uygulama, doğrudan bir depolama ortamına yazıyorsa yazdıklarını okuyabilir, ancak bu genellikle bellekte bir önbellekten geri döner ve bu da yararlı bir güvence vermez. Gelen sen alıntı Örneğin , ddbir boruya yazıyor ve bu durumda hat altındaki verilere ne üzerinde hiçbir kontrolü yoktur. Rsync örneğinizde,rsync --checksum anlamsızdır: teoride bir hata yakalayabilir, ancak pratikte bir hata olursa, ikinci geçiş muhtemelen yanlış bir şey bildirmez, bu yüzden gerçekten yararlı bir güvence vermeyen bir şey için çaba harcıyorsunuz.

Ancak, uygulamalar yapmak onlar işletim sistemi verileri için kabul edilen sorumluluğa sahip olduğunu doğrulamak anlamda, verilere ne doğrulayın. Tüm sistem çağrıları bir hata durumu döndürür. Bir sistem çağrısı bir hata durumu döndürürse, uygulama genellikle bir hata mesajı görüntüleyerek ve sıfır dışında bir çıkış durumu döndürerek bu hatayı kullanıcıya yayar.

Bunun ddbir istisna olduğuna dikkat edin : komut satırı parametrelerine bağlı olarak ddbazı hataları göz ardı edebilir . Bu son derece alışılmadık bir durumdur: ddbu özelliğe sahip tek komuttur. catBunun yerine kullanın dd, bu şekilde yolsuzluk riski yoktur ve daha hızlı olabilir .

Veri kopyalama zincirinde iki tür hata ortaya çıkabilir.

  • Yolsuzluk: aktarım sırasında biraz ters çevrilir. Bunu uygulama düzeyinde doğrulamanın bir yolu yoktur, çünkü bu gerçekleşirse, geri okuma sırasında aynı bozulmaya neden olma olasılığı yüksek olan bir programlama hatası veya donanım hatasından kaynaklanır. Böyle bir bozulmanın olmadığını doğrulamanın tek yararlı yolu, ortamın bağlantısını kesip RAM ile ilgili bir sorun olması durumunda tercihen farklı bir bilgisayarda yeniden denemektir.
  • Kesme: kopyalanan tüm veriler doğru bir şekilde kopyalandı, ancak bazı veriler hiç kopyalanmadı. Bu seferki ise değer komutunun karmaşıklığına bağlı olarak, bazen kontrol ediyorum. Bunu yapmak için verileri okumanıza gerek yok: sadece boyutunu kontrol edin.

Çoğu depolama ortamının tek bir bit flip'i algılamak + düzeltmek için yeterli FEC kullandığına inanıyorum.
gardenhead

2
Tabii ki tüm sabit diski dd ile kopyalarsanız ve hemen önbellek yeterince büyük olmadığı için çalıştığını bildiğiniz sabit diski karşılaştırırsanız.
Yeşu

1
Cevabınız için teşekkürler (+1). Muhtemelen oldukça basit kullandığımdan bahsetmeliyim dd if=/dev/sdc of=/dev/sdb bs=4M, bu yüzden anlayışım hataları ve hızı (az ya da çok, karşılaştırıldığında cat) görmezden gelme meselelerinin tartışmalı olduğu. Sadece monte ederek boyutu kontrol etmeyi mi söylüyorsunuz df?
Sparhawk

4

Hayır, ddaçık bir doğrulama yapmaz. Diskinizin veya herhangi bir bölümünün adli olarak doğrulanmış bir kopyasını istiyorsanız / buna ihtiyacınız varsa , ABD Savunma Bakanlığı Bilgisayar Adli Tıp Laboratuarı tarafından geliştirilen dcflddgeliştirilmiş bir versiyonudur dd.


4

"Emin" olmanın tek yolu, ek bir okuma ve karşılaştırma geçişi yapmaktır (önbellekleri bıraktıktan sonra).

Bunun yanı sıra, dddiğer tüm programların yaptığı gibi okuma ve yazma hatalarını algılar ... sürücüler (ve ilgili diğer bileşenler) hata bildirirse çalışır; sessizce veri kabul etmeyen sürücüler için aslında şansınız kalmaz.

Bu tür bir paranoya haklı mı?

Donanımınızın güvenilir olduğuna güvenemezseniz, işler karmaşıklaşır ...


Hem okuma-karşılaştırma hem de ddhataları tespit etme konusunda bundan daha karmaşıktır .
Gilles 'SO- kötü olmayı bırak'

Bu kadar ileri giderseniz dd, ciddi veri bozulması sorunları var, ancak bunlar gibi özel durumlar sorunun bir parçası değildi.
frostschutz

Bu yolsuzluk sorunları, kullanılarak üretilen verilerin doğrulanmasını haklı kılabilir dd. Asıl çözüm, ddsessiz veri bozulması nedeniyle bir şey kullanmaktır dd.
Gilles 'SO- kötü olmayı bırak'

2
@Gilles, ya da sadece ddhataları görmezden gelme demeyin . Tam olarak ne istediğini yapmak için bir programı suçlayamazsın.
Mark

@ Mark Ve nasıl, dua, sana ddhataları görmezden gelmemesini söyle ? Ve hayır, conv=noerrordoğru bir cevap değil. Örnek için frostschutz'un cevabına bakınız . Ben bunu tasarımını suçlamak ddgörmezden hataları varsayılan modu yapmak için, ve çok hassas iç mekaniği bilmeden kapatılamaz bir gemi.
Gilles 'SO- kötü olmayı bırak'

2

Evet, hatalı donanım verilere megabayt başına bir bit gibi rasgele hata bitleri ekleyebilir, bu mümkündür ve bazen pratikte gerçekleşir.

Genellikle, hem kaynak hem de hedef yeniden okuyarak, verilerin sağlam olduğunu doğrulamak için md5 veya sha1 karma kullanın, örneğin:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

Bu, verilerin dosya sistemi önbelleğinden çok daha büyük olduğunu varsayar, aksi takdirde, önbellek içeriğini değil, ortamdaki gerçek verileri doğrulamak için sistemi yeniden başlatmanız veya bunun için başka bir sistem kullanmanız gerekebilir.


İşletim sistemini dosya sistemi önbelleğini aygıta yazmaya zorlamak için dosya sisteminin bağlantısını kesmek / bağlamak yeterlidir.
miracle173

miracle173, ancak senkronizasyondan sonra bile, işletim sistemi yazdıklarını önbellekte tutmuyor mu? Bu yüzden sökme RAM önbellek temizleyecek emin değilim.
Matt

1

Gönderen man dd:

Bittiğinde, dd, standart hata çıkışına tam ve kısmi giriş ve çıkış bloklarının, kesik giriş kayıtlarının ve tek uzunluklu bayt takas bloklarının sayısını görüntüler.

Kısmi bir giriş bloğu, giriş bloğu boyutundan daha azının okunduğu bloktur. Kısmi çıktı bloğu, çıktı bloğu boyutundan daha azının yazıldığı bloktur. Teyp aygıtlarına kısmi çıkış blokları ölümcül hatalar olarak kabul edilir. Aksi takdirde, bloğun geri kalanı yazılır. Karakter cihazlarına kısmi çıkış blokları bir uyarı mesajı verecektir.

ddher blok kopyaladığında giriş / çıkış blok boyutlarının eşleştiğini doğrular. Yoksa, hatayı bir uyarı veya ölümcül hatayla (geçersiz kılınmış noerror) ele alır. Bu yüzden ddneredeyse her zaman çalışır.

Yine de, diskinizin bütünlüğünü manuel olarak doğrulamanın yerini almaz. Bilgiler sizin için değerliyse, evet, paranoya haklı . İşlem ddtamamlandığında manuel doğrulama gerçekleştirin .


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.