¿Existe alguna forma de crear un objeto de sistema de archivos similar a este?
mknod files p
cat file1 file2 ... fileN > files
¿Pero tal que se pueda buscar como si fuera un archivo normal?
Respuesta1
En los sistemas operativos basados en Linux, esto se puede hacer con dispositivos de bloqueo de red o dispositivos mapeadores de dispositivos. El archivo que obtiene es un dispositivo de bloque.
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 concatenación es /dev/nbd0
).
Con el asignador de dispositivos (los tamaños de archivo deben ser múltiplos 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 concatenación es /dev/mapper/mybundle
).
Respuesta2
Escribí un controlador de fusibles hoy, si alguien está interesado en la solución de fusibles (el asignador de dispositivos, así como la solución nbd anterior, crearán dispositivos de bloque, no archivos normales, que se romperán si desea utilizar la salida resultante directamente con la edición de video). software u otras herramientas que no están preparadas para leer directamente desde un dispositivo de bloque)
Respuesta3
Básicamente lo respondiste en la primera oración de la pregunta: sí, se puede hacer. Sin embargo, tendría que escribir un controlador de sistema de archivos personalizado. Si se supone que es un objeto del sistema de archivos, tiene que ser manejado por el núcleo en algún nivel (eso incluyeFUSIBLE). El controlador tendría que proporcionar backend para la API de llamadas al sistema del sistema de archivos estándar ( stat()
, open()
etc., incluida la búsqueda). No puede hacerlo completamente en el espacio de usuario (al menos no con un kernel monolítico, pero incluso con un microkernel aún necesitaría proporcionar un controlador de sistema de archivos, aunque se ejecute como un proceso normal en el espacio de usuario).