Введение
Временная корневая файловая система загружается на ранних этапах загрузки операционной системы Linux.
В системах Linux initrd (initial ramdisk – первоначальный RAM-диск) – это механизм загрузки временной корневой файловой системы в память для использования в процессе запуска Linux. Initrd и initramfs (от INITial RAM File System – начальная файловая система в оперативной памяти) представляют собой два различных способа реализации этой задачи. Оба обычно используются для выполнения подготовительных операций перед монтированием реальной корневой файловой системы.
Обоснование
Многие дистрибутивы Linux поставляют одно общее образ ядра Linux, которое разработчики дистрибутива создают специально для загрузки на широком спектре аппаратного обеспечения. Драйверы устройств для этого общего образа ядра включены в виде загружаемых модулей ядра, поскольку статическая компиляция множества драйверов в одно ядро приводит к значительному увеличению размера образа, возможно, слишком большому для загрузки на компьютерах с ограниченной памятью, или в некоторых случаях вызывает сбои при загрузке или другие проблемы из-за поиска несуществующего или конфликтующего оборудования. Такой подход со статической компиляцией ядра также оставляет неиспользуемые или ненужные модули в памяти ядра и создает проблему обнаружения и загрузки модулей, необходимых для монтирования корневой файловой системы при загрузке, или, по сути, определения местоположения и типа корневой файловой системы. Чтобы еще больше усложнить ситуацию, корневая файловая система может располагаться на программном RAID-массиве, LVM, NFS (на дисковых станциях) или на зашифрованном разделе. Для их монтирования требуется специальная подготовка. Дополнительное усложнение вносит поддержка ядра функции гибернации, которая переводит компьютер в режим ожидания на диске, сохраняя образ всего содержимого памяти в раздел подкачки или обычный файл, а затем выключает питание. При следующей загрузке этот образ должен быть доступен, прежде чем его можно будет загрузить обратно в память. Чтобы избежать необходимости жесткого кодирования обработки стольких специальных случаев в ядре, используется начальный этап загрузки с временной корневой файловой системой, теперь называемой ранним пользовательским пространством. Эта корневая файловая система может содержать вспомогательные программы пользовательского пространства, которые выполняют обнаружение оборудования, загрузку модулей и обнаружение устройств, необходимые для монтирования реальной корневой файловой системы. После завершения работы ядро предполагает, что реальная корневая файловая система смонтирована, и начинает обычный процесс загрузки пользовательского пространства. В схеме initramfs (доступной начиная с ядра Linux 2.6.13) образ может представлять собой архив cpio (опционально сжатый). Ядро распаковывает этот архив в специальный экземпляр tmpfs, который становится первоначальной корневой файловой системой. Преимущество этой схемы заключается в том, что не требуется компилировать промежуточную файловую систему или блочные драйверы в ядро. Некоторые системы используют пакет dracut для создания образа initramfs. В схеме initramfs ядро выполняет первый процесс, который не должен завершаться. В зависимости от того, какие алгоритмы были статически скомпилированы в него, ядро может распаковывать образы initrd/initramfs, сжатые с помощью gzip, bzip2, LZMA, XZ, LZO, LZ4 и zstd.
Другие применения
Инсталляторы для дистрибутивов Linux обычно полностью работают из initramfs, так как им необходимо обеспечить работу интерфейса установщика и вспомогательных инструментов до настройки какого-либо постоянного хранилища. Tiny Core Linux и Puppy Linux могут работать полностью из initrd.
Сходство с другими операционными системами
С Windows Vista, Windows может загружаться с диска из файла образа WIM, формат которого является открытым. Он похож на формат ZIP, но поддерживает жесткие ссылки, дедуплицированные блоки и использует поблочное сжатие. В этом случае весь файл WIM сначала загружается в оперативную память, после чего происходит инициализация ядра. Затем загруженный WIM становится доступен как SystemRoot с назначенной буквой диска. Установщик Windows использует это, загружаясь с BOOT.WIM, а затем применяет INSTALL.WIM в качестве набора файлов Windows для установки. Windows Preinstallation Environment (Windows PE) также использует этот подход, служа основой для отдельных загрузочных версий некоторых антивирусных программ и средств резервного копирования/восстановления после сбоев. Также можно настроить Windows на постоянную загрузку с файла WIM или VHD, расположенного на физическом диске. Однако это встречается редко, поскольку загрузчик Windows способен самостоятельно загружать файлы sys для модулей ядра во время загрузки, что в Linux выполняет initrd.