Réponses:
Sur les systèmes d'exploitation Linux, cela peut être fait avec des périphériques de bloc réseau ou des périphériques de mappage de périphériques. Le fichier que vous obtenez est un périphérique bloc.
Avec 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 concaténation est /dev/nbd0
).
Avec mappeur de périphérique (les tailles de fichier doivent être multiples de 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 concaténation est /dev/mapper/mybundle
).
a écrit un pilote de fusible aujourd'hui, si quelqu'un est intéressé par la solution de fusible (le mappeur de périphériques ainsi que la solution nbd ci-dessus créeront des périphériques de bloc et non des fichiers réguliers - qui se briseront, si vous souhaitez utiliser la sortie résultante directement avec le montage vidéo logiciels ou autres outils qui ne sont pas prêts à lire directement à partir d'un périphérique de bloc)
Vous y avez essentiellement répondu dans la première phrase de la question: oui, cela peut être fait. Cependant, vous devez écrire un pilote de système de fichiers personnalisé. S'il est censé être un objet de système de fichiers, il doit être géré par le noyau à un certain niveau (y compris FUSE ). Le pilote devrait fournir un backend pour l'API syscalls du système de fichiers standard ( stat()
, open()
etc., y compris la recherche). Vous ne pouvez pas le faire entièrement dans l'espace utilisateur (du moins pas avec un noyau monolithique - mais même avec un micro-noyau, vous devrez toujours fournir un pilote de système de fichiers, bien qu'il s'exécute comme un processus d'espace utilisateur normal).