Відповідь буде залежати від того, чи ви розумієте буквально без файлової системи, або якщо питання призначене для тлумачення трохи інше, ніж те, як воно фактично заявлено. Відповіді на незначні зміни в трактуванні питання:
- Запуск Linux без будь-яких блокових пристроїв цілком здійсненний і корисний у деяких випадках спеціалізованого використання.
- Запуск Linux без будь-якої файлової системи вимагатиме переписання деяких частин коду ядра, і це навряд чи буде корисним зусиллям.
- Запуск Linux без використання дескрипторів файлів потребує великих зусиль. Я майже впевнений, що це не буде вартим зусиль.
Причини, з якими вам доведеться переписати частини коду ядра для створення робочої системи без файлової системи, є:
- Кожен потік має кореневий каталог та поточний робочий каталог, який повинен вказувати на деяку файлову систему.
- Програми запускаються
execve
системним викликом, який потребує виконуваного файлової системи.
- Ядро створює файлову систему на основі пам'яті під час завантаження.
Після запуску програми з execve
її допомогою можна скасувати карту виконуваного файлу, з якої вона була запущена, хоча, щоб зробити це без негайного збою, спочатку потрібно створити виконувану карту пам'яті, яка не підтримується файлом, і він повинен ініціалізувати це з деяким корисним кодом, перш ніж перейти до нього та розпаковувати виконуваний файл.
Таким чином, запущена програма в режимі користувача може існувати в стані, коли в ній не відображаються файли пам'яті, підкріплені файлами, і вона може закрити всі файли дескрипторів, підкріплені файлами. Він не може перестати мати кореневу директорію та поточний робочий каталог, але може утриматися від них.
Тож хоч у такому стані ви могли реалізувати код ядра, щоб вирвати файлову систему з-під програми та продовжувати працювати, це не здається корисним. І потрапляння в цей остаточний стан без проходження проміжного стану використання файлової системи буде ще більшою роботою без корисної користі.
Корисна установка для деяких випадків спеціалізованого використання
Уникнення використання блокових пристроїв може бути корисним. Під час завантаження ядро створює файлову систему пам'яті, а також може заповнити цю файлову систему вмістом з cpio
архіву перед виконанням init
. Таким чином ви можете запустити систему повністю з файлової системи на базі пам'яті без блочного пристрою для її резервного копіювання.
Це може бути корисно для систем, де ви не хочете зберігати жоден стан і подобається, що система починає з чистого аркуша після перезавантаження.
Звичайно, ядро та архів cpio повинні якось існувати в пам'яті, перш ніж ядро буде надано контроль. Як вони там потрапили, є робота для завантажувача. Завантажувач міг завантажувати їх із блочного пристрою, навіть якщо в кінцевій запущеній системі не використовуються блокові пристрої. Але також можливий завантажувач завантаження архіву ядра та cpio без використання блочного пристрою, наприклад, завантаження через мережу.
useful exposure to the outside world