มี tar ที่ชาญฉลาดหรือ cpio ในการดึงไฟล์ที่เก็บไว้ในไฟล์เก็บถาวรได้อย่างมีประสิทธิภาพหรือไม่?


24

ฉันใช้tarในการเก็บกลุ่มขนาดใหญ่มาก (Multi-GB) กbz2ไฟล์

ถ้าฉันใช้tar -tf file.tarเพื่อแสดงรายการไฟล์ภายในไฟล์เก็บถาวรการดำเนินการนี้ใช้เวลานานมากในการดำเนินการให้เสร็จสมบูรณ์ (~ 10-15 นาที)

เช่นเดียวกันcpio -t < file.cpioใช้เวลานานพอที่จะทำให้เสร็จสมบูรณ์บวกหรือลบสองสามวินาที

ดังนั้นการดึงไฟล์จากไฟล์เก็บถาวร (ผ่านtar -xf file.tar myFileOfInterest.bz2ตัวอย่าง) จึงช้า

มีวิธีการเก็บถาวรที่เก็บ "แค็ตตาล็อก" พร้อมกับเก็บถาวรเพื่อให้แต่ละไฟล์ภายในเก็บถาวรสามารถดึงข้อมูลได้อย่างรวดเร็ว?

ตัวอย่างเช่นแคตตาล็อกบางประเภทที่เก็บตัวชี้ไปยังไบต์เฉพาะในไฟล์เก็บถาวรรวมถึงขนาดของไฟล์ที่จะเรียกคืน (เช่นเดียวกับรายการเฉพาะระบบไฟล์อื่น ๆ )

มีเครื่องมือ (หรืออาร์กิวเมนต์ไปที่tarหรือcpio) ที่อนุญาตให้เรียกไฟล์ที่มีประสิทธิภาพภายในไฟล์เก็บถาวรได้หรือไม่?

คำตอบ:


15

tar (และ cpio และ afio และ pax และโปรแกรมที่คล้ายกัน) เป็นรูปแบบการสตรีม - โดยมีวัตถุประสงค์เพื่อสตรีมโดยตรงไปยังเทปหรือส่งไปยังกระบวนการอื่น ในทางทฤษฎีแล้วมันเป็นไปได้ที่จะเพิ่มดัชนีในตอนท้ายของไฟล์ / สตรีมฉันไม่รู้เวอร์ชั่นใด ๆ ที่ทำ (มันจะเป็นการปรับปรุงที่มีประโยชน์)

มันจะไม่ช่วยในการเก็บถาวร tar หรือ cpio ที่มีอยู่ของคุณ แต่มีเครื่องมืออื่น dar ("disk archive") ที่สร้างไฟล์เก็บถาวรที่มีดัชนีดังกล่าวและสามารถให้คุณเข้าถึงไฟล์แต่ละไฟล์ได้โดยตรง .

หาก dar ไม่ได้รวมอยู่ใน unix / linux-dist ของคุณคุณสามารถค้นหาได้ที่:

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


มีวิธีในการสกัดท่อไปยังเอาต์พุตมาตรฐานหรือไม่ ดูเหมือนว่าจะมีวิธีสร้างไฟล์เก็บถาวรจากอินพุตมาตรฐาน แต่ไม่ใช่วิธี (อย่างน้อยไม่ใช่โดยตรง) เพื่อแยกไปยังเอาต์พุตมาตรฐาน ยังไม่ชัดเจนจากเอกสารหากมีวิธีการทำเช่นนี้ คุณรู้หรือไม่ว่าวิธีนี้จะสำเร็จได้อย่างไร
Alex Reynolds

1
ไม่ทราบ ฉันไม่ได้ใช้ดาร์เองจริง ๆ ... ฉันเพิ่งรู้ว่ามันมีอยู่ ฉันมีความสุขกับ tar และมีแนวโน้มที่จะสร้างไฟล์ข้อความที่แสดงรายการเนื้อหาสำหรับไฟล์ tar ขนาดใหญ่ที่ฉันอาจต้องการค้นหาในภายหลัง คุณสามารถทำได้ในเวลาเดียวกันกับการสร้างไฟล์เก็บถาวร tar โดยใช้ตัวเลือก v สองครั้ง (เช่น "tar cvvjf /tmp/foo.tar.bz2 / พา ธ / ไปยัง / สำรองข้อมูล> /tmp/foo.txt")
cas

10

คุณสามารถใช้ SquashFS สำหรับคลังเก็บเช่น มันคือ

  • ออกแบบมาเพื่อให้เข้าถึงได้โดยใช้ไดรเวอร์ฟิวส์ (แม้ว่าจะมีอินเตอร์เฟสดั้งเดิมอยู่)
  • บีบอัด (ยิ่งบล็อกใหญ่ยิ่งมีประสิทธิภาพมากขึ้น)
  • รวมอยู่ในเคอร์เนล Linux
  • เก็บ UIDs / GID และเวลาในการสร้าง
  • endianess ตระหนักจึงพกพาค่อนข้าง

ข้อเสียเปรียบอย่างเดียวที่ฉันรู้ก็คือมันเป็นแบบอ่านอย่างเดียว

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


8

ในขณะที่มันจะไม่จัดเก็บดัชนีมีเจตนาที่จะเร็วกว่าstar tarนอกจากนี้ยังรองรับชื่อไฟล์ที่ยาวกว่าและรองรับคุณสมบัติไฟล์ได้ดีขึ้น

เนื่องจากฉันแน่ใจว่าคุณทราบแล้วการคลายการบีบอัดไฟล์ต้องใช้เวลาและอาจเป็นปัจจัยในความเร็วของการแตกไฟล์แม้ว่าจะมีดัชนีก็ตาม

แก้ไข:xarนอกจากนี้คุณยังอาจต้องการที่จะดูที่ มีส่วนหัว XML ที่มีข้อมูลเกี่ยวกับไฟล์ในไฟล์เก็บถาวร

จากหน้าอ้างอิง:

ส่วนหัวของ XML ของ Xar อนุญาตให้มีข้อมูลเมตาโดยพลการเกี่ยวกับไฟล์ที่อยู่ในไฟล์เก็บถาวร นอกเหนือจากข้อมูลเมตาของไฟล์ unix มาตรฐานเช่นขนาดของไฟล์และเวลาในการแก้ไขและการสร้าง xar สามารถจัดเก็บข้อมูลเช่นบิตไฟล์ ext2fs และ hfs, แฟล็ก unix, การอ้างอิงถึงแอตทริบิวต์ที่ขยายเพิ่ม, ข้อมูล Finder Mac OS X, Mac OS ส้อมทรัพยากร X และแฮชของข้อมูลไฟล์


+1 สำหรับการแจ้งเตือนฉันไปยังเครื่องมือทำให้เกิดเสียงที่มีประโยชน์ซึ่งฉันไม่เคยได้ยินมาก่อน
cas.

การเชื่อมโยงของstarลง ......
Pacerier

5

Thorbjørn Ravn Anderserถูกต้อง GNU tar สร้างคลังข้อมูล "ที่ค้นหาได้" โดยค่าเริ่มต้น แต่จะไม่ใช้ข้อมูลนั้นเมื่ออ่านไฟล์เก็บถาวรเหล่านี้หากไม่ได้รับตัวเลือก -n ด้วยตัวเลือก -n ฉันเพิ่งแตกไฟล์ 7GB จากไฟล์เก็บถาวร 300GB ในเวลาที่จำเป็นในการอ่าน / เขียน 7GB หากไม่มี - ใช้เวลามากกว่าชั่วโมงและไม่ได้ผลลัพธ์

ฉันไม่แน่ใจว่าการบีบอัดมีผลกับสิ่งนี้อย่างไร ที่เก็บถาวรของฉันไม่ถูกบีบอัด ไฟล์บีบอัดไม่สามารถ "ค้นหาได้" เพราะปัจจุบัน (1.26) GNU tar ลดการบีบอัดข้อมูลลงในโปรแกรมภายนอก


ตามหน้า man tar man7.org/linux/man-pages/man1/tar.1.html , tar GNU โดยค่าเริ่มต้นจะใช้รูปแบบที่ค้นหาได้เมื่อเขียนและหากเก็บถาวรหาได้จะใช้เมื่ออ่าน (สำหรับ รายการหรือแยก) หากคุณใช้ GNU tar และยังพบปัญหาอยู่คุณควรยื่นรายงานข้อผิดพลาดกับ GNU
Brian Minton

7
ถ้าฉันอ่านคู่มืออย่างถูกต้องมันก็ไม่เคยบอกว่ามันมีดัชนีแบบใดและสามารถข้ามไปยังไฟล์ใดก็ได้ภายในไฟล์เก็บถาวรที่มีชื่อไฟล์ - เพียงแค่หมายถึงสื่อพื้นฐานที่สามารถค้นหาได้ดังนั้นเมื่อมันอ่านตั้งแต่ต้นมันสามารถข้ามการอ่านเนื้อหาไฟล์ แต่ก็ยังต้องอ่านส่วนหัวของรายการจากจุดเริ่มต้น ที่กล่าวว่าหากคุณมีไฟล์เก็บถาวรที่มีไฟล์ 1M และคุณพยายามที่จะแยกไฟล์ล่าสุดด้วย - ไม่มีการค้นหาคุณจำเป็นต้องอ่านเนื้อหาของไฟล์ทั้งหมด ด้วย --seek คุณจะต้องอ่าน 1M ส่วนหัวหนึ่งรายการสำหรับแต่ละไฟล์ แต่ก็ยังช้ามาก
icando

4

รูปแบบไฟล์เก็บถาวรเดียวที่ฉันรู้จักที่เก็บดัชนีคือ ZIP เพราะฉันต้องสร้างดัชนีที่เสียหายมากกว่าหนึ่งครั้ง


2

ไม่ใช่ดัชนีที่ฉันรู้ แต่ฉันใช้การถ่ายโอนข้อมูล & เรียกคืนด้วยไฟล์ขนาดใหญ่และการนำทางต้นไม้การกู้คืนในโหมดโต้ตอบเพื่อเลือกไฟล์แบบสุ่มนั้นเร็วมาก


2

คุณสามารถใช้รูปแบบการเก็บถาวร / การบีบอัด 7z (7zip) หากคุณมีสิทธิ์เข้าถึงp7zip-fullแพ็คเกจ

บน Ubuntu คุณสามารถใช้คำสั่งนี้เพื่อติดตั้ง:

$ sudo apt-get install p7zip-full

ในการสร้างไฟล์เก็บถาวรคุณสามารถใช้7z a <archive_name> <file_or_directory>และหากคุณไม่ต้องการบีบอัดไฟล์และต้องการเพียงแค่ "จัดเก็บ" ตามที่เป็นอยู่คุณสามารถใช้-mx0ตัวเลือกดังนี้:

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

Creating archive myarchive.7z

จากนั้นคุณสามารถแตกไฟล์โดยใช้7z e:

$ 7z e myarchive.7z

Processing archive: myarchive.7z
Extracting  myfile.txt

หรือคุณสามารถแสดงรายการดัชนีของที่เก็บถาวร7z lซึ่งมีประโยชน์สำหรับการค้นหาด้วยgrep:

$ 7z l myarchive.7z | grep

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

นี่เป็นtตัวเลือกในการทดสอบความสมบูรณ์ของuการเพิ่ม / อัปเดตไฟล์ในไฟล์เก็บถาวรและdเพื่อลบไฟล์

หมายเหตุสำคัญ
ทำไม่ได้ใช้รูปแบบ 7zip สำหรับลินุกซ์ระบบแฟ้มสำรองข้อมูลที่มันไม่ได้เก็บเจ้าของและกลุ่มของไฟล์ที่มีอยู่


สำหรับ Linux มันน่าจะดีถึง 7zip ไฟล์ tar
Thorbjørn Ravn Andersen

1

ฉันเชื่อว่า GNU tar สามารถทำสิ่งที่คุณต้องการได้ แต่ฉันไม่สามารถหาแหล่งข้อมูลที่ชัดเจนได้

ไม่ว่าในกรณีใดคุณต้องมีรูปแบบการเก็บถาวรพร้อมดัชนี (เนื่องจากจะทำให้คุณสามารถทำสิ่งที่คุณต้องการ) ฉันไม่เชื่อว่าไฟล์ ZIP สามารถเติบโตได้ขนาดใหญ่อย่างน่าเสียดาย


ไฟล์ ZIP สามารถเจริญเติบโตได้ขนาดใหญ่
Pacerier

1
ถ้าฉันอ่านคู่มืออย่างถูกต้องมันก็ไม่เคยบอกว่ามันมีดัชนีแบบใดและสามารถข้ามไปยังไฟล์ใดก็ได้ภายในไฟล์เก็บถาวรที่มีชื่อไฟล์ - เพียงแค่หมายถึงสื่อพื้นฐานที่สามารถค้นหาได้ดังนั้นเมื่อมันอ่านตั้งแต่ต้นมันสามารถข้ามการอ่านเนื้อหาไฟล์ แต่ก็ยังต้องอ่านส่วนหัวของรายการจากจุดเริ่มต้น ที่กล่าวว่าหากคุณมีไฟล์เก็บถาวรที่มีไฟล์ 1M และคุณพยายามที่จะแยกไฟล์ล่าสุดด้วย - ไม่มีการค้นหาคุณจำเป็นต้องอ่านเนื้อหาของไฟล์ทั้งหมด ด้วย --seek คุณจะต้องอ่าน 1M ส่วนหัวหนึ่งรายการสำหรับแต่ละไฟล์ แต่ก็ยังช้ามาก
icando

2
@Pacerier ความเข้าใจของฉันในรูปแบบ ZIP64 ทำให้ไฟล์มีขนาดใหญ่มาก แต่รูปแบบ ZIP ดั้งเดิมไม่ได้
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen ไฟล์4 GBไฟล์เดียวคือเพื่อนใหญ่
Pacerier

3
@Pacerier 4GB ยังไม่ใหญ่นักเนื่องจาก DVD ISOs เข้ามาเกือบยี่สิบปีที่แล้ว เทอราไบต์มีขนาดใหญ่มากในปัจจุบัน
oligofren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.