rsync do skompresowanego archiwum pliku

11

Robię kopie zapasowe serwera za pomocą rsync, ale te kopie są dość duże i chciałbym je skompresować. Czy istnieje sposób na zawinięcie rsync w celu rozpakowania pliku w kopii zapasowej, zsynchronizowania zmian z pliku na żywo, a następnie ponownego zgzipowania pliku, gdy tylko zostanie skopiowany?

Czyli jeśli pliki źródłowe na temat żywo są foo , bar i baz , kopia zapasowa ma foo.gz , bar.gz i baz.gz .

Aby utworzyć ponownie: Chcę skompresowane pliki na jednym końcu i nieskompresowane pliki na drugim końcu. Nie chcę kompresować przed rsyncingiem, ponieważ nawet z opcją --rsyncable sprawia, że ​​rsync jest mniej wydajny. Wiem o opcji -z do rsync. Nie mam miejsca na komputerze do tworzenia kopii zapasowych, aby przechowywać wszystkie pliki bez kompresji.

rjmunro
źródło

Odpowiedzi:

10

Nie jestem pewien, czy rozumiem, co próbujesz zrobić, ale możesz tworzyć gzipowane kopie zapasowe na głównym serwerze, upewniając się, że można je łatwo zsynchronizować i nie przeszkadzają w dekompresji niczego podczas przesyłania.

gzip(1)

--rsyncable
       While compressing, synchronize the output occasionally based on
       the  input.   This  increases  size by less than 1 percent most
       cases, but means that the rsync(1) program can much more  effi‐
       ciently  synchronize  files  compressed with this flag.  gunzip
       cannot tell the difference between a  compressed  file  created
       with this option, and one created without it.
AB
źródło
Miły. Nie wiedziałem o flagi rsyncable. To się przydaje. Zastanawiam się, dlaczego nie jest to domyślna strata 1%
Matt Simmons,
Uwaga: opcja --rsyncable nie jest dostępna we wszystkich wersjach gzip, a także pochodzi z powszechnie stosowanej łatki, a nie z podstawowego kodu gzip, więc numery wersji nie wystarczą, aby wiedzieć, czy ją masz.
mc0e
-1

Możesz napisać opakowanie do rsync. Jeśli „wyciągasz” dane, nie ma nic specjalnego do roboty. Jeśli chcesz „wypchnąć” dane z oryginalnych komputerów na serwer zapasowy, bardziej delikatne jest, aby działało:

Najpierw musisz się upewnić, że otoki są wywoływane z taką samą nazwą, ścieżką i parametrami jak oryginalny rsync, przynajmniej dla użytkownika, na którym uruchamiasz kopie zapasowe.

Po drugie, pamiętaj, aby nie pisać niczego na standardowe wyjście, ponieważ mogłoby to zakłócić kanał komunikacyjny.

Po trzecie, pamiętaj, aby przekazać wszystkie otrzymane parametry, modyfikując odpowiednio dla nowo nieskompresowanego miejsca docelowego.

Javier
źródło
-2

Prawdopodobnie szuka kompresji transmisji danych przez rsync, a nie kompresji plików na drugim końcu.

Sprawdź: http://jimmyg.org/blog/2007/rsync-basics.html

Parametry kompresji ze strony man:

   -z, --compress              compress file data during the transfer

        --compress-level=NUM    explicitly set compression level

Domyślnie ssh dokonuje własnej kompresji do pewnego stopnia. Nie wiem, o ile lepszy jest rsync w porównaniu z natywnym ssh. Jeśli większość twoich plików jest już skompresowana do plików gzip, prawdopodobnie mechanizm kompresji rsync może dla ciebie niewiele zrobić. Możesz wycisnąć tylko tyle pliku.


źródło
Nie, szukam kompresji plików tylko na jednym końcu. rsyncing już skompresowanych plików jest nieefektywny, więc chciałbym, aby część rsync działała z nieskompresowanymi danymi.
rjmunro,