Jakie są różnice między bsdtar a GNU tar?

46

Zawsze korzystałem z GNU tar. Jednak wszystkie dystrybucje GNU / Linux, które widziałem, są dostarczane bsdtarw swoich repozytoriach. Widziałem go nawet instalowanego domyślnie w niektórych, IIRC. Wiem na pewno, że Arch GNU / Linux wymaga tego w ramach basedevel(być może base, ale nie jestem pewien), tak jak to widziałem w PKGBUILD.

Dlaczego chcesz używać bsdtarzamiast GNU tar? Jakie są zalety?

Zauważ, że jestem osobą, która zapytała Jakie są główne różnice między BSD a obszarem użytkownika GNU / Linux? .

strugee
źródło
1
Ta odpowiedź na pytanie: Dlaczego rozpakowywanie tego tgz powoduje błąd na moim Macu, ale nie na Linuksie? na Apple.SE ma również znaczenie dla tego pytania.
Adam Liter

Odpowiedzi:

29

Ubuntu bsdtarjest tak naprawdę pakietem instalacyjnym tar libarchive; i należy to odróżnić od klasycznego bsdtar. Niektóre warianty BSD używają libarchivedo implementacji tar, np. FreeBSD.

GNUtarobsługuje inne warianty tar i automatyczne wykrywanie kompresji.

W miarę wklejania się wizualizacji w Ubuntu pojawiło się kilka rzeczy, które są specyficzne dla libarchive:

  1. libarchivejest z definicji biblioteką i różni się zarówno od klasycznej, jak bsdtari GNUtarpod tym względem.
  2. libarchive nie może odczytać niektórych starszych niejasnych odmian tar GNU, najbardziej zauważalne było kodowanie niektórych nagłówków w base64, tak że plik tar miałby 7-bitowy czysty ASCII (tak było w przypadku 1.13.6-1.13.11 i zmieniony w 1.13.12 , ten kod był oficjalnie zapisany w tar przez 2 tygodnie)
  3. libarchive„s bsdtarodczyta pliki non-tar (np zip, iso9660, cpio), ale klasyczne bsdtar nie będzie.

Teraz, gdy udało nam się libarchivezejść z drogi, sprowadza się to głównie do tego, co jest obsługiwane w klasyce bsdtar.

Tutaj możesz zobaczyć strony podręcznika:

W swoim pierwotnym pytaniu zapytałeś, jakie są zalety tego, co klasyczne bsdtar, i nie jestem pewien, czy tak naprawdę są. Jedyne, co naprawdę ma znaczenie, to próby pisania skryptów powłoki, które muszą działać na wszystkich systemach; musisz upewnić się, że to, co przekazujesz, tarjest ważne we wszystkich wariantach.

GNUtar, libarchive„S bsdtar, klasyczne bsdtar, stara BusyBox” s tarsą z pewnością implementacje smoły, że będziesz prowadzone w większość czasu, ale jestem pewien, że są inni tam (wcześnie QNX na przykład). libarchive/ GNUtar/ starmają najwięcej funkcji, ale pod wieloma względami od dawna odbiegały od oryginalnych standardów (być może na lepsze).

robbat2
źródło
15

BSDTAR vs TAR plus wiele więcej

Oto jedna korzyść !!

Przejdę do 5 tematów tutaj (i odejdę od tematu, ale obejmie to, czego chcesz):

  1. bsdtar vs tar
  2. rzadkie pliki kontra nie
  3. grube i cienkie pliki / luns z btrfs
  4. grube i cienkie pliki / luns bez btrfs
  5. różnią się między grubym a cienkim i tym, jak nie odnosi się to tylko do lunchów

bsdtar pliki uchwyty rzadki lepiej niż regularne tar

  • bsdtar weźmie wszystkie zera i po prostu je metadane
  • tar faktycznie przetwarza co zero

* przykład: wyobraź sobie plik rzadki o pojemności 20 TB (zwany biglun) z 10 megabajtami danych w pliku rzadkich plików o wielkości 20 TB (biglun) ... teraz, ponieważ jest to rzadki plik, zajmuje on tylko 10 megabajtów na dysku.

Jak zrobić rzadki plik:

Plik rzadki - jak to zrobić - wykryj go - wszystko Pliki rzadkie są jak „cienkie” lun (jeśli miałbyś go użyć do lun). „grubi” lunowie byliby inną historią.

* powrót do tematu:

  • tarowanie biglun sprawi, że smoła przejdzie przez wszystkie 10 megabajtów wraz ze wszystkimi o 20tb gorszymi zerami rozłożonymi na lun ... to zajmie trochę czasu, jak sądzę, a plik tar będzie dość duży. Ponadto - rozpakowywanie go - nigdy nie robiłem ekstrakcji pliku tar pliku rzadkiego, ale może nie być ładny; Mogę się tutaj mylić.

  • bsdtarring biglun przetworzy tylko 10 megabajtów danych i utworzy małe metadane dla ~ 20tb zer.

Zasiłek? Cóż, wiele z nich; Właśnie napisałem kilka powyżej.

Jest podobny do rsync vs cp

  • Ponadto, jeśli synchronizujesz olbrzymi rzadki plik, będzie on zachowywał się jak tar
  • Jeśli cp olbrzymi plik, zachowa się automatycznie jak bsdtar (możesz zmienić zachowanie cp, aby przekroczyło zera lub nie przekroczyło zera)

Osobiście lubię sobie wyobrażać rzadkie pliki, takie jak cienkie luns, i zwykłe pliki, takie jak grube luns ...

Następny temat to cienkie i grube lunty BTRFS :

  • W systemach plików, takich jak BTRFS , cienkie programy są rzadkimi plikami (należy je obcinać, jak w dokumencie wiki).

     truncate -s <size in kilobytes> filename
    

    wskazówka: kopia zapasowa za pomocą bsdtar , kopia za pomocą cp

  • grube wiersze są zwykłymi plikami z atrybutem + C (+ C, dzięki czemu nie ma COW, kopiuj przy zapisie, tak że wszystkie zapisy zasadniczo trzymają się tego, do czego są przydzielone, i nie ma nowych zapisów dla tego pliku, gdy są nadpisania lub usuwa - badaj COW i BTRFS ). Zamiast tworzyć plik za pomocą obcinania, ustaw go za pomocą „fallocate -l”

    fallocate -l <size in kilobytes> filename
    chattr +C filename
    

    wskazówka: wykonaj kopię zapasową za pomocą bsdtar lub tar, skopiuj za pomocą rsync lub cp

Następny temat to EXT cienki vs gruby luns:

  • cienkie lunety, które są rzadkie

    truncate -s <size in kilobytes> filename
    

    wskazówka: kopia zapasowa za pomocą bsdtar , kopia za pomocą cp

  • grube wiersze są zwykłymi plikami z atrybutem + C (+ C, dzięki czemu nie ma COW, kopiuj przy zapisie, tak że wszystkie zapisy zasadniczo trzymają się miejsca, do którego są przydzielone, i nie ma nowych zapisów dla tego pliku, gdy są nadpisania lub usuwa - badaj COW i BTRFS ). Zamiast tworzyć plik za pomocą obcinania, ustaw go za pomocą „fallocate -l”

    touch filename
    fallocate -l <size in kilobytes> filename
    

    wskazówka: wykonaj kopię zapasową za pomocą bsdtar lub tar, skopiuj za pomocą rsync lub cp

co to jest plik gruby kontra cienki

  • grube luns / pliki, wypełniają swoje dane od 0 do przydzielonego rozmiaru, metadane udają, gdzie są zera. podczas wypełniania danych dane się zapełniają
  • gruby luns / pliki: wypełniają swoje dane na początku zerami lub czymkolwiek (leniwe zero lub chętne zero) - ustawiają rezerwacje (lub jak ZFS lubią nazywać rezerwacje)

ARTYKUŁ VMWARE TUTAJ opisuje leniwe vs chętne zero z grubymi luns / plikami: https://communities.vmware.com/message/2199576

Wskazówka

pamiętaj, że gruby i cienki nie dotyczy tylko LUNSów, może także dotyczyć plików, systemów plików ZFS (udziały / woluminy / Luns) i jestem pewien, że inne rzeczy (tylko spójrz na ZFS).

kobbsoss
źródło
1
Ładne i dokładne. Witamy na stronie ...
eyoung100,
1
- Rzadkie z dowolną wersją tar: Po prostu przekaż -S do większości implementacji tar, wszystkie one obsługują to przez długi czas. - Sparse z rsync: ponownie, przekaż - sparse, to działa. Wadą korzystania z dowolnego rzadkiego wykrywania jest to, że narzędzie musi więcej czytać bloki, co może wprowadzić dużo procesora (szczególnie w przypadku naprzemiennych przebiegów zerowych / niezerowych).
robbat2
Nadal lepiej jest używać bsdtar, nawet jeśli gnu tar obsługuje flagę rzadkości, ponieważ bsdtar wie, jak pomijać rzadkie dziury, bez ich przetwarzania (np. Jeśli masz rzadki plik 1 TB z tylko 1k danych, bsdtar przetworzy 1k dane. Gnu tar przetworzy 1 TB.
moveaway00
13

Z opisu pakietu Ubuntu ( http://packages.ubuntu.com/de/lucid/bsdtar )

„Program bsdtar ma wiele zalet w porównaniu z poprzednimi implementacjami tar:

  • Biblioteka. Ponieważ podstawowa funkcjonalność znajduje się w bibliotece, może być używana przez inne narzędzia, takie jak pkg_add.
  • Automatyczne wykrywanie formatu. Libarchive automatycznie wykrywa kompresję (none / gzip / bzip2) i format (stara tar, ustar, gnutar, pax, cpio, iso9660, zip) podczas czytania archiwów. Robi to dla dowolnego źródła danych.
  • Obsługa formatu wymiany Pax. Jest to rozszerzenie POSIX / SUSv3 do starego formatu tar „ustar”, który dodaje dowolne rozszerzone atrybuty do każdego wpisu. Robi wszystko, co robi format GNU tar, tylko lepiej.
  • Obsługuje flagi plików, listy ACL, dowolne nazwy ścieżek itp. Format wymiany Pax obsługuje atrybuty klucz / wartość przy użyciu łatwo rozszerzalnej techniki. Dowolne ścieżki, nazwy grup, nazwy użytkowników, rozmiary plików są częścią standardu POSIX; libarchive rozszerza tę funkcję o obsługę flag plików, list ACL i dowolnych numerów urządzeń.
  • Obsługa tar GNU. Libarchive czyta większość archiwów tar GNU. Jeśli istnieje popyt, można to jeszcze poprawić ”.
wizualizacja
źródło
1

Poniższe informacje oparte są na czytaniu, a nie na doświadczeniu - dopiero zaczynam od Freebsd, więc nie mam z nim prawie żadnego doświadczenia (pochodzę głównie z Linuksa). Przepraszam (i pokornie zabiegam o korektę), jeśli coś przeoczyłem, a to, co tu mówię, to śmiecie ...

Z mojego przeczytania stron podręcznika (ostatnio tego, do którego odwołano powyżej http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ) tarowi Freebsd brakuje (-d, --diff , --compare). Nie jest to zaskakujące, ponieważ autorzy zrzutu / przywracania Freebsd również nie zapewnili czegoś takiego.

Nie wiem na pewno, czy tar Gnu będzie zawierać wszystkie metadane UFS, jak mówi się, że tar Freebsd, i jest to ważna kwestia. Ale według mojego smaku NIGDY nie mogę uznać zrzutu za zakończony, dopóki nie zapisam sumy MD5 pliku wyjściowego, A NASTĘPNIE porównuję plik zrzutu z danymi, które rzekomo zrzuciłem. Różne problemy mogą prowadzić do tego, że zrzucone dane różnią się od danych na dysku. (Nie tylko zmiany plików, ale także błędy dysku, błędy pamięci, błędy komputera itd. Wszystkie z nich faktycznie mi się przydarzyły.)

Moim zdaniem powoduje to, że Tar Gnu jest jedyną dostępną do tej pory opcją tworzenia prawdziwych kopii zapasowych na standardowym systemie Freebsd.

Bardzo chciałbym nauczyć się inaczej, FWIW. Wolę używać rodzimych narzędzi przynajmniej do klonowania partycji i tworzenia kopii zapasowych na twardym dysku. Ale jeśli nie można zweryfikować poprawności zrzutu, nie ma sensu zawracać sobie głowy jego tworzeniem.

LOC
źródło
1
  • bsdtar może czytać i tarować członków pochodzących z innych archiwów przy użyciu @archiveskładni

  • GNU tar ma taką --deleteopcję - choć ostatnio odkryłem, że może to uszkodzić archiwum.

bart
źródło