Có một tar hoặc cpio thông minh hơn ngoài kia để lấy một cách hiệu quả một tập tin được lưu trữ trong kho lưu trữ không?


24

Tôi đang sử dụng tarđể lưu trữ một nhóm các tệp rất lớn (nhiều GB) bz2.

Nếu tôi sử dụng tar -tf file.tarđể liệt kê các tệp trong kho lưu trữ, việc này sẽ mất rất nhiều thời gian để hoàn thành (~ 10-15 phút).

Tương tự như vậy, cpio -t < file.cpiochỉ mất bao lâu để hoàn thành, cộng hoặc trừ một vài giây.

Theo đó, việc truy xuất một tệp từ kho lưu trữ ( tar -xf file.tar myFileOfInterest.bz2ví dụ thông qua ) là chậm.

Có một phương pháp lưu trữ ngoài kia để giữ một "danh mục" có sẵn với kho lưu trữ, để một tệp riêng lẻ trong kho lưu trữ có thể được lấy ra một cách nhanh chóng?

Ví dụ, một số loại danh mục lưu trữ một con trỏ tới một byte cụ thể trong kho lưu trữ, cũng như kích thước của tệp sẽ được truy xuất (cũng như bất kỳ chi tiết cụ thể nào về hệ thống tệp).

Có một công cụ (hoặc đối số tarhoặc cpio) cho phép truy xuất hiệu quả một tệp trong kho lưu trữ không?

Câu trả lời:


15

tar (và cpio và afio và pax và các chương trình tương tự) là các định dạng hướng luồng - chúng được dự định truyền trực tiếp đến một băng hoặc được dẫn vào một quy trình khác. trong khi, về mặt lý thuyết, có thể thêm một chỉ mục vào cuối tệp / luồng, tôi không biết bất kỳ phiên bản nào có (mặc dù đó sẽ là một cải tiến hữu ích)

nó sẽ không giúp với kho lưu trữ tar hoặc cpio hiện tại của bạn, nhưng có một công cụ khác, dar ("lưu trữ đĩa"), tạo các tệp lưu trữ chứa chỉ mục đó và có thể cho phép bạn truy cập trực tiếp vào các tệp riêng lẻ trong kho lưu trữ .

nếu dar không được bao gồm trong unix / linux-dist của bạn, bạn có thể tìm thấy nó tại:

http://dar.linux.free.fr/


Có cách nào để trích xuất một sản phẩm tiêu chuẩn? Dường như có một cách để tạo một kho lưu trữ từ đầu vào tiêu chuẩn, nhưng không phải là một cách (ít nhất là không trực tiếp) để trích xuất thành đầu ra tiêu chuẩn. Không rõ tài liệu nếu có cách nào để làm điều này. Bạn có biết làm thế nào điều này có thể được thực hiện?
Alex Reynold

1
Không, không biết. Tôi thực sự không sử dụng dar mình ... tôi chỉ biết rằng nó tồn tại. Tôi đủ hài lòng với tar và có xu hướng chỉ tạo các tệp văn bản liệt kê nội dung cho các tệp tar lớn mà tôi có thể muốn tìm kiếm sau này. bạn có thể làm điều này cùng lúc với việc tạo tệp lưu trữ tar bằng cách sử dụng tùy chọn v hai lần (ví dụ: "tar cvvjf /tmp/foo.tar.bz2 / path / to / backup> /tmp/foo.txt")
cas

10

Bạn có thể sử dụng SquashFS cho các tài liệu lưu trữ như vậy. Nó là

  • được thiết kế để được truy cập bằng trình điều khiển cầu chì (mặc dù tồn tại giao diện truyền thống)
  • nén (kích thước khối càng lớn thì càng hiệu quả)
  • bao gồm trong nhân Linux
  • lưu trữ UID / GID và thời gian tạo
  • nhận biết endianess, do đó khá di động

Hạn chế duy nhất tôi biết là nó chỉ đọc.

http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html


8

Mặc dù nó không lưu trữ một chỉ mục, nhưng starđược dự định là nhanh hơn tar. Thêm vào đó, nó hỗ trợ tên tệp dài hơn và hỗ trợ tốt hơn cho các thuộc tính tệp.

Như tôi chắc chắn rằng bạn biết, việc giải nén tệp mất nhiều thời gian và có thể sẽ là một yếu tố trong tốc độ trích xuất ngay cả khi có một chỉ mục.

Chỉnh sửa: Bạn cũng có thể muốn xem qua xar. Nó có một tiêu đề XML chứa thông tin về các tệp trong kho lưu trữ.

Từ trang được tham chiếu:

Tiêu đề XML của Xar cho phép nó chứa siêu dữ liệu tùy ý về các tệp có trong kho lưu trữ. Ngoài siêu dữ liệu tệp unix tiêu chuẩn như kích thước của tệp và thời gian sửa đổi và tạo, xar có thể lưu trữ thông tin như bit tệp ext2fs và hfs, cờ unix, tham chiếu đến các thuộc tính mở rộng, thông tin Mac OS X Finder, Mac OS Xĩa tài nguyên và băm dữ liệu tệp.


+1 để cảnh báo tôi về một công cụ âm thanh hữu ích mà tôi chưa từng nghe thấy trước đây.
cas

Liên kết đã starngừng hoạt động ......
Pacerier

5

Thorbjørn Ravn Anderser đã đúng. GNU tar tạo tài liệu lưu trữ "có thể tìm kiếm" theo mặc định. Nhưng nó không sử dụng thông tin đó khi nó đọc các tài liệu lưu trữ này nếu tùy chọn -n không được đưa ra. Với tùy chọn -n, tôi chỉ trích xuất tệp 7 GB từ kho lưu trữ 300 GB trong thời gian cần thiết để đọc / ghi 7 GB. Không có -n nó mất hơn một giờ và không có kết quả.

Tôi không chắc cách nén ảnh hưởng đến điều này. Kho lưu trữ của tôi không bị nén. Lưu trữ nén không "có thể tìm kiếm" được vì hiện tại (1.26) GNU tar giảm tải nén cho chương trình bên ngoài.


theo trang tar man man7.org/linux/man-pages/man1/tar.1.html , GNU tar theo mặc định sẽ sử dụng định dạng có thể tìm kiếm khi viết và nếu lưu trữ có thể tìm kiếm được, sẽ sử dụng nó khi đọc (cho danh sách hoặc trích xuất). Nếu bạn đang sử dụng GNU tar và vẫn thấy sự cố, bạn nên gửi báo cáo lỗi với GNU.
Brian Minton

6
Nếu tôi đọc hướng dẫn một cách chính xác, nó không bao giờ nói rằng nó có bất kỳ loại chỉ mục nào và có thể chuyển đến bất kỳ tệp nào trong kho lưu trữ được cung cấp tên tệp. --seek chỉ có nghĩa là phương tiện cơ bản có thể tìm kiếm được, do đó, khi nó đọc từ đầu, nó có thể bỏ qua việc đọc nội dung tệp, nhưng nó vẫn cần đọc các tiêu đề mục nhập từ đầu. Điều đó nói rằng, nếu bạn có một kho lưu trữ với các tệp 1M và bạn cố gắng giải nén tệp cuối cùng, với - không tìm kiếm, bạn cần đọc nội dung của tất cả các tệp; với --seek, bạn chỉ cần đọc các tiêu đề 1M, một tiêu đề cho mỗi tệp, nhưng nó vẫn siêu chậm.
icando

4

Định dạng lưu trữ duy nhất mà tôi biết về việc lưu trữ một chỉ mục là ZIP, vì tôi đã phải xây dựng lại các chỉ mục bị hỏng nhiều lần.


2

Nó không lập chỉ mục mà tôi biết, nhưng tôi sử dụng kết xuất và khôi phục với các tệp lớn và điều hướng cây khôi phục trong chế độ tương tác để chọn các tệp ngẫu nhiên RẤT nhanh.


2

Bạn có thể sử dụng định dạng nén / lưu trữ 7z (7zip) nếu bạn có quyền truy cập p7zip-fullgói.

Trên Ubuntu, bạn có thể sử dụng lệnh này để cài đặt nó:

$ sudo apt-get install p7zip-full

Để tạo một kho lưu trữ, bạn có thể sử dụng 7z a <archive_name> <file_or_directory>và nếu bạn không muốn nén các tệp và chỉ muốn "lưu trữ" chúng theo nguyên trạng, bạn có thể sử dụng -mx0tùy chọn như:

$ 7z a -mx0 myarchive.7z myfile.txt

Creating archive myarchive.7z

Sau đó, bạn có thể trích xuất các tệp bằng cách sử dụng 7z e:

$ 7z e myarchive.7z

Processing archive: myarchive.7z
Extracting  myfile.txt

Hoặc bạn có thể liệt kê chỉ mục của kho lưu trữ với 7z ltiện ích tìm kiếm với grep:

$ 7z l myarchive.7z | grep

2014-07-08 12:13:39 ....A            0            0  myfile.txt

Đây cũng là ttùy chọn để kiểm tra tính toàn vẹn, uđể thêm / cập nhật tệp vào kho lưu trữ và dxóa tệp.

LƯU Ý QUAN TRỌNG
Đỗ không sử dụng định dạng 7zip cho linux hệ thống tập tin sao lưu vì nó không lưu trữ các chủ sở hữu và nhóm các tập tin chứa.


Đối với Linux, sẽ ổn khi 7zip một tệp tar.
Thorbjørn Ravn Andersen

1

Tôi tin tưởng GNU tar có khả năng làm những gì bạn muốn, nhưng tôi không thể xác định được tài nguyên dứt khoát nói như vậy.

Trong mọi trường hợp, bạn cần một định dạng lưu trữ với một chỉ mục (vì điều đó sẽ cho phép bạn làm những gì bạn muốn). Thật không may, tôi tin rằng các tệp ZIP có thể phát triển quá lớn.


Các tập tin ZIP có thể phát triển lớn .
Pacerier

1
Nếu tôi đọc hướng dẫn một cách chính xác, nó không bao giờ nói rằng nó có bất kỳ loại chỉ mục nào và có thể chuyển đến bất kỳ tệp nào trong kho lưu trữ được cung cấp tên tệp. --seek chỉ có nghĩa là phương tiện cơ bản có thể tìm kiếm được, do đó, khi nó đọc từ đầu, nó có thể bỏ qua việc đọc nội dung tệp, nhưng nó vẫn cần đọc các tiêu đề mục nhập từ đầu. Điều đó nói rằng, nếu bạn có một kho lưu trữ với các tệp 1M và bạn cố gắng giải nén tệp cuối cùng, với - không tìm kiếm, bạn cần đọc nội dung của tất cả các tệp; với --seek, bạn chỉ cần đọc các tiêu đề 1M, một tiêu đề cho mỗi tệp, nhưng nó vẫn siêu chậm.
icando

2
@Pacerier Theo hiểu biết của tôi, định dạng ZIP64 cho phép các tệp rất lớn, nhưng định dạng ZIP gốc thì không.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen, Một tệp 4 GBmột anh chàng to lớn .
Pacerier 11/03/2015

3
@Pacerier 4GB không phải là lớn kể từ khi DVD ISO xuất hiện gần hai mươi năm trước. Ngày nay, Terrabytes rất lớn.
oligofren
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.