Un file virtuel contenant la concaténation d'autres files

Existe-t-il un moyen de créer un object de système de files semblable à ceci:

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

mais de telle sorte qu'il peut être cherché dans, comme si c'était un file régulier?

Sur les systèmes d'exploitation basés sur Linux, cela peut se faire avec des périphériques de réseau ou des périphériques de mappage de périphériques. Le file que vous obtenez est un périphérique de blocage.

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 le mappeur de périphérique (les tailles de file 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 va créer des périphériques de bloc pas des files réguliers – qui se briseront, si vous voulez utiliser la sortie résultante directement avec l'édition video logiciels ou autres outils qui ne sont pas prêts à lire directement à partir d'un périphérique en bloc)

https://github.com/schlaile/concatfs

Vous avez essentiellement répondu à la première phrase de la question: oui, cela peut être fait. Cependant, vous devez écrire un pilote de système de files personnalisé. S'il est supposé être un object du système de files, il doit être géré par le kernel à un certain niveau (incluant FUSE ). Le pilote devrait fournir le backend pour le système de files standard API syscalls ( stat() , open() etc., y compris la search). Vous ne pouvez pas le faire entièrement dans l'espace user (du less pas avec un kernel monolithique), mais même avec un microkernel, vous devez toujours fournir un pilote de système de files, bien qu'il fonctionne comme un process d'espace user régulier.