Так что же происходит, когда добавление conv=sync,noerror
имеет значение при резервном копировании всего жесткого диска в файл образа? Требуется ли conv=sync,noerror
при выполнении судебных дел? Если да, то почему это так со ссылкой на linux fedora?
Редактировать:
Хорошо, поэтому, если я делаю dd без conv=sync,noerror
, и dd
сталкиваюсь с ошибкой чтения при чтении блока (например, размером 100M), dd просто пропускает блок 100M и читает следующий блок без записи чего-либо ( dd conv=sync,noerror
записывает нули в 100M вывода - так что насчет этого случая ?)?
И если хеш оригинального жесткого диска и выходного файла отличается, если сделано без conv=sync,noerror
? Или это только когда произошла ошибка чтения?
Ответы:
conv=sync
приказываетdd
заполнить каждый блок слева нулями, так что если из-за ошибки не удается прочитать полный блок, сохраняется полная длина исходных данных, даже если не все данные могут быть включены в изображение , таким образом, вы, по крайней мере, знаете, насколько повреждены данные, что может дать вам криминалистические подсказки, и если вы вообще не можете сделать снимок из-за плохих блоков или чего-то еще, вы не можете анализировать любые данные. некоторые лучше, чем ничего.conv=sync,noerror
необходимо предотвратитьdd
остановку при ошибке и выполнение дампа.conv=sync
в значительной степени бессмысленно без ошибок.http://linuxcommand.org/man_pages/dd1.html
http://vlinux-freak.blogspot.com/2011/01/how-to-use-dd-command.html
источник
dd conv=sync,noerror
(илиconv=noerror,sync
) портит ваши данные.В зависимости от обнаруженной ошибки ввода-вывода и используемого размера блока (больше, чем размер физического сектора?), Входные и выходные адреса фактически не синхронизируются, а заканчиваются неправильными смещениями, что делает копию бесполезной для образов файловой системы и других вещи, где смещения имеют значение.
Многие места рекомендуют использовать
conv=noerror,sync
при работе с плохими дисками. Я сам делал такую же рекомендацию. Это сработало для меня, когда я должен был восстановить плохой диск некоторое время назад.Тем не менее, тестирование показывает, что это не совсем надежно.
Используйте
losetup
иdmsetup
для созданияA error B
устройства:Устройства петли A, B выглядят так:
Так что это A, B с увеличивающимися числами, которые помогут нам проверить смещения позже.
Теперь, чтобы отобразить ошибку чтения, любезно предоставлено устройством отображения Linux:
Этот пример создает
AerrorB
как в2000
секторахA
, за которыми следуют2*48
сектора ошибок, а затем в2000
секторахB
.Просто чтобы проверить:
Таким образом, он читает до
A127999\n
, так как каждая строка имеет 8 байтов, которые составляют 1024000 байтов, что является нашими 2000 секторами из 512 байтов. Кажется, все в порядке ...Это будет смешать?
Полученные результаты:
По размерам файлов вы можете сказать, что для некоторых размеров блоков все не так.
Контрольные суммы:
dd
согласуетсяddrescue
только с размерами блоков, которые оказываются выровненными по нашей зоне ошибки (512
,4K
).Давайте проверим необработанные данные.
Хотя сами данные, кажется, присутствуют, они, очевидно, не синхронизированы; смещения полностью отклонены для bs = 16K, 1M, 42,64K ... только те со смещением
2088576
являются правильными, что может быть проверено на оригинальном устройстве.Это ожидаемое поведение
dd conv=noerror,sync
? Я не знаю, и две реализации, которые уdd
меня были, даже не согласны друг с другом. Результат будет очень бесполезным, если вы используетеdd
с производительным выбором размера блока.Выше была произведена с использованием
dd (coreutils) 8.25
,BusyBox v1.24.2
,GNU ddrescue 1.21
.источник
ddrescue
вместоdd
при работе с дисками с поврежденными секторами?sync
аргумент говорит это , чтобы выходной сигнал нужной длины. Это не работает, если вы используете неправильный размер блока, так что просто не делайте этого.iflag=fullblock
похоже, чтобы спасти это. Хотяmd5sum
s изображений, созданных с помощью, по-iflag=fullblock
прежнему различаются (конечно! Потому что количество байтов, которые были пропущены из-за ошибки чтения, различаются - т.е. количества\0
s в изображениях различаются), но выравнивание сохраняется сiflag=fullblock
:grep -a -b --only-matching B130000
возвращает2088576
для всех изображений.