Вопрос или проблема
Прежде чем вы скажете мне об очевидном, я знаю, опция резервного копирования создает резервную копию файла.
Но дело в том, что команда cp
в общем виде создает резервную копию файла. Можно сказать, что копия файла является резервной копией.
Таким образом, мой вопрос таков: что делает опция -b
, чего команда cp
не делает уже?
Страница man cp(1) дает следующее описание опции --backup
:
создает резервную копию каждого существующего файла назначения
Это определение не очень полезно, по сути, оно говорит “опция резервного копирования делает резервную копию”. Это не дает никаких указаний на то, что -b
добавляет к cp
Я знаю, что -b
добавляет суффикс в конец имени нового файла. Но делает ли оно что-то еще? Или на этом все? Является ли резервная копия -b
просто командой cp
, которая добавляет что-то в конец имени файла?
P.S. Обычно вы используете -b
при создании резервных копий в вашей повседневной работе? Или вы просто используете -a
?
Она создает резервную копию каждого файла назначения, который уже существует. Тех, которые иначе были бы перезаписаны и потеряны.
$ mkdir foo; cd foo
$ echo hello > hello.txt
$ echo world > world.txt
$ cp -b hello.txt world.txt
$ ls
hello.txt world.txt~ world.txt
$ cat world.txt
hello
$ cat world.txt~
world
Этот файл world.txt~
является созданной резервной копией. Если вы внимательно посмотрите, вы увидите, что резервная копия — это фактически исходный файл, просто переименованный. (т.е. номер inode остается тем же, и такие параметры, как права доступа к файлу, тоже остаются прежними.)
Из той же (GNU coreutils) страницы man cp:
--backup[=CONTROL]
создает резервную копию каждого существующего файла назначения
Таким образом, естественно, мы ищем определение CONTROL
в этом документе:
Суффикс резервной копии — '~', если он не установлен с помощью --suffix или SIMPLE_BACKUP_SUFFIX. Метод управления версиями может быть выбран через параметр --backup или переменную окружения VERSION_CONTROL. Вот возможные значения:
none, off
никогда не создавать резервные копии (даже если указан --backup)
numbered, t
создавать нумерованные резервные копии
existing, nil
нумерованные, если существует нумерованная резервная копия, в противном случае простые
simple, never
всегда создавать простые резервные копии
Но делает ли оно что-то еще?
нет.
P.S. Обычно вы используете -b при создании резервных копий в вашей повседневной работе? Или вы просто используете -a?
Хм. -b
звучит как плохое решение для фактического резервного копирования данных. Оно больше для предотвращения повреждения данных в ситуациях, не связанных с резервным копированием. Поэтому, нет, я никогда не использовал -b
.
Для резервного копирования все зависит от контекста, но для личных/малых файловых систем снимки файловой системы (либо с помощью ZFS, либо с использованием тонкого уровня LVM внизу) работают очень хорошо. Для резервного копирования за пределами устройства в основном используется rsync
для полных резервных копий. Для случаев, когда требуется инкрементальное резервное копирование вне диска, duplicity
вполне подойдет.
.
Ответ или решение
Опция командной строки -b
(–backup) в утилите cp
предоставляет возможность создания резервной копии существующих файлов назначения до их перезаписи. Хотя на первый взгляд может показаться, что выполнение команды cp
само по себе является способом создания резервной копии, различия между простым копированием и использованием этой специальной опции заключаются в деталях реализации и намерениях пользователя, что мы и рассмотрим более подробно.
Теория: Назначение и варианты использования --backup
Команда cp
, как известно, используется для копирования файлов и директорий из одного места в другое. Однако, когда копируемый файл совпадает с уже существующим файлом в целевом каталоге, без специальных параметров cp
просто перезаписывает существующий файл. Опция -b
изменяет это поведение: она сохраняет оригинальную версию файла прежде, чем она будет перезаписана, и делает это путем создания резервной копии.
--backup
использует различные шаблоны резервного копирования в зависимости от установленных настроек. Управление этими поведениями осуществляется через дополнительный параметр CONTROL
, который может принимать разные значения:
none
илиoff
: резервные копии не создаются, даже если указана опция--backup
.numbered
илиt
: создаются пронумерованные резервные копии.existing
илиnil
: создаются пронумерованные резервные копии, только если уже существуют такие файлы; в противном случае создаются простые резервные копии.simple
илиnever
: создается простая резервная копия, которая обычно имеет суффикс~
.
Пример использования: Демонстрация и визуализация
Рассмотрим следующую демонстрацию, которая поясняет работу -b
:
$ mkdir demo; cd demo
$ echo "старое содержимое" > file.txt
$ echo "новое содержимое" > новый_файл.txt
$ cp -b новый_файл.txt file.txt
$ ls
file.txt file.txt~ новый_файл.txt
$ cat file.txt
новое содержимое
$ cat file.txt~
старое содержимое
В этом примере файлы с одноименными именами уже существовали в целевом каталоге. Использование команды cp -b
привело к созданию резервной копии файла file.txt
, сохранив его оригинальное содержимое в файле file.txt~
, прежде чем его содержимое было заменено новый_файл.txt
.
Применение: Практическое использование
Основная цель -b
заключается в предотвращении потери данных в процессе выполнения операций копирования. Это наиболее полезно в сценариях, где безопасность данных имеет критическую значимость, и пользователю необходимо сохранить оригинальные версии файлов для последующего восстанавления или проверки.
Однако в рамках ежедневной работы ИТ-специалистов или администраторов систем эта опция может не обладать высоким приоритетом для полноценного резервного копирования. Например, для более эффективных и масштабируемых решений резервного копирования обычно используются технологии, такие как файловые моментальные снимки или специализированные утилиты (например, rsync
для синхронизации данных и duplicity
для инкрементальных резервных копий). Эти инструменты позволяют не только сохранить резервные копии, но и обеспечить их учет и организацию на уровне системы и в сети.
Таким образом, -b
в основном служит для временного и быстрого предотвращения утраты данных в определенных случаях и не является заменой для полноценных решений для резервного копирования.