Друг пытается клонировать CF-карту с помощью следующей команды linux:

sudo dd if=/dev/sdb of=card3.img bs=4M status=progress

но каждый раз он производит другое изображение. Первые две карты, которые они изобразили, дали противоречивые результаты. Что может быть причиной этого?

1 ответ1

2

Простое монтирование с правами записи (rw) может означать запись, в файловых системах ext есть по крайней мере следующие атрибуты, которые обновляются:

  • Последний установлен на
  • Количество гор
  • Время последнего монтирования
  • И возможные времена доступа к файлам, которые обновляются, когда файлы только читаются (noatime монтирования должен остановить их).
  • И атрибут "Время последней записи", если запись происходит)

На самом деле, монтирование без доступа для записи (с использованием команды mount -r / -o ro) может по-прежнему выполнять запись на устройство, см. Man mount:

-r, - только для чтения

Смонтируйте файловую систему только для чтения. Синоним -o ro.

Обратите внимание, что в зависимости от типа файловой системы, состояния и поведения ядра, система все еще может выполнять запись на устройство. Например, ext3 и ext4 будут воспроизводить журнал, если файловая система загрязнена. Чтобы предотвратить такой доступ для записи, вы можете смонтировать файловую систему ext3 или ext4 с параметрами монтирования ro, noload или установить для самого блочного устройства режим только для чтения, см. blockdev (8).

И blockdev имеет команду --setro , чтобы установить блочное устройство только для чтения

Вы можете сравнить изображения и увидеть, какие байты отличаются, с помощью cmp или чего-то вроде vbindiff . Только несколько байтов могут быть где-то датой или счетчиком (я не уверен, хранятся ли атрибуты в виде простого текста или как-то закодированы).

Или смонтируйте два (или более) изображения только для чтения и сравните только файлы. Обычный diff может сравнивать деревья каталогов, но я предпочитаю графический интерфейс типа kdiff3 . Если единственное различие заключается в количестве монтирования или времени последнего монтирования, оно не будет отображаться в файлах (возможно, разное время доступа к файлу также не будет отображаться).

Или, может быть, устройство или ваш оперативный памяти или что-то еще идет плохо и читает разные байты здесь и там.

Вы также можете оставить устройство отключенным, создать изображение, затем отключить и снова подключить устройство (все еще не подключенное) и создать другое изображение, а затем сравнить, они должны быть одинаковыми.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .