Risposte:
Su sistemi operativi basati su Linux, ciò può essere fatto con dispositivi a blocchi di rete o dispositivi di mappatura dei dispositivi. Il file che ottieni è un dispositivo a blocchi.
Con 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
(la concatenazione è /dev/nbd0
).
Con Device Mapper (le dimensioni dei file devono essere multiple di 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
(la concatenazione è /dev/mapper/mybundle
).
ha scritto un driver per fusibili oggi, se qualcuno è interessato alla soluzione dei fusibili (il mapper del dispositivo e la soluzione nbd sopra creeranno dispositivi a blocchi non file regolari - il che si romperà, se si desidera utilizzare l'output risultante direttamente con l'editing video software o altri strumenti che non sono pronti a leggere direttamente da un dispositivo a blocchi)
Fondamentalmente hai risposto nella prima frase della domanda: sì, si può fare. Tuttavia, dovresti scrivere un driver di file system personalizzato. Se si suppone che sia un oggetto del file system, deve essere gestito dal kernel ad un certo livello (incluso FUSE ). Il driver dovrebbe fornire back-end per l'API di syscalls del file system standard ( stat()
, open()
ecc., Inclusa la ricerca). Non è possibile farlo interamente nello spazio utente (almeno non con un kernel monolitico - ma anche con un microkernel avresti comunque bisogno di fornire un driver di filesystem, sebbene in esecuzione come un normale processo di spazio utente).