Как проверить, была ли ISO записана на мою флешку без ошибок?


11

Я следовал этим инструкциям DebianEeePC HowTo InstallUsingStandardInstaller на вики Debian, чтобы записать ISO- образ Debian на мой USB.

dd if=debian-*-netinst.iso of=/dev/sdX

Используя sha1sum, я могу проверить контрольные суммы моего загруженного файла ISO. Как я могу проверить контрольную сумму USB-накопителя, чтобы убедиться, что USB-накопитель не имеет каких-либо проблем и что ISO-образ был скопирован идеально?


USB является универсальной последовательной шиной. Конечно, вы имеете в виду какое-то устройство, подключенное к этой шине (например, флэш-накопитель, Ethernet или звуковая карта)?
Стефан Шазелас

@StephaneChazelas, отредактировал вопрос.
maxschlepzig

Ответы:


18

Вы можете использовать cmpдля проверки, все ли хорошо скопировано:

$ cmp -n `stat -c '%s' debian-X-netinst.iso` debian-X-netinst.iso /dev/sdX

Это решение явно не вычисляет контрольную сумму вашего /dev/sdX- но вам не нужно делать это, потому что вы уже сделали это для источника сравнения (то есть debian-X-netinst.iso).

Выполнение всего лишь dd if=/dev/sdX | sha1sumможет привести к неправильной контрольной сумме только потому, что вы получаете конечные блоки ( /dev/sdXскорее всего, больше, чем iso-файл).

Посредством cmp -nвы убедитесь, что никакие конечные байты на вашем /dev/sdXне сравниваются.

Если вы не уверены в качестве своего запоминающего устройства USB, которое вы называете sync, извлеките его, вставьте заново, а затем проведите сравнение - в противном случае все или некоторые блоки могут просто исходить из ядра VM (кеш) - когда в действительности, возможно, биты на железе облажались.


1
Привет всем! Когда я делаю это, я получаю мгновенное несоответствие в самой первой строке. В чем может быть причина?
SarpSTA

3

Ответ Жюльена делает свою работу, но есть более простой и быстрый способ сделать это:

sudo head -c <image size> /dev/sdX | sha1sum

Итак, в единственной строке:head -c $(stat -c '%s' the.iso) /dev/sdc | sha1sum
Жюльен Палар

3

Достаточно просто использовать ddи md5sum/ sha1sum, но, как уже было сказано ранее, будьте осторожны, ваше устройство не того же размера, что и ваш файл, поэтому суммы будут отличаться.

Вот как ты еще можешь это сделать

Для начала вам нужно узнать размер файла:

$ stat -c '%s' debian-live-8.2.0-amd64-lxde-desktop.iso
1003487232

Затем, чтобы быть крутым с вашими системными вызовами, вы должны получить это кратное хорошей степени двух, например 4096, умножение двух ДОЛЖНО дать точно такой же размер файла, другими словами, вы будете проверять слишком мало или слишком много байтов, что приводит к неправильной контрольной сумме.

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000

Я счастлив, 4096 × 244992 = 1003487232так что 4096 хорошо для меня (и будет для вас, вероятно), поэтому я могу использовать размер блока 4096(типичный) и количество блоков 244992.

Не забудьте записать файл на USB-ключ ...

$ dd if=debian-live-8.2.0-amd64-lxde-desktop.iso of=/dev/sd? && sync

И знаете, используя известный размер блока и количество блоков, вы можете прочитать точное количество байтов ключа и проверить их:

$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum
b0dbe4ca8f526d1e43555459c538607d4a987184

(Да, md5sumэто намного быстрее, чем это, sha1sumно это явно не ваше узкое место, узкое место - это пропускная способность USB, спасибо, что заметили).

Или, короче говоря:

dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum

Благодаря этому $ dd if=/dev/sdb1 bs=4096 count=<filesize/4096> | md5sum я смог проверить md5sum образа Debian, записанного на флешку, и сравнить его с Debian md5sums.
Поль Ружье

0

Основано на ответе @Kyle Jones

diff <(md5sum debian-XYZ-netinst.iso | awk '{print $1}') <(dd if=/dev/sdX | md5sum | awk '{print $1}')

Вы должны использовать, md5sumпотому что это быстрее, чем sha1sum(это сэкономит время при проверке большого файла)


6
Вы имеете в виду md5sum, по крайней мере, в два раза быстрее? Это должно быть, так как ОП уже есть на sha1sumсайте загрузки и не должен рассчитывать это. И чтение с USB будет ограничивающим фактором, а не вычислением sha1 / md5.
Энтон

1
Я использую ZFS с контрольной суммой SHA-256 в системе среднего уровня с высокой вычислительной мощностью. Даже во время очистки (который считывает все данные и проверяет все контрольные суммы) в пулах, находящихся на вращающейся ржавчине, ограничивающим фактором является пропускная способность дискового ввода-вывода, а не процессор. Я сомневаюсь, что многие USB-накопители будут иметь намного лучшую пропускную способность, особенно если они подключены через USB 2.0.
CVN
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.