
Мой друг пытается клонировать CF-карту с помощью следующей команды Linux:
sudo dd if=/dev/sdb of=card3.img bs=4M status=progress
но каждый раз он выдает другой образ. Первые две карты, которые они отобразили, дали противоречивые результаты. В чем может быть причина этого?
решение1
Даже простое монтирование с доступом на запись (rw) может приводить к записи данных, в файловых системах ext обновляются как минимум следующие атрибуты:
- Последний раз устанавливался на
- Количество горений
- Время последнего монтирования
- И возможное время доступа к файлам, которое обновляется, когда файлы просто читаются (монтирование
noatime
должно их останавливать). - И атрибут «Время последней записи», если запись происходит)
На самом деле, монтажбездоступ на запись (с использованием монтирования
-r
/-o ro
) может по-прежнему записывать данные на устройство, см. man mount:-r, --только для чтения
Монтировать файловую систему только для чтения. Синоним -o ro.
Обратите внимание, что в зависимости от типа файловой системы, состояния и поведения ядра системаможет по-прежнему записывать данные на устройство. Например, ext3 и ext4 будут воспроизводить журнал, если файловая система грязная. Чтобы предотвратить такой доступ к записи, вы можете захотеть смонтировать файловую систему ext3 или ext4 сро,без нагрузкипараметры монтирования или установка самого блочного устройства в режим только для чтения, см.
blockdev
команду (8).И
blockdev
имеет--setro
команду, чтобы установить блочное устройство как доступное только для чтения
Вы можете сравнить изображения и увидеть, какие байты отличаются, с помощью cmp
или что-то вроде vbindiff
. Только несколько байтов могут быть датой или количеством где-то (я не уверен, хранятся ли атрибуты как простой текст или как-то закодированы).
Или только для чтения смонтируйте два (или более) образа и сравните только файлы. Plain diff
может сравнивать деревья каталогов, но я предпочитаю gui, например kdiff3
. Если единственное различие заключается в количестве монтирований или времени последнего монтирования, оно не отобразится в файлах (разное время доступа к файлам, вероятно, тоже не отобразится).
Или, может быть, устройство, оперативная память или что-то еще выходит из строя и считывает разные байты здесь и там.
Вы также можете оставить устройство отключенным, создать образ, затем отключить и снова подключить устройство (все еще отключенное), создать еще один образ и сравнить — они должны быть одинаковыми.