Проводит ли dd какую-либо проверку?

Проводит ли dd какую-либо проверку?

Я использую 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. После завершения запустите ручную проверку .

Связанный контент