La respuesta dependerá de si quiere decir, literalmente, sin un sistema de archivos o si la pregunta está destinada a ser interpretada de manera un poco diferente de cómo se formula realmente. Las respuestas para pequeñas variaciones en cómo se interpreta la pregunta son:
- Ejecutar Linux sin ningún dispositivo de bloque es completamente factible y útil para algunos casos de uso especializados.
- Ejecutar Linux sin ningún sistema de archivos requerirá reescribir algunas partes del código del núcleo y es poco probable que sea un esfuerzo útil.
- Ejecutar Linux sin usar ningún descriptor de archivo requerirá mucho esfuerzo. Estoy bastante seguro de que no valdrá la pena el esfuerzo.
Las razones por las que tendría que reescribir partes del código del núcleo para hacer que un sistema funcione sin un sistema de archivos son:
- Cada hilo tiene un directorio raíz y un directorio de trabajo actual que debe apuntar a algún sistema de archivos.
- Los programas se inician mediante la
execve
llamada al sistema que necesita un ejecutable desde un sistema de archivos.
- El kernel crea un sistema de archivos basado en memoria durante el proceso de arranque.
Después de que un programa se haya comenzado a usar execve
, es posible que desasigne el ejecutable desde el que se inició, aunque para hacerlo sin que se bloquee de inmediato, primero debe crear una asignación de memoria ejecutable que no esté respaldada por un archivo, y tiene que inicializar eso con algún código útil antes de saltar a él y desasignar el ejecutable.
Por lo tanto, un programa en modo de usuario en ejecución puede existir en un estado en el que no tiene asignaciones de memoria respaldadas por archivos y puede cerrar todos los descriptores de archivos respaldados por archivos. No puede dejar de tener un directorio raíz y un directorio de trabajo actual, pero puede abstenerse de ellos.
Entonces, aunque en este estado podría implementar el código del núcleo para extraer el sistema de archivos del programa y hacer que siga ejecutándose, no parece que sea útil. Y entrar en ese estado final sin pasar por un estado intermedio de uso de un sistema de archivos va a ser aún más trabajo sin beneficio útil.
Una configuración útil para algunos casos de uso especializados.
Evitar el uso de dispositivos de bloque puede ser útil. Durante el arranque, el kernel crea un sistema de archivos de memoria, y también puede llenar ese sistema de archivos con contenido de un cpio
archivo antes de ejecutarlo init
. De esa manera, puede ejecutar un sistema completamente desde un sistema de archivos basado en memoria sin ningún dispositivo de bloque que lo respalde.
Esto puede ser útil para sistemas en los que no desea conservar ningún estado y desea que el sistema comience desde cero cuando se reinicia.
Por supuesto, el kernel y el archivo cpio tienen que existir de alguna manera en la memoria antes de que el kernel tenga el control. Cómo llegaron allí es un trabajo para el gestor de arranque. El cargador de arranque podría haber cargado los de un dispositivo de bloque a pesar de que el sistema de ejecución final no utiliza dispositivos de bloque. Pero también es posible que el gestor de arranque adquiera el núcleo y el archivo cpio sin utilizar un dispositivo de bloque, por ejemplo, iniciando a través de la red.
useful exposure to the outside world