Чи краще використовувати cat, dd, pv або іншу процедуру для копіювання CD / DVD?


22

Фон

Я копіюю деякі компакт-диски / DVD-файли з даних у файли ISO, щоб потім їх використовувати без необхідності їх на диску.

Я шукаю в Мережі процедури і знайшов багато:

  • Використання catдля копіювання носія: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • Використання ddдля цього (мабуть, найбільш широко використовується): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • Використання просто pvдля цього: див. Для man pvотримання додаткової інформації, хоча ось уривок із цього:

    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
    

Я не знаю , якщо всі вони повинні бути еквівалентні, хоча я тестував деякі з них ( з допомогою md5sumінструменту) і, по крайней мере, ddі pvце НЕ еквівалентні. Ось md5sumяк диск, так і згенеровані файли, використовуючи кожну процедуру:

md5 процедури DD: 71b676875b0194495060b38f35237c3c

md5 з ПВ процедури: f3524d81fdeeef962b01e1d86e6acc04

EDIT: Цей вихід був з іншого компакт-диска, ніж даний вихід. Насправді я зрозумів, що є кілька цікавих фактів, які я надаю як відповідь.

Насправді розмір кожного файлу відрізняється порівняно один з одним.

Отже, чи є найкраща процедура копіювання компакт-диска / DVD чи я просто використовую команди неправильно?


Більше інформації про ситуацію

Ось додаткова інформація про тестовий випадок, який я використовую для перевірки досі знайдених процедур:

isoinfo -d i /dev/sr0 Вихід: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddскопіювати носій інформації з вихідними контрольними сумами та інформацією про файл Вихід: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pv для копіювання носія, з вихідними контрольними сумами та інформацією про файл Вихід: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

Будь-яка допомога буде вдячна!

linux  dd  cat  disk-image  pv 

чи однакові розміри файлів? результат cmp file1 file2? ви використовували ddнеправильно count=(чи насправді будь-яка кількість рахунків, яка не потрібна, якщо ви хочете всю справу?). Читання помилок у dmesg?
frostschutz

2
Само собою зрозуміло, що файли різного розміру (з 99.9999999999 +% вірогідністю) матимуть різні контрольні суми. Поки ви робили тести, було б добре, якщо ви опублікували всі результати, включивши (1) точну ddкоманду, яку ви використовували (що блокує розмір? Що рахуєте?), (2) розміри та контрольні суми всі виходи та (3) будь-яку незалежну інформацію, яку ви маєте, щодо кількості даних на оптичному диску джерела. ... ... ... ... ... ... PS Чому ви використовуєте count=на dd? Ви хочете скопіювати все зображення диска, чи не так?  count=каже "скопіюйте це багато, а потім зупиніться".
Скотт

@Scott На цій сторінці linuxjournal.com/content/archiving-cds-iso-commandline автор говорить, що треба isoinfo -d -i /dev/cdromзнати, щоб знати число підрахунків, і використовувати його - адже він каже, що не слід використовувати просто dd. "У будь-якому випадку, якщо ви хочете отримати відповідний ISO образ цього компакт-диска, вам потрібно правильно встановити розмір блоку та кількість блоків, перш ніж створювати зображення."

@frostschutz У першому випадку розміри не були однаковими, але дивно, я спробував ще раз і отримав різні результати. Дивіться відповідь, яку я надав для отримання більш детальної інформації.

Відповіді:


27

Усі наступні команди є рівнозначними. Вони читають байти CD /dev/sr0і записують їх у файл, який називається 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

Навіщо ти використовувати одне над іншим?

  • Простота. Наприклад, якщо ви вже знаєте, catабо cpвам не потрібно вивчати ще одну команду.

  • Міцність. Це трохи варіант простоти. Скільки існує ризику, що зміна команди змінить те, що вона робить? Давайте подивимось кілька прикладів:

    • Що-небудь із перенаправленням: ви можете випадково поставити перенаправлення неправильно, або забути його. Оскільки місце призначення повинно бути неіснуючим файлом, set -o noclobberслід переконатися, що ви нічого не перезаписуєте; однак ви можете перезаписати пристрій, якщо випадково пишете >/dev/sda(для компакт-диска, який є лише для читання, звичайно, немає ніякого ризику). Це говорить на користь cat /dev/sr0 >image.iso(важко помилитися згубно) над такими альтернативами, як tee </dev/sr0 >image.iso(якщо ви перевернете перенаправлення або забудете вхідний, teeнапишіть /dev/sr0).
    • cat: Ви можете випадково об'єднати два файли. Це дозволяє легко отримати дані.
    • dd: iі oблизькі до клавіатури, і дещо незвично. Там немає ніякого еквівалента noclobber, of=щасливо перезапис нічого. Синтаксис перенаправлення менш схильний до помилок.
    • cp: якщо ви випадково обміняєте джерело та ціль, пристрій буде перезаписано (знову ж таки, припустимо, що це не лише для читання пристрій). Якщо ви cpпосилаєтесь на деякі параметри, такі як -Rабо -aякі деякі люди додають через псевдонім, він скопіює вузол пристрою, а не вміст пристрою.
  • Додаткова функціональність. Один інструмент, який має корисну додаткову функціональність, - це pvйого потужні можливості звітування.
    Але тут ви можете перевірити, скільки було скопійовано, все одно переглянувши розмір вихідного файлу.

  • Продуктивність. Це процес, пов'язаний з входом / виводом; основний вплив на продуктивність має розмір буфера: інструмент зчитує фрагмент з джерела, записує фрагмент до місця призначення, повторюється. Якщо шматок занадто малий, комп'ютер витрачає свій час на перемикання між завданнями. Якщо шматок занадто великий, операції читання і запису не можуть бути паралельними. Оптимальний розмір шматка на ПК, як правило, становить близько декількох мегабайт, але це, очевидно, дуже залежить від операційної системи, обладнання та іншого комп'ютера. Нещодавно я робив орієнтири для копій на жорсткий диск на жорсткому диску в Linux, який показав, що для копій всередині одного диска dd з великим розміром буфера є перевагою, але для копій між дисками, які catвиграли будь-який ddрозмір буфера.

Є кілька причин, чому ви ddтак часто зустрічаєтесь. Крім ефективності, вони не є особливо вагомими причинами.

  • У дуже старих системах Unix деякі засоби обробки тексту не могли впоратися з двійковими даними (вони використовували внутрішньо нульові рядки , тому вони мали проблеми з нульовими байтами; деякі інструменти також припускали, що символи використовували лише 7 біт і не обробити 8-бітові набори символів належним чином). Я не впевнений, що з цим коли-небудь виникали проблеми cat(це було з більш лінійно-орієнтованими інструментами, такими як head,sed і т. Д.), Але люди, як правило, уникають цього на бінарних даних через його зв'язок з обробкою тексту. Це не проблема в сучасних системах, таких як Linux, OSX, * BSD або будь-що, що відповідає POSIX.
  • Існує такий собі міф, який ddдещо «нижчого рівня», ніж інші інструменти, такі як catта безпосередньо отримує доступ до пристроїв. Це абсолютно помилково: ddі catта teeінші всі читають байти зі свого введення і записують байти до їх виводу. Справжня магія в/dev/sr0 .
  • dd має незвичайний синтаксис командного рядка, тому пояснення того, як він працює, дає більше можливостей блищати, пояснюючи щось, що тільки пише cat /dev/sr0 .
  • Використання dd з великим розміром буфера може мати кращі показники, але це не завжди так (див. Деякі орієнтири в Linux ).

Основним ризиком ddє те, що він може мовчки пропустити деякі дані . Я думаю, що ddце безпечно, поки skipабоcount не пройшли , але я не впевнений, чи є ця справа на всіх платформах. Але це не має жодної переваги, крім продуктивності.

Тому просто використовуйте, pvякщо ви хочете його фантастичний звіт про хід розвитку, або catякщо ви цього не зробите.


Велике спасибі за Ваш час написання цієї відповіді! =) Тепер я розумію відмінності між ними. Лише питання: Чи pv < /dev/sr0 > image.isoте саме, що pv /dev/sr0 > image.iso(останнє знайдено на сторінках керівництва pv)?

1
@ JBFWP286 Вони копіюють те саме, але pv /dev/sr0 …можуть включати ім'я файлу у звіти про хід роботи, тоді як pv </dev/sr0не можуть.
Жиль "ТАК - перестань бути злим"

Ще одна примітка: cpможе бути псевдонімом cp -R, що (принаймні, у GNU cp як root) викликає cpкопіювання вузла пристрою, а не його вмісту.
marcelm

2
@ JBFWP286 Вузол пристрою - це файл, через який ви отримуєте доступ до апаратних чи інших спеціальних функцій, що надаються драйверами ядра. Майже всі файли в - /devце вузли пристроїв. Наприклад, cp -R /dev/sr0 image.isoбуло б image.isoзроблено файл, через який можна отримати диск CD, як /dev/sr0і замість звичайного файлу, що містить копію вмісту компакт-диска, який ви отримуєте cp /dev/sr0 image.iso.
Жил "ТАК - перестань бути злим"

1
@Hashim Я не роблю висновок, що він має кращі показники. Я зазначу, що іноді має кращі показники . Я пов’язаний із еталоном, який я зробив - в кращому випадку ddобіграв, catале лише з невеликим відривом.
Жиль "ТАК - перестань бути злим"

4

У цьому випадку є цікаві факти, зокрема такі:

  • Я щойно перевірив отриманий і наданий вихід (я цього разу використовував інший диск, саме диск встановлення Xubuntu 15.04 x64), і обидві процедури ( ddі pv) контрольні суми однакові .
  • У мене виникла ідея, виконавши ddпроцедуру, відкрити диск і закрити його тим же диском, а потім закінчити тестpv процедурою. Роблячи це, я отримав однакові копії з обома процедурами.
  • Я думаю я отримав різні контрольні суми вперше, тому що чомусь дані, зібрані з приводу CD / DVD, здається, "записуються" для інших цілей (наприклад, кеш-пам'ять) - таким чином, інші операції, такі як контрольні суми, були зробили набагато швидше, ніж передача. Будь ласка, коментуйте, якщо ви знаєте точну причину цього.
  • Ще один факт полягає в тому, що ddбез кінця count=Xпараметр правильно зупиняється в кінці диска і надає те саме зображення диска, що і для pv(контрольні суми однакові), тому для мене краще використовувати ddпараметри без або просто pv.

Таким чином, на даний момент, здається , pvі ddможе виконати копію CD / DVD з тими ж результатами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.