Zachowanie istniejących docelowych dowiązań symbolicznych za pomocą rsync

10

Używam rsync (1) do aktualizacji lokalnego repozytorium debiana. Niedawno na dysku, którego używam do przechowywania, zaczęło brakować miejsca, więc postanowiłem użyć dowiązań symbolicznych, aby pozwolić mi przenieść niektóre katalogi na inny dysk o podobnej wielkości.

Niestety wygląda na to, że rsync usuwa dowiązania symboliczne i uzupełnia prawie pełny dysk. Po kilku poszukiwaniach odkryłem --keep-dirlinksopcję rsync, która wydaje się być dostosowana do rozwiązania mojego problemu.

Tyle że nie. Dowiązania symboliczne w celu nadal są usuwane.
Oto moje polecenie rsync:

rsync --recursive --keep-dirlinks --links --hard-links --times --verbose \
 --delete --delete-excluded $EXCLUDE $SOURCE_EXCLUDE \
 $RSYNC_HOST::$RSYNC_DIR/pool/ $TO/pool/

EXCLUDE rozszerzają się, aby wyeliminować dużą liczbę architektur, które mnie nie interesują, podobnie jak w przypadku --exclude binary-alpha/ --exclude disks-alpha .... Przed uruchomieniem rsync mój katalog puli wygląda następująco:

lrwxrwxrwx  1 root root   23 2014-09-22 13:58 contrib -> /u2/debian/pool/contrib
drwxrwxr-x 62 root root 4096 2012-04-09 03:02 main
lrwxrwxrwx  1 root root   24 2014-09-22 13:58 non-free -> /u2/debian/pool/non-free

Po uruchomieniu rsync otrzymuję:

receiving incremental file list
deleting non-free
deleting contrib
./
contrib/
contrib/a/

I tak dalej, a dowiązania symboliczne są zastępowane katalogami pełnymi plików.

Czy niektóre inne opcje rsync zakłócają --keep-dirlinks? Których nie mogę łączyć? Czy może kolejność opcji powoduje mój problem?

unkilbeeg
źródło

Odpowiedzi:

7

--deleteI --delete-excludedopcje kolidować z planem, gdy zauważysz, że dowiązanie nie istnieje w źródle, a tym samym usunąć.

Dzieje się tak tylko wtedy, gdy każesz rsyncskopiować cały katalog z source/ targetnotacją (ukośnik po źródle). Jeśli użyjesz source/* targetzamiast tego, powłoka rozwinie listę plików i katalogów do skopiowania i tak się nie stanie (ale --dry-runnajpierw spróbuj ).

Jednak zamiast tej delikatnej konfiguracji zaleciłbym połączenie dwóch dysków za pomocą LVM, aby utworzyć jeden duży wolumin, który nie wymaga tego rodzaju oszustwa.

Sven
źródło
Dzięki! Zmieniłem skrypt i wydaje się, że działa. To da mi trochę czasu - dysk nadal będzie się zapełniał, ale mam czas na zmiany. Masz rację, łącząc je z LVM. Już się nad tym zastanawiałem, ale ciągnąłem stopy, ponieważ oznacza to odsuwanie rzeczy, a następnie przenoszenie ich z powrotem. Ale chyba wcześniej niż później.
unkilbeeg
Miałem podobny problem, który został rozwiązany za pomocą opcji --keep-dirlinks bez opcji -a, z której korzystałem. „Drobna” irytacja, jak w trzecim akapicie, systemy plików, których używam, to 64-bajtowe „dyski SAN”. Chociaż możliwe jest, że wielokrotności mogą zostać połączone w jeszcze większe, powiedzmy 256 dysków terabajtowych, oczekuję, że administratorzy mają powody dla naszych rozmiarów. Czasami coś, co wygląda na „oszustwo”, polega po prostu na tym, jak żyć z tym, co masz.
user1683793,
Moim najlepszym rozwiązaniem był nowy sprzęt. Oryginalna maszyna była wystarczająco duża, aby obsługiwać tylko dyski IDE, a największy dysk, jaki można było uzyskać w tych dniach, to 512G.
unkilbeeg