Tam bir disk DDR'sini nasıl hızlandırabilirim?


62

ddBu komutla aynı iki sürücüde bir 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 ikisi de 1 TB depolama alanına sahiptir. /dev/sda 4096 blok boyutu kullanıyor. /dev/sdayerel bir sürücü ve /dev/sdbuzak bir caddy. Aşağıdaki protokolleri kullanabilirim:

  • USB2.0 HighSpeed ​​(Şu anda plan)
  • Gigabit Ağ Üzerinden Klonlama (Gerçekten bunu denemek istemiyorum)
  • USB3.0 (Eğer diğer diskimin caddy'sini bulursam)
  • eSATA (Bir kablo bulur / alırsam)
  • SATA (Kablo bulurum / alırsam dizüstü bilgisayar CD sürücülerine bayılmalıyım)

96 saatten daha az süren bu sürücü kopyasını çalıştırmanın bir yolu var mı? Dışında bir araç kullanmaya açığım dd.

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

  • Fat32 EFI Bölümü (*)
  • NTFS Windows Bölümü (*)
  • HFS + OSX Bölümü
  • EXT4 Ubuntu Bölümü (*)
  • Bölüm Değiştir (*)

* Clonezilla tarafından desteklenmektedir


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

İlk klonumu yaptığımda, HFS + dışındaki tüm bölümleri yaptım ve çok hızlı bir şekilde gitti. (Toplam 3 saatten fazla değil)


1
Muhtemelen klonezilla gibi bir şey kullanarak daha iyi. boş alan dahil her şeyidd kopyalar . Tamamen dolu olmayan büyük diskleriniz varsa dezavantajları çok belirgindir.
Örümcek Boris,

SATA kablosu satın almak ve harici sürücüyü anakarttaki SATA bağlantı noktasına geçici olarak takmak mümkün mü?
Mark Plotnick 12:14

Belki birisi aşağıdakileri detaylandırabilir: Bölümleme tablosunu klonlamaya (klonezilla veya dd kullanarak), HFS + dışındaki tüm bölümleri klonlamak için Klonezilla'yı kullanmaya ve bu bölüm için dd'yi kullanmaya ne dersiniz? Bu mümkün olur mu?
Alexander

@Alexander İlk klonumu böyle yaptım.
Kaz Wolfe

1
@ LouisAlvarado Klonu yeni başlattım dostum!
Kaz Wolfe,

Yanıtlar:


69

Tecrübelerime göre, komut satırında daha hızlı bir şey olduğunu sanmıyorum dd. bsParametrenin ayarlanması hızı artırabilir, örneğin, 100 MB / s'den daha büyük bir okuma / yazma hızına sahip olduğumu bildiğim 2 HDD'm var;

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

Her pviki sürücüde de en yüksek hızı kontrol eden ve ardından klonlama işlemine devam eden (önce kurulması gerekir) de var. Bu elbette kökünden yapılmalıdır:

pv < /dev/sda > /dev/sdb

PV ile 156 MB / s

pvHızdan ayrı olarak güzel olan şey ilerlemeyi, mevcut hızı, başladığından beri geçen zamanı ve ETA'yı göstermesidir. HFS + ile ilgili olarak bilmiyorum, sadece "hız" bölümünde yardımcı olmaya çalışıyorum. En pviyi duruma getirilmiş bir bsparametreyle veya 4 TB'lik bir sürücüyü 7 Saatten daha kısa bir sürede (150 MB / sn akım hızında 6 Saat 50 Dakika) yapabilirsiniz.

görüntü tanımını buraya girin

Kullanmakta olduğunuz bağlantı türleriyle ve kullanabileceğim diğerleriyle birkaç test yaptım. Asus Z87 Pro ve Intel DZ68DP kullanıyordum. Bu benim sonuçlarımdı, ama önce bilmemiz gerekir ki birçok transfer hızı için teorik hızlar (Ham hızlar) sadece, teoridir . Gerçek testler yapıldığında, bu ham hızın% 40 ila% 80'i arasında olduklarını ortaya koydu. Bu testler, kullanılan Cihaz, bağlantı tipi, anakart, bağlantı kablosu tipi, dosya sistemi tipi ve daha fazlasına bağlı olarak değişebilir. Bunu akılda tutarak, bu ne var (Ben sadece cihaza yazma hızı test, okuma genellikle 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 

3
dd'nin ilerlemesini almak için USR1 sinyalini gönder. Dd'nin dezavantajı boş alanı kopyalamasıdır.
jfs

1
Tecrübelerime göre bsparametreyi ayarlamak ddkadar hızlı cat. catİlk etapta kullanmak kadar iyi olabilir .
Gilles 'SO- kötü olmaktan vazgeç'

3
pvtek başına çok iyi çalışıyor.
Kaz Wolfe,

11
İşi yapmak için gg kullanabilirsiniz ancak şunun gibi transfer hızını izlemek için zincire pv ekleyin:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter

4
Ben her zaman s pvarasında kullandım dd. Tek başına kullanılabileceğini asla bilemezdim!
korylprince

12

Bir bölümü toptan kopyalamak için catyerine kullanındd . Bir süre önce kıyaslamalar yaptım , bölüm yerine büyük bir dosyayı kopyaladım, iki disk arasında (aynı diskte, göreceli zamanlamalar farklı):

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

Bu kriterden çıkan sonuç, ddkonular için blok büyüklüğü seçiminin (o kadar değil) ve catotomatik olarak hızlı bir kopya almanın en iyi yolunu bulmasıdır: ddsadece sizi yavaşlatabilir. Küçük bir blok büyüklüğü ile, ddküçük okuma ve yazma kayıplarını kaybederek zaman harcar. Büyük bir blok boyutunda, diğeri okurken veya yazarken bir disk boşta kalır. Diğer disk yazarken, bir disk okuduğunda optimum hız elde edilir.

Bir bölümü kopyalamak için, dosyaları kopyalamak daha hızlı olabilir cp -a. Bu, kaç dosya bulunduğuna ve dosya sisteminin ne kadarının boş alan olduğuna bağlıdır. Dosya kopyalamak, dosya sayısına kabaca orantılı bir ek yüke sahiptir, ancak diğer yandan boş alan kopyalamak zaman harcar.

USB2 için maksimum veri hızı 50 MB / sn'nin biraz altındadır ve 1TB aktarımı 6-7 saat arasındadır. Bu, USB veri yolunu doyurmaya yetecek kadar hızlı bir sabit disk varsayar; Sanırım daha hızlı olan 7200 dev / dak sürücüler bunu yapabilir ancak 5900 dev / dak o kadar hızlı olmayabilir (belki de lineer yazmalar içindir).

Her iki disk de paralel olarak kullanılıyorsa, disk kafalarının hareket etmesi gerekeceğinden kopyayı önemli ölçüde yavaşlatabilir.


Yine de bütün bir diski kopyalamaya çalışıyorum.
Kaz Wolfe

Farkın aynı sırada olmasını bekliyorum, ancak daha güvenilir veriler elde etmek için sisteminizde bir kıyaslama yapın.
Gilles 'SO- kötü olmaktan vazgeç'

İçin catkullanılabilir dd if=ubuntu.iso of=/dev/usbmi? ddBunu USB2 veya USB3'e yapma hızı sinir bozucu derecede yavaştır.
Oxwivi

1
@Oxwivi Evet, cat ubuntu.iso >/dev/usbtamamen eşdeğerdir. İçinde sihir yok dd, sadece girişini çıkışına kopyalamak için bir araç.
Gilles 'SO- kötülük olmayı'

Yukarıda verilen cat komutu bir mac üzerinde çalışmadı. Geri verdim sudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1"-bash: / dev / disk1: İzin reddedildi"
Nay

12

Sorun, bağlantı türünüz ve blok boyutunuzdur. En hızlı sonuç için, blok boyutunuz tipik olarak aldığınız en düşük yazma hızının yarısı kadar olmalıdır. Bu size güvenli bir marj sağlayacak, ancak yine de çok sayıda izin verir; Tabii ki, verileri alabilmek için de yeterince ram'a ihtiyacınız var.

Usb 2.0 saniyede 12 megabit (Mbps), Usb 2.0 Yüksek Hız 480 Mbps'dir. Bu elbette ham hızdır; 8 bitlik bir bayt ve çerçeveleme ek yükü ile MB / s olarak kullanılabilir hız genellikle bir ondalık basamaktır. Mesela 480 ham, 48 MB kullanılabilir hale geliyor. Bunun matematiksel en iyisi 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, asıl depolama aygıtının bağlantı hızlarını eşitlemesi veya aşması şartıyla, maksimum yazma hızı 30-35 MB civarında olmalıdır.


6
Birim nitpicking: USB2.0 Yüksek Hız 480 Mbit / s = 60 MByte / s, ham hızdır. Kullanılabilir hız bir ondalık basamak değil, ham hızın yaklaşık% 80'i. Temel kural "MByte / s cinsinden gerçek hız, Mbit / s cinsinden 1/10 ham hızdır" geçerlidir.
jpa

5

İyi ayarlanmış dd('pv') veya 'cat' komutunun ham hızının yenilmesi zor olduğunu kabul ediyorum , ancak kopyasında herhangi bir sorun varsa (kötü sektör, elektrik kesintisi, kullanıcı hatası vb.) Başlamak zorundasınız. bitmiş.

Ddrescue - dd'nin tüm hızına sahip bir FOSS aracı olan ancak disk hataları üzerinde çalışacak ve bir arıza olması durumunda daha sonraki bir noktadan devam edecek bir araç önermek istiyorum .


2

Windows 7'yi bir HDD’den SSD’ye taşıyorum ve bunu ve bazı diğer cevapları buldum ... Başkalarına yardımcı olabilecek bir şey öğrendim. Benim durumumda, kaynak sürücü daha büyük, yoksa / dev / sda -> / dev / sdb cihaz seviyesinde çalışmış olurdum.

Win7 ve 3 bölümleri ... USB üzerinde Xbuntu 14.04 live cd kullandım. Kazanan bilgisayarın DVD'sini çıkarın ve SSD'yi yerine yerleştirin. Partclone yüklü ve bunu denedi:

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

Partclone Windows'ta çalıştırmak chkdisk gerektiren Ntfs kustu, bu yüzden hızlı bir düzeltme partclone mutlu etti:

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

Tüm komutlar root olarak çalıştırılır. Partclone's ncurses UI (-N seçeneği), aktarımın 7GB / dak olduğunu ve 5GB / dak.'da olduğunu ve 83 MB / sn'ye kadar olduğunu söyledi. Büyük kısmı partclone kullanılmayan alanı kopyalamıyor, bu yüzden klonu oldukça hızlı hale getirdi.

Ek potansiyel alıcılar:

  • Aktardığınız sürücü daha önce kullanılmışsa, bir GPT kalıntısı olabilir. Windows 7 fabrika kurulumları genellikle msdos / mbr bölüm tablolarıdır. GPT parçalarını hedef sürücüden kaldırmanız gerekir. Bu Unix ve Linux QA bu konuda bana yardımcı oldu. Sen kullanmak zorunda gdisk, cihazda ardından z ve evet GPT verilerini zap ve MBR TUTUN emin olmak için x kullanın.

  • Ve bir dd aygıtı yapmazsanız,
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    sdb'nin kaynak veya eski sürücü ve sda ​​hedef veya yeni sürücü ( kaynak ) olduğu yerde MBR'yi kopyalamanız gerekir.


1

Geçenlerde 100GB'lık bir bölüm (HDD) görüntüsü oluşturdum ve onu yeni SSD diskine yazdım.

İşlemi büyük ölçüde hızlandırabilecek bir ipucu: :)

Dosyayı daha küçük parçalara ayırma (dosya ne kadar büyükse, o kadar 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, (ayrı bir terminalde) kullanarak hızını kontrol edebilirsiniz.

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

Ardından, sonuç dosyalarıyla dolu bir dizine sahip olduğunuzda (maindisk.img000, maindisk.img001, vb.)

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

görüntüyü SSD'nin yeni boyutuna 'yakmak' (eşitlik eskisiyle aynı olmalıdır)

Bana göre (bölünmeden) normal yoldan daha hızlı bir loooot çalıştı. Görüntüyü oluşturmanın ortalama hızı ~ 13 MB / sn idi. 'Normal' yol kullandığımda ~ 15MB / s ile başlıyor ve ardından 1MB / s'ye düşüyor.


1
Birden çok küçük dosya yerine büyük bir dosya yazmak neden daha yavaş olsun? Hedef dosya sistemi türü ve bağlanma bayrakları neydi?
David Foerster

Ayrıca conv=sync, bu kullanım durumunda performansa zararlı ve oldukça yararsızdır.
David Foerster

0

Bu konuyu bulan herkes için, sadece ddrescue gibi veri kurtarma için tasarlanmış bir araç kullanmak çok daha kolay ve daha hızlıdır . Okuma hataları durumunda önce iyi parçaları kurtarmaya çalışır. Ayrıca kurtarmayı istediğiniz zaman durdurabilir ve daha sonra aynı noktada devam ettirebilirsiniz.

İki kere çalıştır:

İ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, sadece hatalı 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 sisteminde bozulma olup olmadığını kontrol edebilirsiniz.

Daha fazla bilgi:
https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html


0

Id okuma hızlarını artırmak için giriş / okuma - dosya / disklerin SATA'da olmasını önerir. USB 2.0 Yüksek hızı da , 2014 kb / s'de ayar USB 2.0 ila SATA iken, ddrescue ile ortalama 33816 kb / s hızları alıyorum.


0

Farklı bir blok boyutu kullanın. ddBir kerede okuyan veri miktarıdır . Çok az okursanız, program mantığında daha fazla zaman harcanır ve çok fazla okunduğunda büyük verileri dolaşmak için çok zaman harcanır.

Hızı farklı blok boyutlarında ölçmek için aşağıdaki bashbetiği kullanın :

  • $devcihaza ayarla
  • cbtotalBeklenen okuma hızınızın en az 5 katı olması için düzeltme
    (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)

Önümüzdeki disk okuma nedeniyle sonuç daha büyük bir boyuta önyargılı olabilir - bu yüzden cbtotalyeterince büyük ayarlamak önemlidir .

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.