CD / DVD kopyalamak için cat, dd, pv veya başka bir prosedür kullanmak daha mı iyi?


22

Arka fon

Bazı veri CD'lerini / DVD'lerini daha sonra sürücüye ihtiyaç duymadan kullanmak için ISO dosyalarına kopyalıyorum.

Prosedürler için internette bakıyorum ve çok şey buldum:

  • catBir aracı kopyalamak için kullanımı : http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • Kullanımı dd: böylece (görünüşte en çok kullanılan) yapmak http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • pvBunu yapmak için sadece kullanımı : Daha man pvfazla bilgi için bakınız , ancak bir alıntı:

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

Ben hepsini eşdeğer olmalıdır eğer (kullanarak bazıları test rağmen, bilmiyorum md5sumen azından aracı) ve ddve pvvardır değil eşdeğeri. İşte md5sumsürücüye ve her prosedür kullanılarak oluşturulan dosyaların her ikisinin:

dd prosedürünün md5 değeri: 71b676875b0194495060b38f35237c3c

md5 of pv prosedürü: f3524d81fdeeef962b01e1d86e6acc04

EDIT: Bu çıktı verilen çıktıdan başka bir CD'den çıktı. Aslında cevap olarak verdiğim bazı ilginç gerçekler olduğunu fark ettim.

Aslında, her bir dosyanın boyutu birbirinden farklıdır .

Yani, bir CD / DVD kopyalamak için en iyi prosedür var mı yoksa sadece komutları yanlış mı kullanıyorum?


Durum hakkında daha fazla bilgi

İşte şimdiye kadar bulduğum prosedürleri kontrol etmek için kullandığım test durumu hakkında daha fazla bilgi:

isoinfo -d i /dev/sr0 Çıktı: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddçıktı sağlama ve dosya bilgileriyle medyayı kopyalamak için Çıktı: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvçıktı sağlama ve dosya bilgileriyle medyayı kopyalamak için Çıktı: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

Herhangi bir yardım takdir edilecektir!

linux  dd  cat  disk-image  pv 

dosya boyutları aynı mı? sonucu cmp file1 file2? ddyanlış ile mi kullandınız count=(ya da gerçekten her şeyi istiyorsanız gerekli olmayan herhangi bir sayı?). Dmesg'deki hataları oku?
frostschutz

2
Farklı boyutlardaki dosyaların (% 99.9999999999 +% olasılıkla) farklı sağlama toplamları olacağını söylemeye gerek yok. Testleri yaptığınız sürece, tüm sonuçları yayınlamak iyi olurdu, (1) ddkullandığınız komutu (hangi blok boyutu? Ne sayılır?), (2) boyutları ve sağlama toplamlarını dahil etmek tüm çıkışlar ve (3) kaynak optik diskteki veri miktarı hakkında sahip olduğunuz bağımsız bilgiler. ... ... ... ... ... ... Neden PS kullanıyorsanız count=üzerinde dd? Tüm disk görüntüsünü kopyalamak istiyorsunuz, değil mi?  count="bunu kopyala ve sonra dur" diyor.
Scott

@Scott Bu sayfada linuxjournal.com/content/archiving-cds-iso-commandline yazarın isoinfo -d -i /dev/cdromsayı sayısını bilmek ve kullanmak için kullanması gerektiğini söylüyor - aslında sadece kullanmamanız gerektiğini söylüyor dd. "Her durumda, bu CD'nin düzgün bir ISO görüntüsünü istiyorsanız, görüntünüzü oluşturmadan önce blok boyutunu ve blok sayısını doğru almanız gerekir."

@frostschutz İlk durumda boyutlar aynı değildi, ama şaşırtıcı bir şekilde, tekrar denedim ve farklı sonuçlar aldım. Daha fazla ayrıntı için verdiğim yanıta bakın.

Yanıtlar:


27

Aşağıdaki komutların tümü eşdeğerdir. CD'nin baytlarını okur ve /dev/sr0adlı bir dosyaya yazarlar image.iso.

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

Neden birini diğerinin üzerinde kullanasın ki?

  • Basitlik. Örneğin, zaten biliyorsanız catveya cpbaşka bir komut öğrenmeniz gerekmez.

  • Bozulmazlık. Bu, bir çeşit basitlik çeşididir. Komutu değiştirmenin yaptığı şeyi değiştirmesi riski ne kadardır? Birkaç örnek görelim:

    • Yönlendirme olan herhangi bir şey: Yanlışlıkla bir yönlendirme yanlış yönde koyabilir veya unutabilirsiniz. Hedefin varolmayan bir dosya set -o noclobberolması gerektiğinden , hiçbir şeyin üzerine yazmadığınızdan emin olun; ancak yanlışlıkla yazarsanız bir cihazın üzerine yazabilirsiniz >/dev/sda(salt okunur olan CD için elbette bir risk yoktur). Bu, cat /dev/sr0 >image.iso( tee </dev/sr0 >image.isoyeniden yönlendirmeleri ters çevirirseniz veya girdiyi unutursanız, teeyazacağınız /dev/sr0) gibi alternatifler ( lehine zarar vermek zor ) lehine konuşur .
    • cat: yanlışlıkla iki dosyayı birleştirebilirsiniz. Bu, verileri kolayca kurtarılabilir hale getirir.
    • dd: ive oklavyede yakın ve biraz alışılmadık. Hiçbir karşılığı yoktur noclobber, of=üzerine yazma şey mutlu edecektir. Yönlendirme sözdizimi hataya daha az eğilimlidir.
    • cp: kaynağı ve hedefi yanlışlıkla değiştirirseniz, aygıtın üzerine yazılacaktır (yine salt okunur olmayan bir aygıt olduğu varsayılarak). Eğer cpgibi bazı seçenekleri ile çağrılır -Rya -abazı insanlar bir takma ad yoluyla eklemek, cihazın düğümü yerine cihaz içeriği kopyalar.
  • Ek işlevsellik. Burada kullanışlı ek işlevselliğe sahip olan tek araç pv, güçlü raporlama seçenekleriyle.
    Ancak burada yine de çıktı dosyasının boyutuna bakarak ne kadar kopyalandığını kontrol edebilirsiniz.

  • Verim. Bu bir I / O-bağlı süreçtir; performanstaki ana etki arabellek boyutudur: araç kaynaktan bir öbek okur, öbeği hedefe yazar, tekrarlar. Yığın çok küçükse, bilgisayar zamanını görevler arasında geçiş yaparak geçirir. Yığın çok büyükse, okuma ve yazma işlemleri paralelleştirilemez. Bir PC'deki en uygun yığın boyutu genellikle birkaç megabayttır, ancak bu işletim sistemine, donanıma ve bilgisayarın başka ne yaptığına bağlıdır. Bir süre önce, aynı disk içindeki kopyalar için büyük bir arabellek boyutuna sahip olan kopyaların avantajlı olduğunu, ancak çapraz diskli kopyalar için herhangi bir arabellek boyutunun kazandığını gösteren Linux'ta sabit diskten sabit diske kopyalar için kriterler yaptım .dd catdd

Bu ddkadar sık ​​bahsetmenizin birkaç nedeni vardır . Performansın dışında, özellikle iyi nedenler değiller.

  • Çok eski Unix sistemlerinde, bazı metin işleme araçları ikili verilerle başa çıkamadılar ( dahili olarak boş sonlandırılmış dizeler kullandılar , bu nedenle boş baytlarla ilgili sorun yaşama eğilimindeydiler; bazı araçlar karakterlerin sadece 7 bit kullandığını ve 8 bit karakter kümelerini düzgün şekilde işleyin). Bunun hiç bir sorun vardı emin eğer değilim cat(o gibi daha hat odaklı araçlarla oldu head, sedvs.), ama insanlar çünkü metin işleme ile dernek ikili verilere bunu önlemek eğilimindeydi. Linux, OSX, * BSD gibi modern sistemlerde veya POSIX uyumlu herhangi bir şeyde bu bir sorun değildir.
  • Cihazlar gibi doğrudan dddiğer araçlardan biraz daha “düşük seviye” olan bir efsane var cat. Bu tamamen yanlıştır: ddve catve teeve diğerleri okuma onların girişten bayt ve onların çıkışına bayt yazma. Gerçek sihir var /dev/sr0.
  • ddalışılmadık bir komut satırı sözdizimine sahiptir, bu yüzden nasıl çalıştığını açıklamak, sadece yazan bir şeyi açıklayarak daha fazla parlaklık fırsatı verir cat /dev/sr0.
  • dd Büyük bir arabellek boyutu ile kullanmak daha iyi bir performansa sahip olabilir, ancak her zaman böyle değildir ( Linux'ta bazı kıyaslamalara bakın ).

İle önemli bir risk ddolduğunu o sessizce bazı verileri atlayabilirsiniz . Bence geçildiği veya geçmediği ddiçin güvenli olduğunu düşünüyorum , ancak tüm platformlarda durumun bu olup olmadığından emin değilim. Ancak performans dışında bir avantajı yoktur.skipcount

Bu yüzden sadece pvsüslü ilerleme raporu istiyorsanız ya da istemiyorsanız kullanın cat.


Bu yanıtı yazdığınız için teşekkür ederiz! =) Şimdi aralarındaki farkları anlıyorum. Sadece bir soru: pv < /dev/sr0 > image.isoile aynı mı pv /dev/sr0 > image.iso(ikincisi pv'nin manuel sayfalarında bulunur)?

1
@ JBFWP286 Aynı şeyi kopyalarlar, ancak pv /dev/sr0 …dosya adını ilerleme raporlarına dahil edebilirler , ancak pv </dev/sr0yapamazlar.
Gilles 'SO- kötü olmayı bırak'

Başka bir not: (en azından kök olarak GNU cp'de) aygıt düğümünü içeriklerinden ziyade kopyalamaya neden olan cptakma ad olabilir . cp -Rcp
marcelm

2
@ JBFWP286 Aygıt düğümü , çekirdek sürücüleri tarafından sağlanan donanıma veya diğer özel özelliklere eriştiğiniz bir dosyadır. Hemen hemen tüm dosyalar /devcihaz düğümleridir. Örneğin cp -R /dev/sr0 image.isoyapacak image.isoCD sürücüsü, tıpkı erişilir geçtiği bir dosya /dev/sr0yerine birlikte olsun CD'nin içeriğinin kopyasını içeren normal bir dosyanın, cp /dev/sr0 image.iso.
Gilles 'SO- kötü olmayı bırak

1
@Hashim Daha iyi bir performansa sahip olduğu sonucuna varmıyorum . Bazen daha iyi bir performansa sahip olduğundan bahsediyorum . Yaptığım bir ölçütle bağlantı kurdum - en iyi durumda dd, catancak hafif bir farkla.
Gilles 'SO- kötü olmayı bırak'

4

Bu durumda ilginç gerçekler var, özellikle bunlar:

  • Az önce aldığım ve sağladığım çıktıyı kontrol ettim (bu sefer başka bir disk kullandım, tam olarak Xubuntu 15.04 x64 kurulum diski) ve her iki prosedürle ( ddve pv) sağlama toplamları aynı .
  • ddProsedürü yaptıktan sonra sürücüyü açıp aynı diskle kapatmayı ve ardından pvprosedürü testle bitirmeyi düşündüm . Sadece bunu yaptığımda, her iki prosedürle de aynı kopyaları aldım.
  • Ben düşünüyorum böylece sağlama gibi diğer işlemler vardı - nedense, CD / DVD sürücüden toplanan verilerin (bir cache gibi) bir süre başka amaçlar için "kaydedildi" gibi görünüyor, çünkü farklı sağlamaları ilk seferden transferden çok daha hızlı yaptı. Bunun kesin nedenini biliyorsanız lütfen yorum yapın.
  • Başka bir gerçek, ddw / o count=Xparametresinin diskin sonunda doğru bir şekilde durması ve pv(checksum'lar aynı) ile aynı disk görüntüsünü vermesidir , bu yüzden ddw / o parametrelerini kullanmam daha iyidir pv.

Yani, şimdilik, aynı sonuçlarla bir CD / DVD kopyasını başarıyor pvve ddbaşarabiliyor.

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.