dd
или любое другое приложение не имеет «какой-то встроенной проверки» в том смысле, о котором вы, вероятно, думаете: оно не считывает данные с носителя данных для сравнения с тем, что было написано. Это работа операционной системы.
На самом деле невозможно выполнить проверку на чтение оборудования из приложения. Это будет работать в некоторых сценариях, но в большинстве случаев это ничего не даст. Приложение может прочитать то, что оно только что написало, если оно пишет непосредственно на носитель , но это, как правило, считывает обратно из кеша в памяти, что не даст никакой полезной уверенности. В этом примере вы процитировать , dd
пишет в трубу, и в этом случае он не имеет никакого контроля над тем, что происходит с данными далее вниз по линии. В вашем примере rsync, второй проходrsync --checksum
Это бессмысленно: теоретически это может привести к ошибке, но на практике, если ошибка действительно случится, то второй проход, вероятно, не сообщит ничего плохого, поэтому вы тратите усилия на то, что на самом деле не дает полезной уверенности.
Тем не менее, приложения действительно проверить , что происходит с данными, в том смысле , что они проверяют , что операционная система взяла на себя ответственность за данные. Все системные вызовы возвращают статус ошибки. Если системный вызов возвращает статус ошибки, приложение должно распространить эту ошибку пользователю, как правило, отображая сообщение об ошибке и возвращая ненулевой статус выхода.
Остерегайтесь, dd
это исключение: в зависимости от параметров командной строки dd
может игнорировать некоторые ошибки . Это крайне необычно: dd
это единственная общая команда с этим свойством. Используйте cat
вместо этого dd
, таким образом, вы не рискуете коррупцией, и это может быть быстрее .
В цепочке копирования данных могут возникнуть два вида ошибок.
- Коррупция: немного переворачивается во время передачи. Невозможно проверить это на уровне приложения, потому что, если это произойдет, это происходит из-за программной ошибки или аппаратной ошибки, которая с большой вероятностью может вызвать такое же повреждение при чтении. Единственный полезный способ убедиться, что такого повреждения не произошло, - это физически отключить носитель и повторить попытку, желательно на другом компьютере, если проблема связана с ОЗУ.
- Усечение: все скопированные данные были скопированы правильно, но некоторые данные не были скопированы вообще. Это один является проверка стоит иногда, в зависимости от сложности команды. Вам не нужно читать данные, чтобы сделать это: просто проверьте размер.