rsync i dowiązania symboliczne

69

Chcę wykonać kopię zapasową mojego katalogu domowego na dysk zewnętrzny co noc przy użyciu cronzadania do wykonania rsync. Nie jestem pewien dokładnego zachowania rsyncflag symbolicznych linków.

  1. rsync„s -aflag zawiera -lflagę (czyli "Symlinks Kopiuj jako dowiązania"). Czy to oznacza tylko, że skopiuje link lub że będzie podążał za linkiem i kopiował wszystko w katalogu linku do? Chcę tego uniknąć, ponieważ mam linki do katalogów pełnych plików multimedialnych, które wymagałyby kopiowania setek gigabajtów, których nie muszę tworzyć kopii zapasowej.
  2. Bojąc się (ale nie rsync -ajestem pewien), że skopiuje wszystkie te pliki multimedialne, zamiast tego dodałem --no-linksflagę. To nie wydaje się zachowanie, którego chcę. Po prostu ignoruje kopiowanie jakiegokolwiek linku, który jest problematyczny, ponieważ mam linki, które chcę skopiować (np. Linki do wspólnych plików nagłówkowych z różnych katalogów projektu).
  3. Zakładając, że nr 1 powyżej (bez --no-linksflagi) jest tym, czego naprawdę chcę i po prostu kopiuje link bez kopiowania plików połączonych, czy linki się zepsują podczas tworzenia kopii zapasowej? Na przykład mogę rsyncźródłowy katalog /home/me/projects/miscdo /media/extdrive/backup/home/me/projects/misc. W tym przypadku zakładam, że rsyncnie jest wystarczająco mądry, ani nie próbuje poprawić zawartości dowiązań symbolicznych dla względnych zmian katalogu. Czy to jest poprawne? Jest to w porządku, nie ma znaczenia, czy łącza są uszkodzone w katalogach kopii zapasowych, o ile zostaną naprawione i będą działać, jeśli nadejdzie taki czas, kiedy trzeba je przywrócić.
Sean
źródło
3
Flaga -L jest prawdopodobnie tym, czego chcesz. Ze strony podręcznika rsync w Centos Linux: „-L, --copy-links przekształca dowiązanie symboliczne w plik referencyjny / katalog”. Zalecam przetestowanie tego z przykładowymi katalogami i linkami, aby upewnić się, że nie zastąpisz żadnych danych, których nie zamierzasz. Edytowane, aby zawierało ostrzeżenie o możliwej utracie danych. ;)
Mick T

Odpowiedzi:

90
  1. „Kopiuj dowiązania symboliczne jako dowiązania symboliczne” oznacza dokładnie to, co mówi: Jeśli rsync zobaczy dowiązanie symboliczne w katalogu źródłowym, utworzy identyczne dowiązanie symboliczne w miejscu docelowym. Nic więcej.

    (Kilka wierszy w dół na stronie podręcznika, inna opcja, --copy-linksopisuje przeciwne zachowanie (zawsze kopiowanie danych), które opisałeś jako niepożądane.)

    Zobacz także sekcję „Linki symboliczne”:

    Jeśli --linksjest określony, wówczas dowiązania symboliczne są odtwarzane z tym samym celem w miejscu docelowym.

  2. Nie jest to pożądane zachowanie, ponieważ źle interpretujesz, co się --linksdzieje, i dlatego pytasz o niewłaściwe zachowanie (patrz odpowiedź nr 1).

  3. Domyślnie dokładnie kopiuje miejsce docelowe .

    Oznacza to, że jeśli link wskazywałby na ścieżkę bezwzględną (np. /home/me/projects), Będzie nadal wskazywał tę samą ścieżkę; nie zepsuje się , po prostu nadal będzie wskazywać plik w katalogu domowym, a nie plik w kopii zapasowej.

    Tymczasem, jeśli link wskazał na ścieżkę względną (np ../../projects), to będzie również kontynuować wskazując na tej samej ścieżce, ale ponieważ jest to w stosunku do lokalizacji dowiązania, w dowiązanie w kopii zapasowej zostaną również skierowaną do pliku kopii zapasowej.

    Niestety wydaje się, że nie ma żadnej opcji tłumaczenia absolutnych dowiązań symbolicznych dla ich nowej bazy (tylko opcja całkowitego ich złamania). Aby uniknąć problemów, powinieneś zmienić istniejące dowiązania symboliczne na względne (co jest ogólnie dobrym pomysłem dla linków wewnątrz $ HOME).

grawitacja
źródło
2
ummm, więc jaka jest różnica między --copy-linksi --links?
Alexander Mills,
--copy-links= -Li --links= -l. Zobacz opis z dokumentacji w mojej odpowiedzi tutaj: superuser.com/a/1388910/425838
Gabriel Staples
12

@grawity ma świetną odpowiedź, ale oto zrzut ekranu niektórych istotnych informacji z dokumentacji. Oto dokładne sformułowanie opcji -li -L, na przykład, które wydają się najbardziej odpowiednie, o których mowa:

wprowadź opis zdjęcia tutaj

Źródło: https://linux.die.net/man/1/rsync lub man rsyncstrony podręcznika w systemie Linux.

Zauważ też, że opcja -a( --archive) zawiera również -lopcję, która jest niesamowita, ponieważ naprawdę lubię tę -lopcję, aby zachować moje dowiązania symboliczne ze źródła jako dowiązania symboliczne w miejscu docelowym. Ze stron podręcznika:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Uwaga: moje ulubione rsyncpolecenia i instrukcje, w tym kopiowanie, tworzenie kopii lustrzanych, pokazywanie całkowitego postępu ...

... robiąc suche przebiegi, rejestrując stderr i stdout do (osobnych) plików, pokazując statystyki, używając pliku ścieżki włączającej i pliku wykluczającego itp., zobacz moją pełną odpowiedź tutaj w drugiej sekcji, zatytułowanej " 2. rsync Wiersz poleceń narzędzie (Linux, Windows z Cygwin) ”: https://superuser.com/a/1464264/425838

Gabriel Staples
źródło