Jestem ciekawa i trochę czytałam, ale wciąż mam pytania.
Co różni CPIO od TAR? W innym pytaniu powiedziano mi, że tar służy do zebrania wielu plików do jednego archiwum, które wtedy jest zwykle gzip'd lub bzip.
Powiedziano mi również, że TAR nie może kompresować z STDOUT. Chcę archiwizować / kompresować migawki ZFS do tworzenia kopii zapasowych. Zastanawiałem się, czy mógłbym połączyć CPIO z bzip2, aby uzyskać ten efekt.
Czy mam zupełnie zły pomysł? Czy nie taki jest cel CPIO?
Tego rodzaju polecenia pojawiły się po przeczytaniu, więc dokumentacja Oracle dotycząca tworzenia kopii zapasowych migawek ZFS.
# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2
# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2
pax
: POdpowiedzi:
Zarówno
tar
icpio
mają jeden cel: złączyć wiele oddzielnych plików do jednego strumienia. Nie kompresują danych. (Te dnitar
są bardziej popularne ze względu na ich względną prostotę - może przyjmować pliki wejściowe jako argumenty zamiast być łączone z tym,find
cocpio
ma).W twoim przypadku nie potrzebujesz żadnego z tych narzędzi; nie przyniosą żadnego użytecznego efektu, ponieważ nie masz wielu oddzielnych plików.
zfs send
już zrobiłem to samo, cotar
by zrobił. Więc nie masz żadnych plików, tylko strumień bezimienny.Aby skompresować migawkę, wystarczy przesłać dane
zfs
wyjściowe przez program do kompresji:(Można zastąpić
gzip
zxz
lubbzip2
czy jakiekolwiek inne narzędzie strumień kompresji, jeśli chcesz).źródło
zfs send
już robi to samo, cotar
by zrobił.Oprócz tego, co wcześniej powiedzieli grawity i Paul :
Historia
W „dawnych czasach”, cpio (z opcją
-c
używany) był narzędzie do wykorzystania, gdy przyszło do przenoszenia plików do innych pochodnych UNIX, ponieważ był bardziej mobilny i elastyczny niż smoła . Ale problemy z przenoszeniem zawartości substancji smolistych można uznać za rozwiązane od późnych lat osiemdziesiątych.Niestety, w tym czasie różni dostawcy zniekształcili
-c
format cpio (wystarczy spojrzeć na stronę podręcznika dla GNU cpio i tej opcji-H
). W tym czasie smoła stała się bardziej przenośna niż CPIO ... Zajęło to prawie całą dekadę, zanim różni dostawcy UNIXa to rozwiązali. Mając GNU tar i GNU cpio zainstalowana była obowiązkowa dla wszystkich administratorów, które miały do czynienia z taśmami z różnych źródeł, a następnie z powrotem (nawet w dzisiejszych czasach jak mniemam).Interfejs użytkownika
tar może użyć pliku konfiguracji taśmy, w którym administrator skonfigurowałby napędy taśm podłączone do systemu. Użytkownik powiedziałby wtedy „Cóż, wezmę napęd taśmowy 1” zamiast pamiętać dokładny węzeł urządzenia dla taśmy (co może być bardzo mylące i nie jest standaryzowane na różnych platformach UNIX.
Ale główna różnica polega na:
tar potrafi samodzielnie przeszukiwać katalogi i pobiera listę plików lub katalogów, których kopie zapasowe należy utworzyć z argumentów wiersza poleceń.
cpio archiwizuje tylko pliki lub katalogi, do których jest skierowany, ale nie przeszukuje podkatalogów samodzielnie. Również cpio pobiera listę elementów, które należy zarchiwizować ze standardowego wejścia - dlatego prawie zawsze jest używany w połączeniu z funkcją find .
Cpio polecenia często wygląda przerażające dla początkujących w porównaniu ze smoły :
Myślę, że to jest główny powód, dla którego większość ludzi używa tar do tworzenia plików archiwalnych: w przypadku prostych zadań, takich jak łączenie całego katalogu, jest to po prostu łatwiejsze w użyciu.
Również GNU tar oferuje opcję,
-z
która powoduje, że archiwum jest kompresowane za pomocą GNU zip w locie, dzięki czemu wszystko jest jeszcze łatwiejsze.Z drugiej strony można robić sprytne rzeczy za pomocą find & cpio . W rzeczywistości jest to podejście bardziej podobne do systemu UNIX: Po co włączać wyszukiwanie drzewa katalogów do cpio, jeśli istnieje już narzędzie, które zajmuje się prawie wszystkim, co można sobie wyobrazić: znaleźć . Przychodzi mi na myśl tworzenie kopii zapasowych plików nowszych niż określona data, ograniczanie plików do plików znajdujących się w tym samym systemie plików lub filtrowanie wyników wyszukiwania w
grep -v
celu wykluczenia niektórych plików ...Ludzie GNU tar spędzili dużo pracy, aby uwzględnić wiele rzeczy, które wcześniej były możliwe tylko z cpio . W rzeczywistości oba narzędzia uczyły się od siebie nawzajem - ale tylko procesor może odczytać format tar - nie na odwrót.
przetwarzanie smoły i danych wyjściowych
Ostatnia uwaga do czegoś, co powiedziałeś:
Cóż, każda wersja tar (GNU lub nie) może być używana w potoku. Wystarczy użyć znaku minus (
-
) jako nazwy archiwum:Również GNU tar oferuje opcję
--to-command
określenia polecenia postprocesora - chociaż nadal wolałbym potok. Może przydaje się podczas pisania na niektóre urządzenia.źródło
cp
), move (mv
)diff
itd.; - )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. powiedziałeś:only cpio may read the format of tar
. czy to nie jest sprzeczność?tar i cpio mają zasadniczo tę samą funkcję, czyli tworzenie jednego ciągłego pliku z danych wejściowych wielu plików i katalogów. Pierwotnie miało to na celu umieszczenie wyniku na taśmie, ale w dzisiejszych czasach jest on zwykle używany jako narzędzie do kompresji, tak jak to opisano powyżej. Jest tak, ponieważ kompresja pojedynczego dużego pliku zajmuje więcej czasu i miejsca niż kompresja wielu małych plików. Należy zauważyć, że wiele formatów graficznych (png, jpg itp.) Jest już mocno skompresowanych i może faktycznie stać się nieco większych, jeśli zostaną poddane kompresji.
Ani tar, ani cpio nie wykonują żadnej kompresji samodzielnie. Tar skutecznie „wygrał” wojnę o „to, czego będziemy używać do tworzenia plików zbiorczych”, ale cpio szuka w różnych miejscach. Nie jestem świadomy żadnych korzyści z jednej strony, smoła wygrywa przez to, że jest częściej używana.
tar może rzeczywiście pobierać dane wejściowe na stdin i wysyłać je na stdout - które następnie byłyby przesyłane do bzip2 tak jak ty lub coś podobnego. Wywołany opcją „z”, automatycznie wywoła gzip na wyjściu.
źródło
-j
ma wywoływać bzip2?tar -caf myfiles.tar.xz myfiles/
kompresuje za pomocąxz
i totar -caf myfiles.tar.gz myfiles/
kompresuje za pomocągzip
.Poprosiłem o pomoc techniczną HP w ok. 1996 dlaczego używać
cpio
ponadtar
.Powiedziano mi, że taśmy rozciągają się i zużywają. Gdy
tar
osiągnie nieczytelną część taśmy, nie powiedzie się i zwróci numer błędu. Gdycpio
osiągnie nieczytelną część, przechodzi do następnego czytelnego bloku, ponownie synchronizuje i kontynuuje.Nigdy nie widziałem dokumentacji na poparcie tego, ale zawsze używane
cpio
.źródło
Warto również zauważyć: na (przynajmniej) FreeBSD i Mac OS X można manipulować plikami CPIO za pomocą tar. BSD tar używa libarchive pod maską, więc może obsługiwać cpio, pax, shar ...
Oznacza to, że problemy z użytecznością
cpio
polecenia nie muszą powstrzymywać Cię przed interakcją z plikami CPIO.źródło
only cpio may read the format of tar
. powiedziałeś:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. czy to nie jest sprzeczność?Podczas gdy odpowiedzi tutaj już się porównują
cpio
itar
bardzo dobrze, chciałbym podkreślić jedną zcpio
funkcji zwaną trybem potokowym, która sprawia, że bardziej wydajne jest kopiowanie wybranych plików (tj. Poprzezfind
i filtrowanie) przy jednoczesnym zachowaniu ich struktury katalogów. Ta funkcja jest dobrze udokumentowana, a jej podstawowa zasada wygląda następująco:Odpowiednik z
tar
obejmowałby coś takiego:Istnieją oczywiście inne alternatywy, takie jak
rsync
icp --parents
omówione w innym wątku , ale nic nie zbliża się do elastyczności oferowanej przez kombinacjęfind
icpio
. Ponieważtar
jestem wszechobecny w tworzeniu archiwów, jest to jedyny powód, dla którego wciąż go używamcpio
.źródło