Задний план
Я копирую некоторые CD / DVD-диски с данными в файлы ISO, чтобы использовать их позже без необходимости их в приводе.
Я смотрю в сети на процедуры, и я нашел много:
Использование
cat
для копирования носителя: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.htmlcat /dev/sr0 > image.iso
Использование
dd
для этого (по-видимому, наиболее широко используется): http://www.linuxjournal.com/content/archiving-cds-iso-commandlinedd 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 of dd: 71b676875b0194495060b38f35237c3c
процедура md5 из pv: f3524d81fdeeef962b01e1d86e6acc04
РЕДАКТИРОВАТЬ: Этот вывод был с другого компакт-диска, чем данный вывод. На самом деле, я понял, что есть некоторые интересные факты, которые я привожу в качестве ответа.
На самом деле, размер каждого файла отличается от другого.
Итак, есть ли лучшая процедура для копирования CD / 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
Любая помощь будет оценена!
cmp file1 file2
? Вы использовалиdd
с неправильнымcount=
(или вообще каким-либо подсчетом, который не нужен, если вы хотите все это?). Ошибки чтения в dmesg?dd
команду, которую вы использовали (какой размер блока? Какое количество?), (2) размеры и контрольные суммы все выходы и (3) любую независимую информацию о количестве данных на исходном оптическом диске. ... ... ... ... ... ... PS Почему вы используетеcount=
наdd
? Вы хотите скопировать весь образ диска, не так ли?count=
говорит "скопируйте это много и затем остановитесь".isoinfo -d -i /dev/cdrom
чтобы узнать число и использовать его - фактически, он говорит, что не следует использовать простоdd
. «В любом случае, если вы хотите получить соответствующий ISO-образ этого компакт-диска, вам необходимо получить правильный размер блоков и количество блоков перед созданием образа».Ответы:
Все следующие команды эквивалентны. Они читают байты компакт-диска
/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
так часто упоминаете. Помимо производительности, они не особенно веские причины.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)?pv /dev/sr0 …
могут включать имя файла в отчеты о ходе выполнения, аpv </dev/sr0
не могут.cp
может быть псевдонимcp -R
, который (по крайней мере, в GNU cp как root) вызываетcp
копирование узла устройства, а не его содержимого./dev
являются узлами устройства. Например,cp -R /dev/sr0 image.iso
можно создатьimage.iso
файл, к которому осуществляется доступ к дисководу компакт-дисков/dev/sr0
, вместо обычного файла, содержащего копию содержимого компакт-диска, который вы получаетеcp /dev/sr0 image.iso
.dd
бить ,cat
но только с небольшим отрывом.В этом случае есть интересные факты, особенно такие:
dd
иpv
) контрольные суммы идентичны .dd
процедуры, открыть диск и закрыть его с тем же диском, а затем завершить тест сpv
процедурой. Делая это, я получил идентичные копии с обеими процедурами.dd
безcount=X
конца параметр корректно останавливается в конце диска и дает тот же образ диска, что и сpv
(контрольные суммы идентичны), поэтому для меня лучше использоватьdd
параметры без или простоpv
.Итак, на данный момент, кажется,
pv
иdd
можно сделать копию CD / DVD с теми же результатами.источник