Câu trả lời:
Trên các hệ điều hành dựa trên Linux, điều đó có thể được thực hiện với các thiết bị khối mạng hoặc thiết bị ánh xạ thiết bị. Các tập tin bạn có được là một thiết bị khối.
Với 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
(nối là /dev/nbd0
).
Với trình ánh xạ thiết bị (kích thước tệp phải là bội số của 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
(nối là /dev/mapper/mybundle
).
đã viết một trình điều khiển cầu chì ngày hôm nay, nếu ai đó quan tâm đến giải pháp cầu chì (trình ánh xạ thiết bị cũng như giải pháp nbd ở trên sẽ tạo ra các thiết bị khối không phải là tệp thông thường - sẽ bị hỏng, nếu bạn muốn sử dụng kết quả đầu ra trực tiếp với chỉnh sửa video phần mềm hoặc các công cụ khác không được chuẩn bị để đọc trực tiếp từ một thiết bị khối)
Về cơ bản, bạn đã trả lời nó trong câu đầu tiên của câu hỏi: có, nó có thể được thực hiện. Tuy nhiên, bạn phải viết trình điều khiển hệ thống tập tin tùy chỉnh. Nếu nó được coi là một đối tượng hệ thống tệp, thì nó phải được xử lý bởi kernel ở một mức độ nào đó (bao gồm FUSE ). Trình điều khiển sẽ phải cung cấp phụ trợ cho API tòa nhà hệ thống tệp tiêu chuẩn ( stat()
, open()
v.v., bao gồm cả tìm kiếm). Bạn không thể làm điều đó hoàn toàn trong không gian người dùng (ít nhất là không phải với một hạt nhân nguyên khối - nhưng ngay cả với một hạt nhân vi mô, bạn vẫn cần phải cung cấp trình điều khiển hệ thống tệp, mặc dù chạy như một quy trình không gian người dùng thông thường).