Bozuk bölümleri olan bir diskten daha hızlı kurtarma


13

Son zamanlarda ddsağlıksız bir HDD'den bir dosyaya çalıştım . Ben kullandım dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Benim sorunum, o ddkötü bir blok karşılaştığında çok zaman israf oldu . Kullanım durumumda, daha hızlı bir sonuç için veri kaybıyla memnuniyetle ödeme yaparım.

Hata işlemeyi daha hızlı hale getirmenin bir yolu var mı? Belki bir çekirdek ayarı (HDD'ye bir blok okumak için daha az çaba sarf etmesini söyler)? Veya başka bir program?

Yanıtlar:


29

İlk olarak, yazılımın kullanılması için: ddrescueyerine kullanmayı deneyebilirsiniz dd.

ddrescueyalnızca sınırlı sayıda yeniden deneme yapmak için bir düğmeye sahiptir. Ayrıca bir günlük dosyası kullanabilir, böylece hangi blokların kötü olduğunu kaydeder. Daha sonra daha fazla yeniden deneme yapmak istiyorsanız, farklı seçeneklerle (daha fazla yeniden deneme gibi) tekrar çalıştırmak için aynı günlük dosyasını kullanabilirsiniz ve yalnızca gerekli blokları yeniden deneyecektir.ddrescue

Örnek kullanım:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

Gönderen ddrescueinfo-sayfa:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Kullanılacak bazı ek kaynaklar şunlardır ddrescue:


Düzenle

Durumda kendisi çok uzun sürüyor HDD, adlı bir özelliği etkinleştirmek için deneyebilirsiniz TLER ( T ime L imited E rror R veya ecovery) OKDL ( C ommand C ompletion T ime L IMIT). Tüm HDD'lerde bulunmaz, ancak HDD denetleyicisinin kendisindeki zamanı sınırlamak için kullanabilirsiniz. Bu yaklaşım ddrecueelbette kullanımı ile birleştirilebilir .

Linux'un smartctl( smartmontoolspakette) adlı bir aracı vardır .

Geçerli ayarı kontrol etmek ("devre dışı", istemediğiniz sınırsız bir süre anlamına gelir):

# smartctl -l scterc /dev/sda

Sabit bir değere ayarlamak için (bu örnekte 5,0 saniye. 0 olarak ayarlandığında TLER devre dışı bırakılır):

# smartctl -l scterc,50,50 /dev/sda

TLER kaynağı: http://en.wikipedia.org/wiki/TLER


2
Bakmak için başka bir araç dd
fpmurphy

oh güzel, o aracı bilmiyordum!
Slizzered

2
Bu TLER hakkında hiçbir fikrim yoktu, ama gerçekten günümü kurtardı. Diskimde bunlar devre dışı bırakıldı ve her çalıştığımda diskim birkaç saniye sonra engellendi. Gücü kapatma, açma ve sonraki deneme. Şimdi bahsettiğiniz komutla 2 saniyeye ayarladım ve bir daha asla engellemiyor, bazı sektörleri atlıyor, ancak en azından kesintisiz devam ediyor.
Sven Rieke


2

Diski kurtarmak için hızlı ve hızlı bir seçenek için bir sh komut dosyası kullanabilir ve dosyayı sh ile çalıştırabilirsiniz. Bu satırı içerir, sadece tekrarlayın sudo ddrescueve sleep 3birkaç kez daha. Uyku, sürücüyü birkaç saniye dinlendirmek için kullanılır:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Yukarıda kullanılan seçenekler:

  • -r0 : yeniden denemesiz
  • -e +0: ilk hatada çıkış
  • -T 1s: 1 saniye başarısız okuma ile çıkış
  • -d : Doğrudan G / Ç
  • -n : kazıma yok

Tamamlandıktan -Rsonra seçeneği bir -Akez kullanarak kullanabilirsiniz , bu tüm hata boyutlarını tersine çevirir ve tekrar geriye doğru başlatır. Hataları farklı okuyacağı anlamına gelir.


0

Sabit sürücünüzün boyutuna ve kaç tane bozuk bloğa sahip olduğuna bağlıdır. DD 1 tera sağlıklı bir hd kullanarak yedekleme genellikle 20 dakika sürer. Kötü bloklarla bu sabah toparlandım, beni iki kez aldım. Yaklaşık 30 bozuk blok ile (bir disk yedekleme) çoğaltma sorunları vardı. Yaptığım ilk şey, tüm iyi verileri yedeklemek için düzenli Filezilla kullanarak yedekleme dosyaları. Bir büyük dosyanın düzgün kopyalanmadığını fark ettim (Ortasında durdurma ve aktarımı yeniden başlatma). Neyse ki aynı dosyanın önceki bir yedeğine sahibim. Diski çoğaltmak için, bu yordamı kullanarak diskteki bozuk blokları bulmak zorunda kaldım:

1. fdisk -l kullanarak HD bilgilerini tanımlayan sorunlu diski bulun

2. Eğer diskinizin / dev / sdb olduğunu söylese, o zaman sürücüdeki tüm kötü blokları listeleyecek olan badblocks -v / dev / sdb komutunu çalıştırmanız gerekir . Neyse ki birkaç tane olacak. Bozuk blok bulunmazsa, sürücü bloklarınız sorun olmaz ve başka bir şey bulmanız gerekir. Blok boyutum 512 olduğundan DD'yi çalıştırmak için varsayılan numarayı kullanıyorum

3. her blok 512 boyuttadır, bu yüzden yaptığım bs = 512

DD'yi her zaman yaptığım gibi düzenli olarak her çalıştırdığımda, hatalardan sonra verilerim bozulacak. Bu yüzden parametreleri https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html sayfasında "Hatalı diskler için" bölümünde açıklandığı gibi kullanıyorum .

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Biraz zaman aldı. Her kötü blok, hatalı sürücüde bir patlama gibi sesle karşılaştı. Blok blok blok kopyalar ve tüm kötü bloklarım aynı gürültüyü yaptı. Gürültü yapma süresi, başka bir bozuk blok bulması ve ekran hatası mesajı hakkında bilgi vermesi. Ne 'conv = noerror, senkronizasyon' kötü iken, boş karakterler ile okur dışarı yapar, ped etmektir 'IFLAG = fullblock' Short hitap okur, ancak sonuna kadar verilerinizin senkronize içinde tutar. Yolsuzluk yok, sadece hatalı blokları kopyalamıyor ve boş NUL'larla dolduruyor.

DD ile kopyalama yapıldıktan sonra, sadece geçmiş bir yedek dosyadan Filezilla geri döndürme kötü dosyayı değiştirin ve her şey yolunda gitti. Umarım bu, hatalı sürücüleri yedeklemeye çalışan diğerleri için yararlı olacaktır.

NOT: Kötü bloklarım birbirine oldukça yakın. Kötü tespit edilen gruplarda bir seferde yaklaşık 4 blok. Bloklarınız tüm diskin üzerindeyse, birkaç dosya etkilenebilir. Neyse ki, benim durumumda, büyük bir veritabanı 4GB dosya sadece etkilenmiştir.


1
Aynı cevap birden fazla soruyu ele alıyorsa, soruların tekrarlanması ihtimali yüksektir. Eğer öyleyse, birini cevaplamak ve diğerini olası bir kopya olarak işaretlemek daha iyidir. Bu, tekrar eden cevapların şişmesini önler ve soruları birbirine bağlamak, okuyucuların tüm cevapları bulmasını kolaylaştırır.
fixer1234

Gerçekten değil, ama eğer böyle düşünüyorsan, cevabımı silmem için bana haber ver. Her yerde doğru çözümü aradım, ancak sunucumla ilgili bir sorunu çözmenin bir yolunu buldum. Sorunuma cevap vermeyen benzer başka sorular da var. Şimdiye kadar yaklaşık bir düzine benzer soru buldum. Deneyimimi ve bunu nasıl çözebildiğimi yazmak için sadece bir çiftim var. Cevabımı silmemi isteyip istemediğinizi belirtin ve bunu yapmaktan memnuniyet duyarım. Saygılarımızla.
Luis H Cabrejo
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.