
Я сделал очень простой скрипт резервного копирования rsync
, который копирует некоторые папки на USB-накопитель. Это просто для быстрого ежедневного резервного копирования.
Команда:
rsync -av --delete
далее следуют --exclude
опции и пути.
Но теперь мне пришло в голову, что это, возможно, небезопасно:
Что произойдет, если мой жесткий диск будет поврежден, и некоторые файлы больше не будут считываться? Удалит ли rsync
файлы на флешке, если не сможет прочитать источник?
Или, в более общем плане: Есть ли какой-либо сценарий, кроме "я удаляю файлы на жестком диске", который приведет к удалению файлов на USB-флешке?
решение1
Прежде всего, --delete
опция может привести к некоторым нежелательным разрушительным результатам, если вы не знаете предысторию. Например, если источник становится пустым, то все существующие файлы в месте назначения будут удалены, или если некоторые файлы удалены из источника, то эти файлы также будут удалены из места назначения.
Что произойдет, если мой жесткий диск будет поврежден и некоторые файлы больше не будут считываться?
Если rsync
не удается прочитать источник, он покажет сообщение об отказе в доступе и не будет ничего делать дальше. Поэтому ваши существующие файлы в месте назначения будут в безопасности.
Есть ли какой-либо сценарий, кроме «я удаляю файлы на жестком диске», который приведет к удалению файлов на USB-накопителе?
Если только сам USB-накопитель не будет поврежден, нет, не существует сценария, при котором (вы не удалите файлы из источника, жесткого диска и т. д.) существующие файлы на USB-накопителе будут удалены с помощью rsync
опции --delete
.
Тест:
% ls -1 source dest
dest:
source:
foo
% rsync -av --delete source/ dest
sending incremental file list
./
foo
sent 143 bytes received 38 bytes 362.00 bytes/sec
total size is 16 speedup is 0.09
% ls -1 source dest
dest:
foo
source:
foo
% chmod 000 source
% rsync -av --delete source/ dest
sending incremental file list
rsync: change_dir "/source" failed: Permission denied (13)
sent 20 bytes received 12 bytes 64.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]
% ls -1 source dest
dest:
foo
ls: cannot open directory source: Permission denied
решение2
Простым решением проблем с повреждением и удалением является использование надлежащей процедуры резервного копирования. Поменяйте местами три (или более) USB-флешки, используя самую старую «резервную» в качестве подключенной флешки, когда вы запускаете эту команду раз в неделю. Таким образом, если вы обнаружите повреждение до того, как начнете циклически переключать USB-диски, вы сможете восстановить его. Это известно как FIFO (First In, First Out).
Существуют и другие, более сложные схемы, все из которых совместимы с вашим методом резервного копирования. Учебник по некоторым из них доступен в Википедии по следующей ссылке:
https://en.wikipedia.org/wiki/Backup_rotation_scheme