Niedawno skonfigurowałem maszynę z Ubuntu Server do obsługi serwerów gier. Zainstalowałem wtyczkę kopii zapasowej dla każdego serwera gry, który tworzy częste kopie zapasowe plików świata gry w określonym folderze na komputerze. Ustanowiłem również cron
zadanie automatycznego kopiowania tych kopii zapasowych do mojego folderu Dropbox co noc przy użyciu rsync z -a
opcją.
Po kilku miesiącach moje konto Dropbox osiągnęło limit miejsca i zdałem sobie sprawę, że nie będę w stanie przechowywać tylu kopii zapasowych, więc skonfigurowałem wtyczkę kopii zapasowej serwera gier, aby nie zachowywała tylu kopii zapasowych, a potem zaczekałem kilka dni, aby sprawdzić, czy usuń starsze kopie zapasowe, tak jak zaplanowano to co tydzień. Wtyczka kopii zapasowej ostatecznie wykonała swoje zadanie i usunęła starsze kopie zapasowe, więc spodziewałem się, że rsync
zadanie cron następnie usunie starsze kopie zapasowe z mojego folderu Dropbox, aby pasowały do folderu źródłowego, ale tak się nie stało. Mam więc kilka pytań:
Domyślnie
rsync
tylko dodaje pliki do folderu docelowego, które zostały dodane do folderu źródłowego i zmienia pliki, które zostały zmienione w folderze źródłowym, ale NIE usuwa plików, które zostały usunięte z folderu źródłowego?Jeśli tak jest, jaki jest najlepszy sposób, aby to
rsync
zrobić? Chcę, aby folder docelowy idealnie odzwierciedlał folder źródłowy, a to oznacza usuwanie wszystkich plików, które zostały usunięte z folderu źródłowego.
Widzę niektóre opcje wymienione na stronie podręcznika, rsync
które mogą załatwić sprawę, ale ponieważ nie jestem zaznajomiony.
source/* dest/
nie działa.--delete
lub--delete-after
nie można go usunąć z powodu niektórych błędów: „Wystąpił błąd we / wy - pomijanie usuwania pliku”. Aby rozwiązać tę--ignore-errors
opcję dodawania i osobno debugować błędy-n, --dry-run
opcji przed uruchomieniemrsync
, szczególnie jeśli chodzi o opcje takie jak te (--delete
). Pozwoli to uniknąć ewentualnego bólu głowy :).-a
implikuje-r
.Polecenie rsync nie usunie żadnego pliku, gdy użyjesz niektórych jego opcji
delete
w tym poleceniu. Więc jeśli jakikolwiek plik lub folder dodany w źródle, zostanie zsynchronizowany z celem bez usuwania.Sugeruję, aby użyć
rsync
do wykonania kopii zapasowej z plików źródłowych i użyćfind ... rm
do usunięcia plików na czas lub rozmiar plików:Powyższy blok kodu, wykonaj kopię zapasową ze źródła, a następnie usuń wszystkie pliki, których ostatnia modyfikacja trwa dłużej niż 2 miesiące.
AKTUALIZACJA
Ponieważ uważam, że
delete
opcje są tylko dla TARGET, że jeśli niektóre pliki zostaną usunięte ze źródła,rsync --delete
usuń je z TARGET. Idelete
opcjaafter
orazbefore
, jak wspomniano na stronie podręcznika :Oznacza, że:
--delete-after receiver deletes after transfer, not during
Oznacza, że:
UWAGA :
--delete-{before/after}
narzędzie tylko w TARGET.źródło
To polecenie skopiuje dane przyrostowe i zsynchronizuje je ze zdalnym serwerem.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Przykład:
źródło
rsync: Failed to exec --delete-before: No such file or directory (2)
Jeśli są jakieś błędy podczas scync rsync rsync nie będzie prawidłowo usunąć pliki powinny mieć, nawet jeśli jest używana
--delete
,--delete-after
lub--delete-before
.Dlatego ważne jest, aby rozwiązać błędy rsync.
Większość moich błędów była spowodowana użyciem
--perms
opcji podczas synchronizacji z systemem plików innym niż Linux. Kiedy otrzymuje--perms
się--no-perms
te błędy odszedł, a następnie usuwanie pracował.--perms
jest ok, gdy synchronizujesz z systemu plików Linux do innego systemu plików Linux, ale jeśli synchronizujesz z systemu Linux do systemu plików innego niż Linux (np. NTFS, FAT),--perms
powoduje błędy, ponieważ rsync nie może ustawić uprawnień Linux na systemy plików inne niż Linux . Znów błędy = brak usuwania.- Podczas synchronizowania na partycję dla Linuksa, używam
--no-perms
, aby uniknąć tych błędów, które sabotaż--delete
,--delete-after
albo--delete-before
.Jeśli nadal występują błędy i nie możesz dowiedzieć się, jak je naprawić, możesz uruchomić polecenie, które jest przeznaczone wyłącznie do usuwania plików niezsynchronizowanych:
Powyższe polecenie usunie elementy niezsynchronizowane, ale nie zsynchronizuje żadnych plików. Po tym powinieneś ponownie zsynchronizować. To polecenie opiera się na tej odpowiedzi , z tym wyjątkiem, że dodałem
--ignore-errors
również argument, więc zostałby usunięty nawet w przypadku wystąpienia błędów.źródło