Ответ будет зависеть от того, имеете ли вы в виду буквально без файловой системы, или вопрос предназначен для интерпретации немного отличается от того, как он на самом деле сформулирован. Ответы на небольшие различия в интерпретации вопроса:
- Запуск Linux без каких-либо блочных устройств вполне возможен и полезен для некоторых специализированных случаев использования.
- Запуск Linux без каких-либо файловой системы потребует переписывания некоторых частей кода ядра, и это вряд ли будет полезным усилием.
- Запуск Linux без использования каких-либо файловых дескрипторов потребует больших усилий. Я уверен, что это не будет стоить усилий.
Причины, по которым вам придется переписывать части кода ядра, чтобы сделать работающую систему без файловой системы:
- Каждый поток имеет корневой каталог и текущий рабочий каталог, который должен указывать на некоторую файловую систему.
- Программы запускаются
execve
системным вызовом, которому нужен исполняемый файл из файловой системы.
- Ядро создает файловую систему на основе памяти во время процесса загрузки.
После запуска программы с помощью execve
она может отменить отображение исполняемого файла, из которого она была запущена, хотя для того, чтобы сделать это без немедленного сбоя, сначала необходимо создать отображение исполняемой памяти, которое не поддерживается файлом, и он должен инициализировать это с помощью некоторого полезного кода, прежде чем перейти к нему и отменить отображение исполняемого файла.
Таким образом, работающая программа пользовательского режима может существовать в состоянии, в котором у нее нет отображений памяти, поддерживаемых файлами, и она может закрыть все файловые дескрипторы, поддерживаемые файлами. Он не может перестать иметь корневой каталог и текущий рабочий каталог, но он может воздерживаться от них.
Поэтому, хотя в этом состоянии вы могли бы реализовать код ядра, чтобы вырвать файловую систему из-под программы и заставить ее продолжать работать, это не похоже на то, что это полезно. А переход в это конечное состояние без прохождения промежуточного состояния использования файловой системы будет еще большей работой без какой-либо полезной выгоды.
Полезная настройка для некоторых специализированных случаев использования
Избегание использования блочных устройств может быть полезным. Во время загрузки ядро создает файловую систему памяти и может также заполнить эту файловую систему содержимым из cpio
архива перед выполнением init
. Таким образом, вы можете запустить систему полностью из файловой системы на основе памяти без какого-либо блочного устройства для ее поддержки.
Это может быть полезно для систем, в которых вы не хотите сохранять какое-либо состояние, и например, когда система запускается с чистого листа после перезагрузки.
Конечно, ядро и архив cpio должны каким-то образом существовать в памяти, прежде чем ядру будет дан контроль. Как они туда попали - это работа для загрузчика. Загрузчик мог загрузить их с блочного устройства, даже если в окончательно работающей системе блочные устройства не используются. Но для загрузчика также возможно получить архив ядра и cpio без использования блочного устройства, например, при загрузке по сети.
useful exposure to the outside world