Недавно я настроил компьютер с Ubuntu Server для размещения игровых серверов. Я установил плагин резервного копирования для каждого игрового сервера, который создает частые резервные копии файлов игрового мира в определенной папке на компьютере. Я также создал задачу cron
для автоматического копирования этих резервных копий в папку Dropbox каждую ночь, используя rsync с опцией -a
.
Через несколько месяцев моя учетная запись Dropbox достигла лимита хранилища, и я понял, что не смогу хранить столько резервных копий, поэтому я настроил плагин резервного копирования игрового сервера так, чтобы он не сохранял так много резервных копий, затем подождал несколько дней, чтобы увидеть если он будет удалять старые резервные копии, как это планируется делать еженедельно. Плагин резервного копирования в конце концов выполнил свою работу и удалил старые резервные копии, поэтому я ожидал, что задача cron rsync
впоследствии удалит более старые резервные копии из моей папки Dropbox, чтобы они соответствовали исходной папке, но этого не произошло. Итак, у меня есть пара вопросов:
По умолчанию rsync
только добавляет файлы в папку назначения, которые были добавлены в исходную папку и измените файлы, которые были изменены в исходной папке, но НЕ удалите файлы, которые были удалены из исходной папки ?
Если это так, каков наилучший способ заставить rsync
сделать это? Я хочу, чтобы папка назначения полностью отражала исходную папку, а это означает удаление любых файлов, которые были удалены из исходной папки.
Я вижу некоторые варианты, перечисленные на странице руководства для rsync
, которые могут помочь, но так как я не знаком с.
привычка команды rsync удаляет любой файл при использовании некоторых его опций delete
в той команде. Таким образом, если какой-либо файл или папка, добавленная в источнике, это будет синхронизироваться для предназначения без какого-либо удаления.
я предлагаю, чтобы Вы для использования rsync
для сделали резервное копирование из исходных файлов и использовали find ... rm
для файлов удаления в течение промежутка времени или размера файлов:
rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;
вышеупомянутый блок кода, сделайте резервное копирование из источника и затем удалите каждый файлы, которые в последний раз изменили время, являются более, чем 2-месячными.
ОБНОВЛЕНИЕ
, Поскольку я нахожу, что эти delete
опции только для ЦЕЛИ, которые, если некоторые файлы удалены из источника, rsync --delete
, удаляют их из ЦЕЛИ. И delete
опция after
и before
, как упомянуто в ее странице справочника:
--delete-before receiver deletes before transfer, not during
Средства, что:
--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 -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup
Для удаления файлов в цели добавьте --delete
опция к команде. Например:
rsync -avh source/ dest/ --delete
Если будут какие-либо ошибки во время 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
.
, Если Вы все еще получаете ошибки после этого и не можете выяснить, как совершить те ошибки, идут путем, можно выполнить команду, которая исключительно выделена удалению несинхронизированных файлов:
sudo rsync -r --delete --existing --ignore-existing --ignore-errors --progress /path/to/source/ /path/to/destination
команда выше удалит материал, который это вне синхронизации, но не будет синхронизировать файлов. Так, необходимо синхронизировать снова после этого. Та команда базируется прочь этого ответ , за исключением того, что я добавил --ignore-errors
аргумент также, таким образом, это удалит, даже если будут ошибки.
Флаг «-delete» должен стоять после ваших / source
и / destination
.
Это примерно так
rsync -rvpthE --progress /Volumes/EOS_DIGITAL/DCIM/ /Users/mitchellg/Desktop/files -delete
Возможные варианты:
-r
рекурсивный -v
подробный (вывод на экран) -p
права доступа -t
время (используйте время вместо контрольных сумм 'c') -h
человекочитаемый -E
расширенная информация (цветные теги на .Mac) Команда
$ rsync -avhn --delete local/ remote/
всегда синхронизирует изменения, сделанные локально, с удаленным. Это означает, что необходимо синхронизировать локальные и удаленные, чтобы
Объяснение параметров:
-a
режим архива -v
увеличить детализацию -h
выводить числа в удобочитаемом формате -n
пробный запуск, выполнить пробный запуск без внесения изменений. Всегда используйте этот флаг изначально, чтобы предотвратить потерю данных. Когда вы счастливы, удалите его. Пусть результаты говорят сами за себя:
Создайте 2 каталога
$ mkdir local/ remote/
Создать в них файлы
$ touch local/local_only remote/remote_only local/exists_locally_and_remotely remote/exists_locally_and_remotely`
Посмотреть, что было создано (до rsync):
$ ls local/ remote/
местный/:
exists_locally_and_remotely local_only
дистанционный пульт/:
существует_локально_и_удаленно удаленно_только
вызов rsync:
$ rsync -avh --delete local/remote/
отправка добавочного списка файлов
удаление remote_only
local_only
отправлено 160 байт получено 50 байт 420,00 байт/сек
общий размер равен 0, ускорение равно 0.00
См. результат (после rsync):
$ ls local/ remote/
местный/:
exists_locally_and_remotely local_only
дистанционный пульт/:
exists_locally_and_remotely local_only
Как видите, файл remote/remote_only был удален, файл local/local_only был синхронизирован.