มีวิธีการสร้างวัตถุระบบแฟ้มคล้ายกับนี้หรือไม่:
mknod files p
cat file1 file2 ... fileN > files
แต่มันสามารถค้นหาในราวกับว่ามันเป็นไฟล์ปกติ?
มีวิธีการสร้างวัตถุระบบแฟ้มคล้ายกับนี้หรือไม่:
mknod files p
cat file1 file2 ... fileN > files
แต่มันสามารถค้นหาในราวกับว่ามันเป็นไฟล์ปกติ?
คำตอบ:
บนระบบปฏิบัติการบน 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
)
เขียนไดร์เวอร์ฟิวส์ในวันนี้ถ้าใครบางคนสนใจโซลูชันฟิวส์ (ผู้ทำแผนที่อุปกรณ์รวมถึง nbd-solution ด้านบนจะสร้างอุปกรณ์บล็อกไม่ใช่ไฟล์ปกติ - ซึ่งจะแตกถ้าคุณต้องการใช้ผลลัพธ์ที่ได้โดยตรงด้วยการแก้ไขวิดีโอ ซอฟต์แวร์หรือเครื่องมืออื่น ๆ ที่ไม่ได้เตรียมที่จะอ่านจากอุปกรณ์บล็อกโดยตรง)
โดยทั่วไปคุณตอบคำถามนั้นในประโยคแรกของคำถาม: ใช่มันสามารถทำได้ อย่างไรก็ตามคุณต้องเขียนไดรเวอร์ระบบไฟล์ที่กำหนดเอง ถ้ามันควรจะเป็นวัตถุระบบไฟล์มันจะต้องได้รับการจัดการโดยเคอร์เนลในบางระดับ (ซึ่งรวมถึงFUSE ) คนขับรถจะต้องให้แบ็กเอนด์สำหรับระบบไฟล์มาตรฐาน syscalls API ( stat()
, open()
ฯลฯ รวมทั้งการแสวงหา) คุณไม่สามารถทำได้ทั้งหมดในพื้นที่ผู้ใช้ (อย่างน้อยไม่ได้มีเคอร์เนลเสาหิน - แต่ถึงแม้จะมี microkernel คุณยังจำเป็นต้องจัดเตรียมไดรเวอร์ระบบไฟล์แม้ว่าจะทำงานเป็นกระบวนการผู้ใช้ปกติ)