Недавно я настроил компьютер с Ubuntu Server для размещения игровых серверов. Я установил плагин резервного копирования для каждого игрового сервера, который создает частые резервные копии файлов игрового мира в определенной папке на компьютере. Я также cron
поставил задачу автоматически копировать эти резервные копии в папку Dropbox каждую ночь, используя rsync с этой -a
опцией.
Через несколько месяцев моя учетная запись Dropbox достигла лимита хранилища, и я понял, что не смогу хранить столько резервных копий, поэтому я настроил плагин резервного копирования игрового сервера так, чтобы он не сохранял так много резервных копий, а затем несколько дней ждал, будет ли он удалите старые резервные копии, как это запланировано делать еженедельно. Плагин резервного копирования в конце концов выполнил свою работу и удалил старые резервные копии, поэтому я ожидал, что rsync
задача cron впоследствии удалит более старые резервные копии из моей папки Dropbox, чтобы они соответствовали исходной папке, но этого не произошло. Итак, у меня есть пара вопросов:
По умолчанию добавляются ли в целевую папку
rsync
только те файлы, которые были добавлены в исходную папку, и изменяются файлы, которые были изменены в исходной папке, но НЕ удаляются файлы, которые были удалены из исходной папки?Если это так, каков наилучший способ сделать
rsync
это? Я хочу, чтобы папка назначения полностью отражала исходную папку, а это означает удаление любых файлов, которые были удалены из исходной папки.
Я вижу некоторые варианты, перечисленные на странице руководства, rsync
которые могут помочь, но я не знаком с этим.
source/* dest/
не будет работать.--delete
или--delete-after
оно не будет удалено из-за некоторых ошибок: «Обнаружена ошибка ввода-вывода - пропуск удаления файла». Чтобы разрешить эту--ignore-errors
опцию добавления и отладить ошибки отдельно-n, --dry-run
параметр, прежде чем запускатьrsync
, особенно когда речь идет о параметрах, подобных этим (--delete
). Это позволит избежать любой возможной головной боли :).-a
подразумевает-r
.Команда rsync не удаляет любой файл, пока вы используете некоторые из его параметров
delete
в этой команде. Таким образом, если какой-либо файл или папка добавлены в исходный код, он будет синхронизирован с целевым без удаления.Я предлагаю вам использовать
rsync
для создания резервной копии из исходных файлов и использоватьfind ... rm
для удаления файлов на период времени или размер файлов:Приведенный выше блок кода создает резервную копию из исходного кода, а затем удаляет все файлы, время последнего изменения которых превышает 2 месяца.
ОБНОВИТЬ
Поскольку я считаю, что
delete
параметры предназначены только для TARGET, если некоторые файлы будут удалены из источника,rsync --delete
удалите их из TARGET. Иdelete
опция byafter
иbefore
, как упомянуто на его странице руководства :Значит это:
--delete-after receiver deletes after transfer, not during
Значит это:
ПРИМЕЧАНИЕ :
--delete-{before/after}
навесное оборудование просто в ЗАДАЧЕ.источник
Эта команда скопирует инкрементные данные и синхронизирует их с удаленным сервером.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Пример:
источник
rsync: Failed to exec --delete-before: No such file or directory (2)
Если во время rsync scync возникнут какие-либо ошибки, rsync не удалит файлы должным образом, даже если вы использовали
--delete
,--delete-after
или--delete-before
.Вот почему так важно исправлять ошибки rsync.
Большинство моих ошибок было связано с использованием этой
--perms
опции при синхронизации с файловой системой не-Linux. Когда я заменил--perms
на--no-perms
, эти ошибки ушли, а затем удаление сработало.--perms
Это нормально, когда вы синхронизируете из файловой системы Linux с другой файловой системой Linux, но если вы синхронизируете из Linux с файловой системой не-Linux (например, NTFS, FAT), это--perms
вызывает ошибки, потому что rsync не может установить разрешения Linux для не Linux-файловые системы . Опять же, ошибки = нет удаления.- При синхронизации с разделом, отличным от Linux, я использую,
--no-perms
чтобы избежать тех ошибок, которые саботируют--delete
,--delete-after
или--delete-before
.Если после этого вы по-прежнему получаете ошибки и не можете понять, как их исправить, вы можете запустить команду, предназначенную исключительно для удаления несинхронизированных файлов:
Команда выше удалит вещи, которые не синхронизированы, но не синхронизируют файлы. Итак, вы должны синхронизироваться снова после этого. Эта команда основана на этом ответе , за исключением того, что я также добавил
--ignore-errors
аргумент, поэтому он будет удален, даже если есть ошибки.источник