Tam disk dd'yi nasıl hızlandırabilirim?

51

Bu komutla iki özdeş sürücüde dd yapıyorum:

 dd if=/dev/sda of=/dev/sdb bs=4096

Her iki sabit sürücü de aynı model numarasıdır ve her ikisinde de 1 TB depolama alanı vardır. /dev/sda , 4096 bir blocksize kullanır. /dev/sda , bir yerel sürücüdür ve /dev/sdb , bir uzak moddur. Aşağıdaki protokolleri kullanabiliyorum:

  • USB2.0 HighSpeed ​​(Şu anda plan)
  • Gigabit Over-The-Ağ klonu (Bunu gerçekten denemek istemiyorum)
  • USB3.0 (Diğer sürücü grubumu bulursam)
  • eSATA (Bir kablo bulursam / satın alırsam)
  • SATA (Bir kablo bulup satın alırsam, dizüstü bilgisayar CD sürücülerine bayılırsam)

Bu sürücü kopyasının 96 saatten az sürmesi için bir yol var mı? % Co_de% dışındaki araçlar kullanmaya açığım.

Aşağıdaki bölümleri kopyalamam gerekiyor (UUID'ler dahil)

  • Fat32 EFI Bölümü (*)
  • NTFS Windows Bölümü (*)
  • HFS + OSX Bölümü
  • EXT4 Ubuntu Bölümü (*)
  • Takas Bölümü (*)

dd Clonezilla tarafından destekleniyor

Clonezilla'yı denedim (ve daha hızlıydı), ancak ihtiyacım olan HFS + akıllı kopyalamayı desteklemiyor. Belki en yeni sürüm bunu destekliyor mu?

İlk klonumu oluşturduğumda, HFS + dışındaki tüm bölümleri yaptım ve çok hızlı bir şekilde geçti. (Toplamda 3 saatten fazla değil)

    
sordu Kaz Wolfe 12.09.2014 04:39

9 cevap

54

Deneyimlerimde komut satırında daha hızlı bir şey olduğunu düşünmüyorum dd . % Co_de% parametresini ayarlamak hızını artırabilir, örneğin, 100 MB / s'den büyük bir okuma / yazma hızına sahip olduğumu bildiğim 2 HDD'ye sahibim:

dd if=/dev/sda of=/dev/sdb bs=100M

Ayrıca, her iki sürücüdeki en hızlı hızı kontrol eden ve daha sonra klonlama işlemine devam eden bs (Öncelikle yüklenmesi gerekir) vardır. Bunun elbette kökünden yapılması gerekiyor:

pv < /dev/sda > /dev/sdb

PV ile 156 MB / s aldım

Hızdan ayrı pv hakkında güzel olan şey, ilerlemeyi, mevcut hızı, başladığı günden bu yana geçen zamanı ve ETA olduğunu göstermesidir. HFS + ile ilgili olarak bilmiyorum, sadece "hız" bölümünde yardımcı olmaya çalışıyorum. % Co_de% veya çok optimize pv parametresi ile, 7 Saatten daha az bir sürede 4 TB'lık bir sürücü yapabilirsiniz (150 MB / s'lik bir geçerli hızda 6 Saat 50 Dakika).

Kullandığınız bağlantı türleriyle ve sahip olduğum diğerleriyle birkaç test yaptım. Asus Z87 Pro ve Intel DZ68DP kullanıyordum. Bu benim sonuçlarımızdı, ancak önce birçok aktarım hızı için teorik hızların (Raw hızları) sadece teori olduğunu bilmemiz gerekiyor. Gerçek testler yapmak, bu ham hızın% 40 ila% 80'i arasında olduğunu ortaya çıkardı. Bu testler, kullanılan Cihaz, bağlantı tipi, ana kart, bağlantı kablosu tipi, dosya sistemi tipi ve daha fazlasına bağlı olarak değişebilir. Bunu aklımda tuttuğum şey buydu (Yalnızca Yazma hızını Aygıtta test ettim, okuma tipik olarak daha yüksek):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 
    
verilen cevap Luis Alvarado 12.09.2014 05:27
12

Sorun, bağlantı tipiniz ve blok boyutunuz. En hızlı sonuçlar için blok boyutunuz genellikle aldığınız en düşük yazma hızının yarısı olmalıdır. Bu size güvenli bir marj verir, ancak yine de büyük bir sayıya izin verir; Tabii ki de verileri tutmak için yeterli miktarda ram olmalı.

Usb 2.0 saniyede 12 megabit (Mbps), Usb 2.0 Yüksek Hızlı 480 Mbps'dir. Bu tabii ki ham hızdır; bir baytta 8 bit ve ek yük çerçeveleme ile MB / s cinsinden kullanılabilir hız genellikle ondalık bir basamaktır. Yani örneğin 480 raw, kullanılabilir 48MBs olur. Bunun matematiksel en iyi olduğunu unutmayın, gerçek dünyada biraz daha düşük olacaktır. USB 2.0 yüksek hızlı bağlantılar için, gerçek depolama cihazının bağlantı hızlarını eşit veya üst sınırlarda olması koşuluyla, yaklaşık 30-35 MBs maksimum yazma hızında bir yerde beklemeniz gerekir.

    
verilen cevap Fellow 12.09.2014 08:17
11

Bir bölüm toptan kopyalamak için cat yerine dd kullanın. Ben verilen cevap Gilles 12.09.2014 14:46

5

İyi ayarlanmış dd ('pv') veya 'cat' komutunun ham hızının geçmesi zor olduğunu kabul ediyorum, ancak kopyayla ilgili herhangi bir sorun varsa (bozuk sektör, elektrik kesintisi, kullanıcı hatası vb.) ) o zaman baştan başlamak zorundasın.

ddrescue - dd'nin tüm hızına sahip bir FOSS aracı önermek istiyorum ancak işe yarayacak disk hataları çevresinde ve bir hata varsa daha sonraki bir noktada devam edin.

    
verilen cevap dan_linder 17.09.2014 05:21
2

Windows 7'yi bir HDD'den SSD'ye taşıyorum ve bunu ve diğer bazı cevapları buldum ... Başkalarına yardım edebilecek bir şey öğrendim. Benim durumumda, kaynak sürücü daha büyük, aksi takdirde / dev / sda - & gt; / dev / sdb cihaz seviyesi.

Win7 ve 3 bölümleri ... Bir USB üzerinde Xbuntu 14.04 canlı cd kullandım. Win bilgisayarın DVD'sini attı ve SSD'yi yerine koydu. Yüklü partclone ve bunu denedi:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

Partclone, Windows'da chkdisk'in çalıştırılmasına ihtiyaç duyan ntfs üzerinde kusurdu, bu yüzden hızlı bir düzeltme partclone'u mutlu etti:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

Tüm komutlar root olarak çalışır. Partclone's ncurses UI (-N seçeneği) aktarımın 7GB / dk olduğunu ve 5GB / dak'da bittiğini ve bunun 83MB / sn'ye eşit olduğunu söyledi. Büyük kısmı partclone kullanılmayan alanı kopyalamaz, bu yüzden bu klonu oldukça hızlı bir şekilde yaptı.

Ek potansiyel varlıklar:

  • aktarmakta olduğunuz sürücü daha önce kullanılmışsa, GPT'nin kalıntıları olabilir. Windows 7 fabrika yüklemeleri genellikle msdos / mbr bölüm tablolarıdır. GPT parçalarını hedef sürücüden kaldırmanız gerekir. Bu Unix & amp; Linux QA bu konuda bana yardımcı oldu. Cihazda gdisk kullanmanız, GPT verilerini zaplamak için x ve z ve yes tuşlarını kullanmanız ve MBR'yi TUTMALIDIR.

  • Ayrıca, bir cihaz düzeyinde dd yapmazsanız, MBR'yi% dd if=/dev/sdb of=/dev/sda bs=446 count=1
    ile sdb'nin kaynak veya eski sürücü olarak kopyalamanız gerekir. ve sda ​​hedef ya da yeni bir sürücüdür ( source )

verilen cevap Chris K 21.12.2014 10:37
1

Kısa bir süre önce 100GB'lık bir bölüm (HDD) görüntüsünü oluşturdum ve yeni SSD diskine yazdım.

İşte süreci hızlandıran bir ipucu:)

Dosyayı daha küçük parçalara ayırın (dosya ne kadar büyükse, daha yavaş çalışır)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

İşlem sırasında, hızı (ayrı terminalde) kullanarak kontrol edebilirsiniz

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

Ardından, sonuç dosyalarıyla dolu bir dizininiz varsa (maindisk.img000, maindisk.img001, vb.) kullanmak

sudo cat maindisk.img* | sudo dd of=/dev/sda1

görüntüyü SSD'nin yeni partisine 'yakmak' (parition eskisiyle aynı boyutta olmalıdır)

Bana göre her zamanki yoldan daha hızlı bir şekilde bir loooot çalıştı (bölünmeden). Görüntü oluşturmanın ortalama hızı ~ 13MB / s idi. 'Normal' yolunu kullandığımda ~ 15MB / s ile başlayıp 1MB / s'ye düşüyor.

    
verilen cevap matowc1991 01.12.2014 16:33
0

Bu konuyu bulabilen herkes için ddrescue gibi veri kurtarma için tasarlanmış bir aracı kullanmak çok daha kolay ve hızlıdır. . Okuma hataları durumunda ilk önce iyi parçaları kurtarmaya çalışır. Ayrıca, kurtarma işlemini istediğiniz zaman kesebilir ve daha sonra aynı noktada devam edebilirsiniz.

İki kez çalıştırın:

İlk turda, her bloğu okuma hatası olmadan kopyalayın ve hataları rescue.log dosyasına kaydedin.

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

İkinci turda, yalnızca kötü blokları kopyalayın ve pes etmeden önce kaynaktan okumak için 3 kez deneyin.

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

Artık yeni sürücüyü bağlayabilir ve dosya sistemini yolsuzluk için kontrol edebilirsiniz.

Daha fazla bilgi:
İşte

    
verilen cevap goetzc 20.02.2016 21:05
0

Okuma hızlarını artırmak için giriş / okuma dosyası / diskin SATA üzerinde olmasını tavsiye edin. USB 2.0 Yüksek hızı, 2014'te USB 2.0 ile SATA arasındayken ddrescue ile 33816 kb / s ortalama hız aldığımdan da iyidir. kb / s

    
verilen cevap NateNjugush 24.10.2016 13:07
0

Farklı bir blok boyutu kullanın. Bu,% co_de yüzdesinin bir seferde okuduğu veri miktarıdır. Çok az okuma yapıyorsanız, program mantığına daha fazla zaman harcanır ve çok fazla okursa, büyük verileri etrafta dolaşmak için çok zaman harcanır.

Farklı blok boyutlarında hızı ölçmek için aşağıdaki dd komut dosyasını kullanın:

  • bash öğesini cihaza ayarla
  • $dev 'yı beklenen okuma hızınızın en az 5 katı olacak şekilde düzeltin
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in 'seq 10'; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

Sonuç, diskin okunması nedeniyle daha büyük bir boyuta yönelmiş olabilir - bu yüzden cbtotal 'yi yeterince büyük olarak ayarlamak önemlidir.

    
verilen cevap ivan_pozdeev 30.06.2017 00:13

Etiketlerdeki diğer soruları oku