¿Hay alguna manera de crear un objeto de sistema de archivos similar a esto:
mknod files p
cat file1 file2 ... fileN > files
pero tal que se pueda buscar, como si fuera un archivo normal?
fuente
¿Hay alguna manera de crear un objeto de sistema de archivos similar a esto:
mknod files p
cat file1 file2 ... fileN > files
pero tal que se pueda buscar, como si fuera un archivo normal?
En los sistemas operativos basados en Linux, eso se puede hacer con dispositivos de bloqueo de red o dispositivos de mapeo de dispositivos. El archivo que obtienes 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 mapeador de dispositivos (los tamaños de archivo deben ser múltiples 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
).
escribió un controlador de fusible hoy, si alguien está interesado en la solución de fusible (el mapeador de dispositivos, así como la solución nbd anterior, crearán dispositivos de bloque, no archivos regulares, lo que se romperá si desea usar 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)
Básicamente lo respondiste en la primera oración de la pregunta: sí, se puede hacer. Sin embargo, debería escribir un controlador de sistema de archivos personalizado. Si se supone que es un objeto del sistema de archivos, debe ser manejado por el núcleo en algún nivel (que incluye FUSE ). El controlador tendría que proporcionar back-end para la API de syscalls del sistema de archivos estándar (
stat()
,open()
etc., incluida la búsqueda). No puede hacerlo completamente en el espacio del usuario (al menos no con un núcleo monolítico, pero incluso con un microkernel aún necesitaría proporcionar un controlador del sistema de archivos, aunque se ejecute como un proceso de espacio de usuario normal).fuente