Sự khác biệt giữa bsdtar và GNU tar là gì?


46

Tôi đã luôn sử dụng GNU tar. Tuy nhiên, tất cả các bản phân phối GNU / Linux mà tôi đã thấy xuất xưởng bsdtartrong kho của họ. Tôi thậm chí đã thấy nó được cài đặt theo mặc định trong một số, IIRC. Tôi biết chắc chắn rằng Arch GNU / Linux yêu cầu nó như một phần của basedevel(có thể base, nhưng tôi không chắc chắn), như tôi đã thấy nó trong PKGBUILD.

Tại sao bạn muốn sử dụng bsdtarthay vì GNU tar? Các lợi thế là gì?

Lưu ý rằng tôi là người hỏi Sự khác biệt chính giữa vùng người dùng BSD và GNU / Linux là gì? .


Câu trả lời:


29

Ubuntu bsdtarthực sự là bản triển khai tar đi kèm libarchive; và điều đó nên được phân biệt với cổ điển bsdtar. Một số biến thể BSD sử dụng libarchiveđể triển khai tar, ví dụ FreeBSD.

GNUtarkhông hỗ trợ các biến thể tar khác và phát hiện nén tự động.

Khi trực quan dán trên blurb từ Ubuntu, có một vài điều trong đó cụ thể là libarchive:

  1. libarchivetheo định nghĩa là một thư viện, và khác với cả cổ điển bsdtarGNUtartheo cách đó.
  2. libarchive không thể đọc một số biến thể tar GNU khó hiểu cũ hơn, đáng chú ý nhất là mã hóa một số tiêu đề trong cơ sở64, do đó tệp tar sẽ là ASCII 7 bit sạch (đây là trường hợp của 1.13.6-1.13.11 và đã thay đổi trong 1.13.12 , mã đó chỉ chính thức trong tar trong 2 tuần)
  3. libarchive's bsdtarsẽ đọc các tập tin không tar (ví dụ như nén, iso9660, cpio), nhưng bsdtar cổ điển sẽ không.

Bây giờ chúng ta đã libarchivetránh được , nó chủ yếu dựa vào những gì được hỗ trợ trong cổ điển bsdtar.

Bạn có thể xem các trang web chính mình ở đây:

Trong câu hỏi ban đầu của bạn, bạn đã hỏi những lợi thế của cổ điển là gì bsdtarvà tôi không chắc có thực sự có gì không. Lần duy nhất nó thực sự quan trọng là nếu bạn đang cố gắng viết các kịch bản shell cần hoạt động trên tất cả các hệ thống; bạn cần chắc chắn rằng những gì bạn vượt qua tarthực sự hợp lệ trong tất cả các biến thể.

GNUtar, libarchive'S bsdtar, cổ điển bsdtar, starBusyBox' s tarchắc chắn việc triển khai tar rằng bạn sẽ chạy vào hầu hết thời gian, nhưng tôi chắc chắn có những người khác trên mạng (QNX đầu chẳng hạn). libarchive/ GNUtar/ starlà các tính năng được đóng gói nhiều nhất, nhưng theo nhiều cách, chúng đã sai lệch từ các tiêu chuẩn ban đầu (có thể là tốt hơn).


15

BSDTAR vs TAR cộng với nhiều hơn nữa

Đây là một lợi ích !!

Tôi sẽ đi vào 5 chủ đề ở đây (và đi ra khỏi chủ đề, nhưng nó cũng sẽ bao gồm những gì bạn muốn):

  1. bsdtar vs tar
  2. tập tin thưa thớt vs không
  3. tập tin dày và mỏng với btrfs
  4. tập tin dày và mỏng mà không có btrfs
  5. khác nhau giữa dày và mỏng và cách nó không áp dụng cho chỉ lun

bsdtar xử lý các tập tin thưa thớt tốt hơn sau đó tar thường xuyên

  • bsdtar sẽ lấy tất cả các số không và chỉ cần siêu dữ liệu
  • tar thực sự sẽ xử lý mọi số không

* ví dụ: hãy tưởng tượng một tệp thưa thớt 20 tb (được gọi là biglun) với 10 megs dữ liệu trong suốt 20 tb spzzyfile (biglun) ... bây giờ vì đây là một tệp thưa thớt nên nó sẽ chỉ chiếm 10 megs trên ổ đĩa.

Cách tạo một tệp thưa thớt:

Tập tin thưa thớt - cách tạo ra nó - phát hiện ra nó - mọi thứ Các tập tin thưa thớt giống như các lun "mỏng" (nếu bạn sử dụng nó cho một lun). "dày" lun sẽ là câu chuyện khác nhau.

* quay lại chủ đề:

  • tăng tốc độ biglun sẽ khiến tar đi qua tất cả 10 megs cùng với tất cả ~ 20tb tệ hơn của các số 0 lan truyền trên lun ... sẽ mất một thời gian tôi đoán, và tệp tar sẽ khá lớn. Ngoài ra - giải nén nó - Tôi chưa bao giờ thực hiện trích xuất một tập tin tar của một tập tin thưa thớt, nhưng nó có thể không đẹp; Tôi có thể sai ở đây.

  • bsdtarring biglun sẽ chỉ xử lý 10 megs dữ liệu và tạo siêu dữ liệu nhỏ cho ~ 20 tb số không.

Lợi ích? Vâng rất nhiều trong số họ; Tôi chỉ viết một số ở trên.

Nó tương tự như rsync vs cp

  • Ngoài ra, nếu bạn rsync một tệp thưa thớt khổng lồ, nó sẽ hoạt động như tar
  • Nếu bạn cp một tệp khổng lồ, nó sẽ tự động hoạt động như bsdtar (bạn có thể thay đổi hành vi của cp để đi qua các số 0 hoặc không đi qua các số 0)

Cá nhân, tôi thích tưởng tượng các tập tin thưa thớt như lun mỏng và các tập tin thông thường như lun dày ...

Chủ đề tiếp theo là BTRFS mỏng vs dày dầy:

  • Với các hệ thống tệp như BTRFS , các lun mỏng là các tệp thưa thớt (làm cho nó bị cắt bớt, như trong tài liệu wiki).

     truncate -s <size in kilobytes> filename
    

    mẹo: sao lưu bằng bsdtar , sao chép bằng cp

  • lun dày là các tệp thông thường có thuộc tính + C (+ C sao cho nó không có COW, sao chép trên ghi, để tất cả các ghi chủ yếu bám sát vào nơi được phân bổ và không có ghi mới nào xảy ra cho tệp đó khi có ghi đè hoặc xóa - nghiên cứu COWBTRFS ). Thay vì tạo tập tin với cắt ngắn, hãy tạo nó bằng "fallocate -l"

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

    mẹo: sao lưu bằng bsdtar hoặc tar, sao chép bằng rsync hoặc cp

chủ đề tiếp theo là EXT mỏng vs dày dầy:

  • lun mỏng mà thưa thớt

    truncate -s <size in kilobytes> filename
    

    mẹo: sao lưu bằng bsdtar , sao chép bằng cp

  • lun dày là các tệp thông thường có thuộc tính + C (+ C sao cho nó không có COW, sao chép trên ghi, để tất cả các ghi chủ yếu bám quanh nơi được phân bổ và không có ghi mới nào xảy ra cho tệp đó khi có ghi đè hoặc xóa - nghiên cứu COWBTRFS ). Thay vì tạo tập tin với cắt ngắn, hãy tạo nó bằng "fallocate -l"

    touch filename
    fallocate -l <size in kilobytes> filename
    

    mẹo: sao lưu bằng bsdtar hoặc tar, sao chép bằng rsync hoặc cp

tập tin dày và mỏng

  • lun / tập tin dày, điền dữ liệu của họ từ 0 đến kích thước được phân bổ, siêu dữ liệu giả vờ vị trí của 0. Khi bạn điền dữ liệu, dữ liệu sẽ đầy
  • lun / tập tin dày: điền dữ liệu của họ khi bắt đầu bằng 0 hoặc bất cứ điều gì (số 0 lười biếng hoặc số không háo hức) - những thiết lập này đặt trước (hoặc như ZFS muốn gọi các phản hồi)

BÀI VIẾT PHẦN MỀM TẠI ĐÂY mô tả sự lười biếng và háo hức bằng không với các tệp / tệp dày: https://cransities.vmware.com/message/2199576

tiền boa

hãy nhớ dày và mỏng không chỉ áp dụng cho lun, nó cũng có thể trên các tệp, hệ thống tệp zfs (chia sẻ / khối lượng / lun) và tôi chắc chắn những thứ khác (chỉ cần nhìn vào zfs).


1
Đẹp và kỹ lưỡng. Chào mừng bạn đến với trang web ...
Eyoung100

1
- thưa thớt với bất kỳ tar nào: Chỉ cần chuyển -S cho hầu hết các triển khai tar, tất cả họ đã hỗ trợ nó trong một thời gian dài. - thưa thớt với rsync: một lần nữa, vượt qua - thưa thớt, nó hoạt động. Nhược điểm của việc sử dụng bất kỳ phát hiện thưa thớt nào là công cụ phải thực sự đọc các khối nhiều hơn, điều này có thể giới thiệu rất nhiều CPU (đặc biệt trong các trường hợp chạy xen kẽ 0 / khác không).
robbat2

Sử dụng bsdtar vẫn tốt hơn, mặc dù gnu tar hỗ trợ cờ thưa thớt, bởi vì bsdtar biết cách bỏ qua các lỗ thưa thớt, mà không xử lý chúng (ví dụ: nếu bạn có tệp thưa 1 TB chỉ với 1k dữ liệu, bsdtar sẽ xử lý 1k dữ liệu. Gnu tar sẽ xử lý 1TB.
Moveaway00

13

Từ mô tả gói Ubuntu ( http://packages.ubfox.com/de/lucid/bsdtar )

"Chương trình bsdtar có một số lợi thế so với việc triển khai tar trước đây:

  • Thư viện. Vì chức năng cốt lõi là trong một thư viện, nó có thể được sử dụng bởi các công cụ khác, chẳng hạn như pkg_add.
  • Tự động phát hiện định dạng. Libarchive tự động phát hiện nén (none / gzip / bzip2) và định dạng (tar cũ, ustar, gnutar, pax, cpio, iso9660, zip) khi đọc tài liệu lưu trữ. Nó làm điều này cho bất kỳ nguồn dữ liệu.
  • Hỗ trợ định dạng trao đổi Pax. Đây là một phần mở rộng POSIX / SUSv3 cho định dạng tar "ustar" cũ, thêm các thuộc tính mở rộng tùy ý cho mỗi mục. Liệu mọi thứ mà định dạng GNU tar làm được, chỉ tốt hơn.
  • Xử lý cờ tệp, ACL, tên đường dẫn tùy ý, vv Định dạng trao đổi Pax hỗ trợ các thuộc tính khóa / giá trị bằng cách sử dụng một kỹ thuật dễ dàng mở rộng. Tên đường dẫn tùy ý, tên nhóm, tên người dùng, kích thước tệp là một phần của tiêu chuẩn POSIX; libarchive mở rộng điều này với sự hỗ trợ cho cờ tập tin, ACL và số thiết bị tùy ý.
  • Hỗ trợ GNU GNU. Libarchive đọc hầu hết các tài liệu lưu trữ tar của GNU. Nếu có nhu cầu, điều này có thể được cải thiện hơn nữa. "

1

Sau đây là dựa trên việc đọc, không phải trải nghiệm - Tôi mới bắt đầu với Freebsd nên tôi gần như không có kinh nghiệm thực sự với nó (Tôi đến từ chủ yếu là Linux). Tôi xin lỗi (và khiêm tốn sửa chữa) nếu tôi bỏ lỡ điều gì đó quan trọng và điều tôi nói ở đây là rác rưởi ...

Từ việc tôi đọc các trang hướng dẫn (gần đây nhất là trang giới thiệu ở trên http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ) tar Freebsd thiếu (-d, --diff , - máy tính) khả năng. Điều này không có gì đáng ngạc nhiên, vì các tác giả của Freebsd dump / restore dường như cũng không cung cấp bất cứ thứ gì như thế này.

Tôi không biết chắc chắn liệu tar Gnu sẽ kết hợp tất cả các siêu dữ liệu UFS như Freebsd tar được cho là hay không, và đây là một vấn đề quan trọng. Nhưng theo sở thích của tôi, tôi KHÔNG BAO GIỜ có thể coi một bãi chứa được hoàn thành cho đến khi tôi đã lưu trữ một tổng MD5 của tệp đầu ra, VÀ THÌ so sánh tệp kết xuất với dữ liệu mà tôi đã cho là đã đổ. Các vấn đề khác nhau có thể dẫn đến dữ liệu bị đổ khác với dữ liệu trên đĩa. (Không chỉ thay đổi tệp, mà là lỗi đĩa, lỗi bộ nhớ, lỗi máy, v.v. Tất cả những điều đó đã thực sự xảy ra với tôi.)

Theo ý kiến ​​riêng của tôi, điều này làm cho Gnu tar trở thành lựa chọn duy nhất cho đến nay tôi đã tìm thấy để tạo bản sao lưu thực sự trên hệ thống Freebsd.

Tôi rất muốn học cách khác, FWIW. Tôi muốn sử dụng các tiện ích gốc ít nhất để sao chép phân vùng và sao lưu phục hồi cứng. Nhưng nếu người ta không thể xác minh tính đúng đắn của bãi chứa thì tôi sẽ không thấy vấn đề gì trong việc tạo ra nó.


1
  • bsdtar có thể đọc và các thành viên tar đến từ các tài liệu lưu trữ khác bằng @archivecú pháp

  • GNU tar có --deletetùy chọn - mặc dù gần đây, tôi thấy rằng nó có thể làm hỏng kho lưu trữ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.