ทางเลือกที่รวดเร็วกว่าสำหรับ ArchiveMount?


15

ในขณะนี้ฉันกำลังใช้ArchiveMountเพื่อเมานต์ไฟล์เก็บถาวร 123,000 kb ที่มีมากกว่า 3 ล้านไฟล์ภายใน จนถึงตอนนี้ได้ติดตั้งนานกว่า 5 ชั่วโมงและยังไม่เสร็จสิ้น

มีวิธีที่ดีกว่าในการเมานต์.tar.gzไฟล์หรือไม่? ฉันกำลังพยายามเมานต์ไปยังโฟลเดอร์และไม่มีการบีบอัดใช้เวลาสองสามกิ๊ก ฉันไม่จำเป็นต้องใช้โหมดการเขียนเพียงแค่อ่านอย่างเดียวก็เพียงพอแล้ว


นอกจากนี้ยังมีAVFS ; ฉันไม่รู้ว่ามันจะทำงานได้ดีขึ้นหรือไม่
Gilles 'หยุดความชั่วร้าย'

8
หากไฟล์ของคุณถูกบีบอัดเป็นโมดูลสควอชแทนที่จะเป็น tarball การเข้าถึงแบบอ่านอย่างเดียวจะเร็วมาก - คุณเพียงแค่ (วน) ติดตั้งโมดูลสควอช ต้องการแพคเกจ squashfs-tools
dru8274

ฉันกำลังเขียนโปรแกรมระบบไฟล์เช่นนี้ รอสองสามเดือนแล้วมันจะไปถึงที่นั่น
FUZxxl

@FUZxxl เป็นเวลา 2 ปีแล้วคุณเคยเขียนโปรแกรมนี้หรือไม่?
cybernard

@cybernard FUSE ทำให้ฉันผิดหวังมากจนฉันเลิกโครงการนี้ไป ฉันเกลียดชิ้นส่วนที่ไม่มีเอกสารนี้ ฉันเก็บสิ่งนี้ไว้ในตัวเผาหลังและอาจนำมันกลับมาในภายหลัง
FUZxxl

คำตอบ:


7

คุณสามารถสร้างรูปภาพสควอชที่ถูกบีบอัดได้

mksquashfs /etc squashfs.img -comp xz
mkdir img
mount -o squashfs,ro squashfs.img img

ในการทำเช่นนี้คุณจะต้องแยก tar.gz archvie ของคุณ

ข้อดีคือภาพมีความผิดปกติดีกว่า gz


6

ปัญหาที่เกิดขึ้นกับรูปแบบคือรูปแบบ TAR (Tape ARchive) ได้รับการออกแบบสำหรับการเข้าถึงตามลำดับไม่ใช่การเข้าถึงแบบสุ่ม และ gzip เป็นส่วนเสริมที่ดีสำหรับ tar เนื่องจากเป็นรูปแบบการบีบอัดที่ใช้สตรีมซึ่งไม่ใช่การเข้าถึงแบบสุ่ม

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

ถ้าคุณอยากให้เรื่องนี้ไปได้เร็วขึ้นทำtar tzf file.tar.gz > filelistให้เปิดรายการไฟล์ที่อยู่ในกลุ่ม , Gedittar xzf file.tar.gz -T filelist -C extracted/หรืออะไรก็ตามลบบรรทัดของไฟล์ที่คุณไม่จำเป็นต้องบันทึกและแล้วดึงพวกเขาด้วย

หากต้องการเข้าถึงไฟล์บีบอัดแบบสุ่มคุณควรใช้ zip พร้อมส่วนขยาย posix, rar หรือตามคำแนะนำของ dru8274, squashfs หรือแม้แต่ ZFS ที่เปิดใช้การบีบอัดหรือ btrfs หาก btrfs มีการบีบอัดให้ทำงานในเวลาที่อ่าน


3
หากต้องการรับการเข้าถึงแบบสุ่มไปยังไฟล์บีบอัดคุณสามารถใช้ pixz
kubanczyk

6

ฉันเขียนratarmountทางเลือกที่เร็วกว่าซึ่ง "ใช้งานได้สำหรับฉัน" เพราะปัญหานี้ทำให้ฉันหยุดชะงัก

คุณสามารถใช้สิ่งนี้:

pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level

เมื่อเสร็จแล้วคุณสามารถ unmount ได้เหมือนเมานต์ FUSE:

fusermount -u mount-folder

ทำไมมันเร็วกว่าจำนวนที่เก็บถาวร?

ขึ้นอยู่กับสิ่งที่คุณวัด

นี่คือมาตรฐานของรอยเท้าหน่วยความจำและเวลาที่จำเป็นสำหรับการติดตั้งครั้งแรกเช่นเดียวกับเวลาในการเข้าถึงcat <file-in-tar>คำสั่งง่าย ๆและfindคำสั่งง่าย ๆ

การเปรียบเทียบเกณฑ์มาตรฐานระหว่าง ratarmount และที่เก็บถาวร

โฟลเดอร์ที่มีไฟล์ 1k แต่ละไฟล์ถูกสร้างขึ้นและจำนวนโฟลเดอร์จะเปลี่ยนแปลง

ที่ต่ำกว่าพล็อตแถบข้อผิดพลาดทางด้านซ้ายแสดงให้เห็นว่าชี้ไปที่ต่ำสุดและสูงสุดวัดครั้งที่cat <file>10 ไฟล์สุ่มเลือก

ไฟล์ค้นหาเวลา

การเปรียบเทียบนักฆ่าคือเวลาที่ใช้ในcat <file>การทำให้เสร็จ ด้วยเหตุผลบางอย่างการทำเช่นนี้จะขยายขนาดเชิงเส้นด้วยขนาดไฟล์ TAR (ประมาณไบต์ต่อไฟล์ x จำนวนไฟล์) สำหรับเก็บถาวรขณะที่มีเวลาคงที่ใน ratarmount สิ่งนี้ทำให้ดูเหมือนว่าที่เก็บถาวรนับไม่สนับสนุนการค้นหาเลยแม้แต่น้อย

สำหรับไฟล์ TAR ที่ถูกบีบอัดจะเห็นได้ชัดเจนเป็นพิเศษ cat <file>ใช้เวลานานกว่าสองเท่าในการติดตั้งไฟล์. tar.bz2 ทั้งหมด! ตัวอย่างเช่นไฟล์ TAR พร้อม 10k empty (!) ใช้เวลา 2.9 วินาทีในการเมานต์ด้วยไฟล์เก็บถาวร แต่ขึ้นอยู่กับไฟล์ที่เข้าถึงได้การเข้าถึงด้วยcatเวลาระหว่าง 3ms ถึง 5 วินาที เวลาที่ใช้ดูเหมือนจะขึ้นอยู่กับตำแหน่งของไฟล์ภายใน TAR ไฟล์ที่ส่วนท้ายของ TAR ใช้เวลานานในการค้นหา ระบุว่า "ค้นหา" ถูกลอกเลียนแบบและเนื้อหาทั้งหมดใน TAR ก่อนที่ไฟล์จะถูกอ่าน

การรับเนื้อหาไฟล์อาจใช้เวลานานกว่าสองเท่าเมื่อติดตั้ง TAR ทั้งหมดโดยไม่คาดคิด อย่างน้อยก็ควรเสร็จในเวลาเดียวกับการติดตั้ง มีคำอธิบายอย่างหนึ่งคือไฟล์กำลังถูกค้นหามากกว่าหนึ่งครั้งบางทีอาจถึงสามครั้ง

ดูเหมือนว่า Ratarmount จะใช้เวลาเท่ากันเสมอในการรับไฟล์เพราะมันรองรับการค้นหาที่แท้จริง สำหรับ bzip2 ที่ถูกบีบอัด TARs มันจะพยายามบล็อก bzip2 ซึ่งมีที่อยู่จะถูกเก็บไว้ในไฟล์ดัชนีด้วย ในทางทฤษฎีส่วนเดียวที่ควรขยายด้วยจำนวนไฟล์คือการค้นหาในดัชนีและควรปรับขนาดด้วย O (log (n)) เนื่องจากมีการเรียงลำดับตามพา ธ และชื่อไฟล์

หน่วยความจำรอยเท้า

โดยทั่วไปถ้าคุณมีไฟล์มากกว่า 20k ใน TAR แล้วรอยเท้าหน่วยความจำของ ratarmount จะเล็กลงเพราะดัชนีจะถูกเขียนลงดิสก์ในขณะที่มันถูกสร้างขึ้น

ข้อยกเว้นเล็กน้อยคือแบ็กเอนด์ตัวถอดรหัส gzip ซึ่งด้วยเหตุผลบางอย่างต้องใช้ความทรงจำมากขึ้นเมื่อ gzip มีขนาดใหญ่ขึ้น โอเวอร์เฮดหน่วยความจำนี้อาจเป็นดัชนีที่จำเป็นสำหรับการค้นหาภายใน TAR แต่จำเป็นต้องมีการตรวจสอบเพิ่มเติมเนื่องจากฉันไม่ได้เขียนแบ็กเอนด์นั้น

ในทางตรงกันข้ามการเก็บถาวรเมานท์จะเก็บดัชนีทั้งหมดซึ่งก็คือเช่น 4GB สำหรับไฟล์ 2M ในหน่วยความจำอย่างสมบูรณ์ตราบใดที่ TAR ถูกเมาท์

เวลาติดตั้ง

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

เวลาที่ต้องการสำหรับการติดตั้งจะทำงานแปลก ๆ ในไฟล์เก็บถาวร เริ่มต้นจากไฟล์ขนาด 20k โดยประมาณมันเริ่มขยายเป็นสองส่วนแทนที่จะเป็นแบบเชิงเส้นเทียบกับจำนวนไฟล์ ซึ่งหมายความว่าเริ่มต้นจากไฟล์ 4M โดยประมาณ ratarmount เริ่มเร็วกว่าเก็บถาวรแม้ว่าไฟล์ TAR ขนาดเล็กจะช้ากว่ามากถึง 10 เท่า! จากนั้นอีกครั้งสำหรับไฟล์ขนาดเล็กมันไม่สำคัญว่าจะใช้เวลา 1 วินาทีหรือ 0.1 วินาทีในการเมาต์ tar (ครั้งแรก)

เวลาในการเมานท์สำหรับไฟล์บีบอัด bz2 นั้นเทียบได้มากที่สุดตลอดเวลา สิ่งนี้มีโอกาสมากเพราะมันถูกผูกไว้ด้วยความเร็วของตัวถอดรหัส bz2 Ratarmount ช้าลงประมาณ 2 เท่า ฉันหวังว่าจะทำให้ ratarmount เป็นผู้ชนะที่ชัดเจนด้วยการใช้ตัวถอดรหัส bz2 ในอนาคตอันใกล้ซึ่งแม้สำหรับระบบ 8 ปีของฉันก็สามารถเพิ่มความเร็วได้ 4x

ได้เวลารับเมตะดาต้าแล้ว

เมื่อเพียงแค่แสดงรายการไฟล์ทั้งหมดที่มีfindอยู่ใน TAR (ค้นหาก็ดูเหมือนว่าจะเรียก stat สำหรับแต่ละไฟล์! ฉันหวังว่าจะปรับปรุงสิ่งนี้ในอนาคต แต่ปัจจุบันดูเหมือนว่าปัญหาการออกแบบเนื่องจากการใช้ Python และ SQLite แทนที่จะเป็นโปรแกรม C บริสุทธิ์


OP จะติดตั้งและใช้สิ่งนี้เพื่อแก้ปัญหาอย่างไร
Jeff Schaller

@JeffSchaller ฉันได้เพิ่มคำแนะนำในการติดตั้งจาก github readme.md
mxmlnkn

0

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

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

หมายเหตุ : สิ่งนี้จะไม่ทำงานในรูปแบบไฟล์เก็บถาวรทั้งหมด


โปรแกรมดูไฟล์เก็บถาวรในตัวของ vim ยังคงต้องการสแกนไฟล์ทั้งหมดเพื่อรับรายชื่อเร็วกว่า avfs และไฟล์เก็บถาวร และการแสดงรายชื่อจำนวนมากของบรรทัดนับล้านก็แย่มากเช่นกัน
把友情留在无盐

0

แนวทางของฉัน หากคุณมีพื้นที่ว่างในดิสก์เพียงพอบนไดรฟ์ USB ภายนอกหรือไดรฟ์ HDD รอง / รองที่มีพื้นที่เพียงพอให้พิจารณาแยกไฟล์. tar.gz ของคุณออก คิดว่าคุณอาจไม่ต้องการไฟล์ 3 ล้านไฟล์ในดิสก์ระบบหลักของคุณเพราะอาจทำให้สิ่งต่าง ๆ ช้าลง ฉันขอแนะนำให้ดิสก์ภายนอกในกรณีนี้มีระบบไฟล์ที่จัดการไฟล์จำนวนมากได้อย่างง่ายดาย: คิด ReiserFS, ext4 (พร้อมตัวเลือก dir_index), XFS หรือ BtrFS อาจใช้เวลา 1-2 ชั่วโมงในการทำสารสกัด แต่คุณสามารถไปทานอาหารกลางวันในเวลาเดียวกันหรือปล่อยให้มันข้ามคืนได้ เมื่อคุณกลับมาการเข้าถึงไฟล์ที่ถูกแตกควรเป็นสิ่งที่ควรกระทำ


ไม่จำเป็นต้องใช้สื่อเพิ่มเติมอุปกรณ์ลูปก็เพียงพอแล้ว
把友情留在无盐
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.