มีวิธีในการใช้ไฟล์ดิสก์ img ที่แบ่งออกเป็นส่วน ๆ และติดตั้งเป็นอุปกรณ์ลูปเดียวหรือไม่?
มีวิธีในการใช้ไฟล์ดิสก์ img ที่แบ่งออกเป็นส่วน ๆ และติดตั้งเป็นอุปกรณ์ลูปเดียวหรือไม่?
คำตอบ:
ฉันไม่คิดว่าคุณสามารถทำได้ แต่ถ้าคุณมีพื้นที่เพียงพอควรทำงาน:
# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k
# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01
# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>
# Mount the new filesystem
mount /dev/md0 /mnt
คุณไม่สามารถสร้างอาร์เรย์ RAID จากไฟล์ดั้งเดิมได้เพียงเพราะดิสก์ RAID มีส่วนหัวเฉพาะซึ่งเก็บจำนวนดิสก์ระดับ RAID ฯลฯ หากคุณทำเช่นนั้นส่วนหนึ่งของไฟล์ต้นฉบับของคุณจะถูกเขียนทับ
คุณสามารถใช้mdadm --build
เพื่อสร้างอาร์เรย์โดยไม่มีข้อมูลเมตา แต่คุณควรทำการสำรองข้อมูลก่อน หรือถ้าการเมานต์อ่านอย่างเดียวก็เพียงพอแล้ว:
losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt
ทำไมคุณถึงต้องการทำเช่นนี้? หากระบบไฟล์ของคุณไม่สามารถจัดการ> ไฟล์ 4GB คุณควรเปลี่ยนไปใช้ไฟล์ที่มีสติ
truncate
แทนdd
เพราะมันเร็วกว่ามาก (มันไม่ได้ทำการเขียนไปยัง FS จริง แต่เพียงแค่จัดสรร inodes และทำเครื่องหมายไฟล์เป็นเพียงแค่มีรู)
หากต้องการเมานต์อิมเมจดิสก์แยก (หรืออิมเมจพาร์ติชัน) คุณควรใช้affuse
จาก afftools ซึ่งปัจจุบันได้รับการบำรุงรักษาที่นี่: https://github.com/sshock/AFFLIBv3
ดังนั้นหากคุณมีไฟล์ให้แบ่งออกเป็นหลายไฟล์ย่อย test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009
จากนั้นคุณสามารถเข้าร่วมได้ด้วย affuse
# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw
(สิ่งนี้จะรวมไฟล์ทั้งหมดเข้าด้วยกันโดยเริ่มต้นด้วยไฟล์ 000 จากนั้น 001, 002, …)
แล้วเมานต์อิมเมจ
mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test
การใช้งานที่มีการอธิบายไว้ที่นี่และตัวอย่างบางส่วนที่นี่ manpage ยังเป็นหลังจากที่มีการรวบรวมและการติดตั้งหรือนี่
PS: สำหรับฉันaffuse
ใช้งานได้ก็ต่อเมื่อไฟล์แยกมีขนาดซึ่งมีหลาย 512 ไบต์
คุณสามารถเขียนส่วนขยายอุปกรณ์เก็บข้อมูลบล็อกของคุณเอง (คิดว่าเป็นส่วนขยายคล้ายฟิวส์) และดำเนินการค้นหาตามที่อยู่ที่กำหนด
คุณสามารถดูตัวอย่างวิธีใช้ฟิวส์ได้ที่นี่ https://github.com/libfuse/python-fuse/blob/master/example/hello.py
สิ่งที่ฉันรู้มากที่สุดในการแก้ไขคือการสร้าง VMware VM คุณเริ่มต้นใช้งานลินุกซ์ไลฟ์ซีดีเช่น Rescatux หรือ Knoppix คุณสร้างโฟลเดอร์ที่ใช้ร่วมกันของ SMB บนโฮสต์คอมพิวเตอร์ของคุณติดตั้ง SMB ที่แชร์บน VM ของคุณจากนั้นคุณdd
สร้างอิมเมจเป็น HD เสมือนจริง โดยค่าเริ่มต้น VMware จะบันทึกอิมเมจของดิสก์เป็นไฟล์แยกดังนั้นนี่คือสิ่งที่ใกล้เคียงที่สุดที่จะอ่านอิมเมจของดิสก์ที่แบ่งออกเป็นหลายไฟล์โดยตรง
หลังจากนั้นหากคุณต้องการเข้าถึงไฟล์จากโฮสต์คอมพิวเตอร์ของคุณคุณสามารถลองเพิ่ม HD เสมือนจริงที่สองให้กับรูปภาพและคัดลอกไฟล์ที่นั่น จากนั้นคุณตั้งค่าโฟลเดอร์แชร์ของ SMB บน VM และเชื่อมต่อกับโฟลเดอร์นั้นจากโฮสต์ของคุณ ตัวอย่างเช่นวิธีนี้คุณสามารถละเมิดขีด จำกัด ของไฟล์ FAT32 ขนาด 4 GB ในกรณีที่คุณใช้ iPod Classic (ซึ่งมีเฉพาะ fat32) หรือการ์ด SD ของสมาร์ทโฟนของคุณ (โดยปกติคุณจะต้องติดตั้ง ROM แบบกำหนดเองตามลำดับ ในการใช้ Ext3 หรือ NTFS ในที่จัดเก็บข้อมูลภายนอกคุณจำเป็นต้องมีโทรศัพท์จากผู้ผลิตที่ได้รับความนิยมเช่น Samsung หรือ Motorola ดังนั้นหากคุณมีสมาร์ทโฟนจีนที่คุณนิ่งงันอยู่)
มันเป็นที่ยอมรับไม่ใช่วิธีแก้ปัญหาที่มีประสิทธิภาพ แต่เนื่องจากฉันถูก จำกัด โดยไม่สามารถใช้ FS อื่น ๆ นอกเหนือจาก fat32 ใน iPod Classic หรือสมาร์ทโฟน Samsung ของฉันที่มี ROM หุ้นฉันจึงขัดจังหวะอินเทอร์เน็ตทั้งหมดใน ในอดีตและยังไม่สามารถหาทางออกที่มีประสิทธิภาพสำหรับเรื่องนี้ ฉันอาจต้องเขียนเอง
PS: ลืมที่จะพูดถึงว่าถ้าคุณใช้ Windows นี่อาจเป็นวิธีเดียวที่จะทำได้
ภายใต้ BSD คุณสามารถใช้ตัวเลือกการรวมเพื่อติดตั้ง ภายใต้ Linux คุณสามารถลอง unionFS ได้