
Я использую dd
для копирования данных со старого жесткого диска на новый. Я хочу быть уверен, что целостность данных защищена.
На этомотвечать, говорит Жиль
Если [dd] успешно завершен, значит резервная копия верна, если только не произошел сбой оборудования…
Что это значит конкретно? dd
Имеет ли это какую-то встроенную проверку?
Если бы я использовал rsync вместо этого, я бы запустил второй проход с --checksum
тем же, чтобы проверить. Оправдана ли такая паранойя?
решение1
dd
или любое другое приложение не имеет «какой-то встроенной проверки» в том смысле, о котором вы, вероятно, думаете: оно не считывает данные с носителя для сравнения с тем, что было записано. Это работа операционной системы.
На самом деле невозможно выполнить проверку чтения вплоть до оборудования из приложения. Это сработает в некоторых сценариях, но в большинстве случаев это ничего не даст. Приложение может прочитать то, что оно только что написалоесли он записывает данные непосредственно на носитель, но это обычно считывает данные из кэша в памяти, что не дает никакой полезной гарантии.пример, который вы приводите, dd
пишет в канал, и в этом случае он не контролирует, что происходит с данными дальше по линии. В вашем примере rsync второй проход rsync --checksum
бессмыслен: теоретически он может поймать ошибку, но на практике, если ошибка действительно произойдет, то второй проход, вероятно, не сообщит ни о чем неправильном, так что вы тратите усилия на то, что на самом деле не дает полезной гарантии.
Однако приложенияделатьпроверяют, что происходит с данными, в том смысле, что они проверяют, что операционная система приняла на себя ответственность за данные. Все системные вызовы возвращают статус ошибки. Если системный вызов возвращает статус ошибки, приложение должно передать эту ошибку пользователю, как правило, отображая сообщение об ошибке и возвращая ненулевой статус выхода.
Имейте в виду, что dd
это исключение: в зависимости от параметров командной строки,dd
может игнорировать некоторые ошибки. Это крайне необычно: dd
единственная общая команда с этим свойством. Используйте cat
вместо dd
, таким образом вы не рискуете повредить иэто может быть быстрее.
В цепочке копирования данных могут возникнуть два вида ошибок.
- Повреждение: бит переворачивается во время передачи. Нет способа проверить это на уровне приложения, потому что если это происходит, то это происходит из-за ошибки программирования или аппаратной ошибки, которая с большой вероятностью вызовет то же самое повреждение при обратном чтении. Единственный полезный способ убедиться, что такого повреждения не произошло, — это физически отключить носитель и повторить попытку, желательно на другом компьютере, если проблема была в оперативной памяти.
- Усечение: все данные, которые были скопированы, были скопированы правильно, но некоторые данные не были скопированы вообще. Этотявляетсяиногда стоит проверять, в зависимости от сложности команды. Вам не нужно читать данные, чтобы сделать это: просто проверьте размер.
решение2
Нет, dd
не выполняет явную проверку. Если вы хотите/нуждаетесь в криминалистически проверенной копии вашего диска или любой его части, используйте , dcfldd
которая является улучшенной версией, dd
разработанной Лабораторией компьютерной криминалистики Министерства обороны США.
решение3
Единственный способ быть «уверенным» — выполнить дополнительный проход чтения и сравнения (после удаления кэшей).
Помимо этого, dd
обнаруживает ошибки чтения и записи так же, как и все другие программы... это работает, если диски (и другие задействованные компоненты) сообщают об ошибках; если же диски принимают данные молча, не записывая их, то вам не повезло.
Оправдана ли такая паранойя?
Если вы не уверены в надежности своего оборудования, все усложняется...
решение4
От man dd
:
По завершении dd выводит на стандартный вывод ошибок количество полных и частичных входных и выходных блоков, усеченных входных записей и блоков перестановки байтов нечетной длины.
Частичный входной блок — это тот, где было прочитано меньше, чем размер входного блока. Частичный выходной блок — это тот, где было записано меньше, чем размер выходного блока. Частичные выходные блоки на ленточные устройства считаются фатальными ошибками. В противном случае будет записана остальная часть блока. Частичные выходные блоки на символьные устройства приведут к появлению предупреждающего сообщения.
dd
проверяет соответствие размеров входных/выходных блоков каждый раз при копировании блока. Если они не совпадают, он обрабатывает ошибку предупреждением или фатальной ошибкой (переопределяется с помощью noerror
). Вот почему dd
работает практически всегда.
Но это не заменяет ручную проверку целостности вашего диска. Если информация для вас ценна, то да,твоя паранойя оправданаdd
. После завершения запустите ручную проверку .