Jak przenosić katalogi, które mają wspólne pliki z jednej partycji na drugą?
Załóżmy, że mamy zamontowaną partycję /mnt/X
z katalogami udostępniającymi pliki za pomocą dowiązań twardych. Jak przenieść takie katalogi na inną partycję, niech to będzie /mnt/Y
z zachowaniem tych twardych dowiązań.
Aby lepiej zilustrować, co rozumiem przez „katalogi współdzielące pliki wspólne z dowiązaniami twardymi”, oto przykład:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Mówiąc ściślej, załóżmy, że całkowity rozmiar plików to 10G, a każdy plik ma 10 dowiązań twardych. Pytanie brzmi, jak przenieść go do miejsca docelowego za pomocą 10G (ktoś może powiedzieć o skopiowaniu go za pomocą 100G, a następnie uruchomieniu deduplikacji - nie o to pytam)
rsync ma do tego opcję
-H
lub--hard-links
, i ma zwykłe zalety rsync polegające na tym, że można go zatrzymać i zrestartować, a także ponownie uruchomić, aby skutecznie radzić sobie z plikami, które zostały zmienione podczas / po poprzednim uruchomieniu.Przeczytaj
rsync
stronę podręcznika man i wyszukaj -H. Jest o wiele więcej szczegółów na temat poszczególnych zastrzeżeń.źródło
man rsync
: Począwszy od rsync 3.0.0, stosowany algorytm rekurencyjny jest teraz skanem przyrostowym, który zużywa znacznie mniej pamięci niż wcześniej i rozpoczyna transfer po zakończeniu skanowania pierwszych kilku katalogów. Ten przyrostowy skan wpływa tylko na nasz algorytm rekurencyjny i nie zmienia transferu nierekurencyjnego. Jest to również możliwe tylko wtedy, gdy oba końce przesyłania są co najmniej w wersji 3.0.0. Zauważ, że oba te elementy--delete-before
i--delete-after
wyłącz ten ulepszony algorytm.rsync
jest również niezwykle przydatny, nie zawsze jest najlepszym narzędziem do każdej pracy. Obecnie wolę używać zestawów danych ZFS, aby móc tworzyć migawki izfs send
je - najczęściej używam rsync na systemach plików nieobsługujących ZFS.btrfs
ma podobną funkcję migawki + wysyłania.Trzecia odpowiedź: sposób POSIX
POSIX nie ustandaryzował
tar
narzędzia, chociaż ujednolicilitar
format archiwum. Wywoływane jest narzędzie POSIX do manipulowania archiwami tarpax
i ma dodatkową funkcję polegającą na wykonywaniu operacji pakowania i rozpakowywania w jednym procesie.źródło
Druga odpowiedź: The Ancient UNIX Way
Utwórz archiwum tar w katalogu źródłowym, prześlij je przez potok i rozpakuj w katalogu docelowym.
źródło
tar
zachowuje twarde linki. Przynajmniej w GNU tar możesz to wyłączyć, używając--hard-dereference
tar x
dzieje się tak, ponieważ nie ma pełnej listy plików, ponieważ pliki są nadal przesyłane strumieniowo ztar c
. Prawdopodobnie, jeśli zapisałeś całe archiwum przed wypakowaniem go, byłoby w porządku. Byłbym bardzo szczęśliwy, gdyby ktoś mógł potwierdzić tę teorię.Źródło: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
Aby dokładnie wykonać kopię, potrzebujesz
źródło