3

У меня есть два жестких диска с данными на моем сервере Linux, и я использую второй в качестве резервной копии для первого диска.
Я использую rsync для этой цели. Примером может быть:

rsync -r -v --delete /media/disk1/ /media/disk2/

Это делает то, что он копирует каждый файл / каталог из / media / disk1 / в / media / disk2 /, но также удаляет любую разницу. Например, предположим, что файлы A и B, но не файл C, находятся на диске 1, а на диске 2 нет файлов A и B, но есть C. В результате после команды на диске 2 у меня будут файлы A и B, но файл C будет удален, как и на disk1.

Теперь, довольно катастрофический сценарий пришел мне в голову; Что если диск1 умирает, система продолжает работать, так как системные файлы находятся на моем системном диске, но когда rsync пытается сделать резервную копию моих данных на диске2 со сломанного диска 1, он удаляет все файлы с диска 2, потому что он не может ничего прочитать на диске 1.

Это возможный сценарий или есть защита от его сборки в rsync?

2 ответа2

3

Реально, в этом случае ядро взбесится, и вы получите кучу ошибок дискового ввода-вывода, прежде чем rsync что-нибудь удалит. Но тогда, если вы перезагрузитесь, возможно, что /media /disk1 будет пустым и размонтированным ... Так...

В вашем скрипте rsync просто убедитесь, что вы не запускаете rsync, если в /media /disk1 нет файлов. Простой способ сделать это будет:

ls /media/disk1/SomeFileYouKnowExists || exit
rsync ....

Это приведет к завершению работы сценария перед запуском rsync в случае, если целевой файл не существует.

2

Из руководства по rsync:

Если отправляющая сторона обнаружит какие-либо ошибки ввода / вывода, то удаление любых файлов в месте назначения будет автоматически отключено. Это сделано для того, чтобы предотвратить временные сбои файловой системы (например, ошибки NFS) на отправляющей стороне, которые могут привести к массовому удалению файлов в месте назначения. Вы можете переопределить это с опцией --ignore-errors.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .