Hdd'den hdd'ye tam DD kopyası


34

ORİJİNAL SORU:

Aşağıdaki özelliklere sahip 2 özdeş sabit sürücüm varsa :

  • SATA 6.0 Gb / s
  • 5400 rpm
  • 3TB

Tam bir dd kopyanın tamamlanması ne kadar sürer?

Şimdiye kadar 5 saattir çalışıyor ve hala gidiyor ...

Linux Ubuntu 12.04 64bit kullanıyorum ve kullandığım komut:

dd if=/dev/sdb of=/dev/sdc

GÜNCELLEME: 1

Şimdi ilerlemeyi görebiliyorum ve 430GB kopya için 6 saat oldu. HDD 3TB'dir ...

Bunu yapmanın daha hızlı bir yolu yok mu?


GÜNCELLEME: 2

Bu öncekinden çok daha iyi görünüyor (Öneriler için Groxxda'ya teşekkürler):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA, 3TB için yaklaşık 9 saat, 6 saat sonra 430GB'a ulaşmadan önce, önceki komutu kullanarak yaklaşık 36 saat alacağını tahmin ediyorum.


İşlemin istatistiklerini elde etmeye çalışın: Çalışan bir 'dd' işlemine USR1 sinyali göndermek, standart hataya G / Ç istatistiklerini yazdırmasını ve ardından kopyalamaya devam etmesini sağlar. $ gg eğer = / dev / sıfır = / dev / null & pid = $! $ kill -USR1 $ pid Farklı dd uygulamaları için farklı olduğu için gerçek sinyal için man sayfanızı kontrol edin.
groxxda

@Groxxda, bunun nasıl yapılacağı hakkında hiçbir fikrim yok.
oshirowanen

1
GNU SIGUSR1SIGINFO
DD

Ayrıca "aynı sata kablosuna bağlı" ile ne demek istiyorsunuz? Bir çeşit port çarpanı kullanıyor musunuz? (150 MB / sn aktarma hızı elde ederseniz 5-6 saat sürer, ancak bunun yarısının daha gerçekçi olduğunu düşünüyorum.)
groxxda

1
Farklı (daha büyük) bir blok boyutu ( bs=argüman ) belirleyerek işlemi hızlandırabilirsiniz dd. Ayrıca her bir HDD'yi kendi sata portuna bağlamayı düşünün.
groxxda

Yanıtlar:


58

ddEski günlerde insanların bant kullandığı durumlarda (blok boyutları önemliyken) ve bu gibi daha basit araçlar catikili-güvenli olmayabilir.

Günümüzde, dd if=/dev/sdb of=/dev/sdcsadece karmaşık, hataya açık, yavaş bir yazı biçimidir cat /dev/sdb >/dev/sdc. ddBazı nispeten nadir işler için hala faydalı olsa da, inanmanıza izin vereceğini söyleyen ders sayısından çok daha az faydalıdır. İçinde sihir yok dd, sihir hepsi içeride /dev/sdb.

Yeni sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kemriniz yine gereksiz yere yavaş ve karmaşık. Veriler bir seferde 128kB okunur (bu dd512B'nin varsayılanından daha iyidir , ancak daha büyük değerler kadar iyi değildir). Daha sonra yazılmadan önce iki borudan geçer.

Daha basit ve daha hızlı catkomutu kullanın. (Bazı kriterler ben, Linux altında önce birkaç yıl yapılan catdaha hızlı oldu cpfarklı diskler arasında bir kopyası için ve cpdaha hızlı oldu ddher blok boyutu ile; ddaynı diske kopyalama yaparken büyük bir blok boyutu biraz daha hızlı oldu ile.)

cat /dev/sdb >/dev/sdc

Bu komutu çalıştırmak istiyorsanız sudo, yeniden yönlendirmeyi root olarak yapmanız gerekir:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Bir ilerleme raporu istiyorsanız, Linux kullandığınız için, catişlemin PID'sini (1234) söyleyerek ve bunun girdi (veya çıktı) dosya tanımlayıcısının konumuna bakarak kolayca bir rapor alabilirsiniz .

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Bir ilerleme raporu istiyorsanız ve unix varyantınız bir dosya tanımlayıcı konumlarına ulaşmak için kolay bir yol sağlamazsa, pvyerine yükleyip kullanabilirsiniz cat.


Büyük bloklarla ilgili garip olan şey, tıkanıklığın disk olmasıdır, yani catdaha hızlı olan ne dd? catÖnbelleği kullanan olabilir mi?
Emmanuel,

1
@Gilles, cevap için teşekkürler. Klonlamak için başka beş 3TB sürücüm var ve daha sonra cat seçeneğini deneyeceğim. Söyleyebileceğim kadarıyla, yeni dd komutunun tamamlanması yaklaşık 3 saat, toplamda yaklaşık 11 saat sürecek. Eğer kedi yaklaşımı ikinci 3 TB HDD için 11 saatten daha hızlıysa, kalan diskler için bu yöntemi kullanacağım.
oshirowanen

2
@Gilles, ilerleme raporunu almak için sudo sh -c 'pv /dev/sdb >/dev/sdc'yerine kullanmalı sudo sh -c 'cat /dev/sdb >/dev/sdc'mıyım?
oshirowanen

1
@oshirowanen Evet, kullanacağınız pvyeri kullanın cat.
Gilles 'SO- kötülük yapmayı bırak'

1
@unhammer Hayır! Her cihazı tek tek kopyalarsınız, örn cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. İki parçayı birleştirmek bir anlam ifade etmiyor. Btrfs biriminin yapısını değiştirmek, onu iki alt hacme sahip olmaktan bir tanesine değiştirmek istiyorsanız, yapıyı değiştirmek için btrfs araçlarını kullanmanız veya istediğiniz yapıya sahip yeni bir dosya sistemi oluşturmak ve dosyaları kopyalamanız gerekir. .
Gilles 'SO- kötülük yapmayı bırak'

7

ddvarsayılan olarak çok küçük bir blok boyutu kullanır (512 bayt). Bu, çok fazla ek yüke neden olur ( her 512 bayt için bir read()ve write()sistem çağrısı).

Daha büyük bir blok boyutu kullandığınızda çok daha hızlı gider. Optimal hızlar bs=64kya da böyle başlar. Çoğu insan hala daha büyük kullanır, bs=1Mbu yüzden insan tarafından okunabilir hale gelir ( ddkopyalandığını söylediğinde 1234 blocks, 1234 MiBherhangi bir matematik yapmadan biliyorsunuz ). Daha da büyük blok boyutlarının kullanılması, hız iyileştirmelerine, sadece daha yüksek bellek tüketimine yol açması muhtemel değildir.

Yani komut şöyle olmalı:

dd bs=1M if=/dev/sdb of=/dev/sdc

Zaten yavaş ddçalışan bir süreniz varsa, bunu kesebilir ve daha hızlı bir ddörnekle devam edebilirsiniz . Bunun için, kopyanın ne kadar ilerlediğini bilmek önemlidir. ddgenellikle iptal ettiğinizde ilerlemeyi yazdırır veya ilerlemesini yazdırması için çalışırken USR1sinyali gönderebilirsiniz .

kill -USR1 $(pidof dd)

Örneğin 1234MiB, daha fazlasını kopyaladıysa , 1234MiBkullanarak aşağıdaki konumda devam edebilirsiniz :

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Bundan daha az kopyalandıysa 1234MiB, kopyanız eksik olur. Birden fazla 1234MiBkopyaladıysa, normalde zarar vermeyen, önceden kopyalanmış bazı parçaları yeniden kopyalar. Bu nedenle, şüpheniz varsa, zaten kopyalandığına inandığınızdan biraz daha küçük bir değer seçmelisiniz.


5

Devam eden dd işlemi ile ilgili istatistikleri alma

Çıktı istatistiklerini standart hataya dönüştürmek için killkomutu uygun sinyal ile kullanabilirsiniz dd.
GNU dd man sayfasından:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Kılavuz sayfanızı ilk önce doğru sinyal için kontrol ettiğinizden emin olun, çünkü farklı dd uygulamalarında farklılık gösterebilir: (BSD dd SIGINFO kullanıyor).

Süreci hızlandırmak

  1. Her bir HDD'yi kendi SATA bağlantı noktasına bağlayın, böylece veriler bir aygıttan okunup aynı anda diğerine yazılabilir.
  2. bs=Argümanı kullanarak uygun bir blok boyutu kullanın . Süper kullanıcı hakkındaki bu konuya bir göz atın ve kendiniz için bazı değerler deneyin.
  3. ddOkuma ve yazma için ayrı çağrılar kullanın ve bunları bağlamak için bir boru kullanın ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Bunu yapar ve bir blok boyutu belirtirseniz, her çalıştırmada aynı blok boyutunu kullandığınızdan emin olun.
  4. directArgüman gibi diğer optimizasyonları deneyebilirsiniz .
  5. Sabit disklerinizin takılı olmadığından emin olun, aksi takdirde bozuk bir kopya oluşabilir.

0

'Partili' denediniz mi? Bir bölümü kelimenin tam anlamıyla bir sürücüden diğerine kopyalayıp yapıştırabilir ve gerektiği gibi yeniden boyutlandırabilirsiniz. Transfer hızını ve kalan süreyi alırsınız. Linux bölümleri için altında 'e2image' kullanır.


0

HDClone adlı ticari bir yazılım var . Hem ücretsiz hem de ticari olarak lisanslıdır. Her iki sürüm de önyüklenebilir bir disk sürücü veya DVD oluşturabilir ve diskleri kopyalayabilir. Kaynak ve hedef HD'leri bağlayın ve GUI tabanlı talimatları izleyin.

Ücretsiz olanı 80 MB / sn hızında transfer olurken, ücretli sürümler çok daha hızlı ilerleyebilir. NTFS ve FAT dosya sistemlerinde, ücretli sürümler yalnızca HD'nin işgal edilmiş bitlerini klonlayacak şekilde yapılandırılabilir; bu da her klonun hızını önemli ölçüde artırır.


(1) Bu ürüne bağlı mısınız? (2) Nereden bulabiliriz?
Scott

1
Ya da sadece ücretsiz "cat / dev / sdx> / dev / sdy" kullanabilirsiniz ...
HörmannHH
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.