ไฟล์เสมือนที่มีการต่อข้อมูลไฟล์อื่น


13

มีวิธีการสร้างวัตถุระบบแฟ้มคล้ายกับนี้หรือไม่:

mknod files p
cat file1 file2 ... fileN > files

แต่มันสามารถค้นหาในราวกับว่ามันเป็นไฟล์ปกติ?

คำตอบ:


18

บนระบบปฏิบัติการบน Linux ที่สามารถทำได้กับอุปกรณ์บล็อกเครือข่ายหรืออุปกรณ์ทำแผนที่อุปกรณ์ ไฟล์ที่คุณได้รับคืออุปกรณ์บล็อก

ด้วยnbd:

ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file

sudo nbd-client localhost 12345 /dev/nbd0

(เรียงต่อกันคือ/dev/nbd0)

ด้วยอุปกรณ์ทำแผนที่ (ขนาดไฟล์จะต้องมีหลาย 512):

sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
  sudo dmsetup create mybundle

(เรียงต่อกันคือ/dev/mapper/mybundle)


8

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

https://github.com/schlaile/concatfs


source code ที่ให้ความรู้และใช้งานง่ายมาก! ขอบคุณที่ทำและแบ่งปัน!
Grzegorz Wierzowiecki

3

โดยทั่วไปคุณตอบคำถามนั้นในประโยคแรกของคำถาม: ใช่มันสามารถทำได้ อย่างไรก็ตามคุณต้องเขียนไดรเวอร์ระบบไฟล์ที่กำหนดเอง ถ้ามันควรจะเป็นวัตถุระบบไฟล์มันจะต้องได้รับการจัดการโดยเคอร์เนลในบางระดับ (ซึ่งรวมถึงFUSE ) คนขับรถจะต้องให้แบ็กเอนด์สำหรับระบบไฟล์มาตรฐาน syscalls API ( stat(), open()ฯลฯ รวมทั้งการแสวงหา) คุณไม่สามารถทำได้ทั้งหมดในพื้นที่ผู้ใช้ (อย่างน้อยไม่ได้มีเคอร์เนลเสาหิน - แต่ถึงแม้จะมี microkernel คุณยังจำเป็นต้องจัดเตรียมไดรเวอร์ระบบไฟล์แม้ว่าจะทำงานเป็นกระบวนการผู้ใช้ปกติ)


มันค่อนข้างชัดเจนว่าสามารถทำได้ สิ่งที่ฉันอยากรู้คือว่ามีวิธีแฮ็คอย่างรวดเร็วเพื่อให้บรรลุสิ่งนี้โดยใช้แพ็กเกจ un * x มาตรฐานหรือไม่โดยเฉพาะอย่างยิ่งผ่าน bash โดยไม่มีความจำเป็นในการเขียนไดรเวอร์เคอร์เนลพื้นที่
Witiko

1
เห็นคำตอบของ Stephane - ฉันลืม mapper อุปกรณ์อย่างสมบูรณ์
peterph
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.