Изменяет ли команда cp файловую структуру?

Я довольно новичок в Linux и дистрибутиве Debian, поэтому, пожалуйста, не избивайте меня слишком плохо. Мои мысли заключаются в том, что когда вы используете команду cp для копирования файлов с диска на диск, это никак не изменяет структуру файла. Это правда? Я знаю, что опция сохранения будет содержать разрешения, временную метку и т. Д., Но процесс cp изменяет внутреннюю структуру файла или может каким-либо образом испортить файлы? Заранее спасибо.

Да, cp может изменить структуру в файловой системе, но обычно это не должно быть замечено программами, поэтому файлы никогда не должны быть повреждены. Это происходит с разреженными файлами: файлы с отверстием внутри, поэтому, чтобы не занимать слишком много места, файловая система не сохраняет содержимое части отверстия .

cp имеет параметр --sparse :

По умолчанию разреженные файлы SOURCE обнаруживаются грубой эвристикой, и соответствующий файл DEST также разрежен. Это поведение выбрано параметром --sparse=auto . Укажите --sparse=always чтобы создать разреженный файл DEST, если файл SOURCE содержит достаточно длинную последовательность нулевых байтов. Используйте --sparse=never препятствовать созданию разреженных файлов.

Примечание: если жесткий диск назначения поврежден, cp может создавать поврежденные файлы, но никогда специально.

Нет. Если есть проблема с подключением к одному из дисков, существует вероятность того, что во время копирования может произойти повреждение, но сама команда cp не приведет к повреждению. Вы упомянули разрешения и временные метки; они не хранятся в самом файле, а скорее в метаданных. Команда cp может (и часто делает) изменять метаданные.

cp никогда не будет преднамеренно повреждать файлы, но, конечно, возможно, что что-то пойдет не так. Для общего использования у вас не будет проблемы с cp для копирования файлов.

Если вы хотите быть уверенным в целостности скопированного файла, вы должны проверить хэш файла после его копирования или использовать инструмент с этой встроенной функциональностью (например, rsync --checksum ).

«Структура файла» не является четкой концепцией. Но для разумного значения выражения cp не «сохраняет» и не «изменяет» файловую структуру, а копирует ее. Копия будет идентична оригиналу в том виде, который cp знает для сохранения. Как минимум, это означает одно и то же содержимое файла и некоторые идентичные метаданные (разрешения, имена и типы файлов в рекурсивной копии, большинство других метаданных, таких как временные метки с -p и т. Д.). Большинство реализаций cp не воспроизводят внутреннюю структуру сжатых файлов, таких как разреженные файлы. И cp не сохранит макет файла (способ, которым блоки, составляющие файл, организованы на диске) – это было бы невозможно в одной и той же файловой системе и не имело бы смысла в разных файловых системах. Это не «повреждает» данные, поскольку содержимое файла сохраняется: вы получаете одни и те же данные, но, возможно, хранятся по-разному.