Serg iakovlev

RAM disk (initrd) - стартова рутовий файлова система, яка монтується в першу чергу. initrd входить до складу ядра і вантажиться як його частина під час завантаження. Ядро монтує initrd в першій частині завантажувального процесу для подальшого завантаження модулів і реальної рутовий файлової системи.

initrd включає мінімальний набір каталогів і утиліт, таких як insmod для інсталяції kernel modules.

Залежно від того, що ми імеем- desktop або server- initrd є перехідною файлової системою. Його час життя мінімально. У embedded systems initrd є постійною рутовий файлової системою.

initrd image включає необхідні утиліти і системні файли для другої фази завантажувального процесу Linux.

Залежно від версії Linux метод створення initial RAM disk може відрізнятися. Наприклад в Fedora Core initrd створюється за допомогою loop device. loop device - драйвер, який дозволяє монтувати файл як блоковий пристрій. loop device може не бути у вашому ядрі, для цього його можна конфігурувати. за допомогою (make menuconfig) за допомогою установки Device Drivers> Block Devices> Loopback Device Support. Можна перевірити наявність loop device наступним чином (ім'я initrd file name може варіюватися):


Listing 1. Inspecting the initrd (prior to FC3)

Можна подивитися вміст / mnt / initrd. initrd image file може і не мати на кінці розширення .gz, але тим не менше він все одно є архівним файлом.

Починаючи з Fedora Core 3, initrd image-архів cpio. Для цього типу архіву можна виконати:


Listing 2. Inspecting the initrd (FC3 and later)

Результатом є невелика файлова система як показано в Listing 3. У каталозі ./bin directory є nash (script interpreter), insmod для завантаження kernel modules, lvm (logical volume manager tools).


Listing 3. Default Linux initrd directory structure

Зверніть увагу на init file в корені. Цей файл викликається в момент, коли initrd image розархівуйте в RAM disk.

Використовуючи команду cpio. можна маніпулювати cpio файлами. Cpio-це файловийй формат, який включає в себе Хідер. Він включає в себе як ASCII, так і бінарний формати. Для Портабельная, використовуйте ASCII. Для зменшення розміру файлу, використовуйте бінарний формат.

Для звичайних Linux system, initrd image створюється під час компіляції ядра. Утиліта mkinitrd може бути використана для створення initrd з необхідними бібліотеками і модулями. Утиліта mkinitrd є shell script. Також є утиліта YAIRD (Yet Another Mkinitrd), за допомогою якої можна конструювати initrd.

Оскільки в багатьох embedded systems немає дисків, там initrd використовується перманентно. Listing 4 показує, як створити initrd image. Тут використовується стандартний десктоп.


Listing 4. Утиліта (mkird) для створення custom initrd

initrd Linux distribution

Прикладом такого проекту є Minimax. Він уміщається в 32MB і використовує BusyBox і uClibc. Незважаючи на розмір, він використовує 2.6 Linux kernel з великим набором всяких утиліт.

Для створення initrd, створимо порожній файл, використовуючи / dev / zero (набір нулів) і запишемо його в ramdisk.img file. Результуючий файл вийде розміром 4MB (4000 1K blocks). Потім за допомогою mke2fs створимо ext2 (second extended) файлову систему за допомогою створеної пустушки. Монтуємо цей файл в / mnt / initrd за допомогою loop device. Тепер ми маємо кореневу ext2 file system.

Наступний крок-створення підкаталогів для створення рутовий файлової системи: / bin, / sys, / dev, / proc.

Альтернатива для ext2 file system

Для ext2 є альтернативні файлові системи, за допомогою яких можна зменшити розмір initrd image. Це romfs (ROM file system), cramfs (compressed ROM file system), squashfs (highly compressed read-only file system). Якщо вам потрібно писати дані, ext2 працює прекрасно. І також e2compr є розширенням ext2 file system, яка підтримує компресію.

Утиліта BusyBox вдає із себе image, який включає в себе такі утиліти, як ash, awk, sed, insmod. Перевага BusyBox в тому, що він пакує багато утиліт в маленький образ. Це ідеально для embedded systems. Копіюємо BusyBox image в каталог / bin. Симлінк вказують на утиліти BusyBox.

Потім створюємо набір device files. Для цього створимо каталог / dev, використовуючи -a опцію.

Фінальним кроком є ​​створення файлу linuxrc. Після того як ядро ​​змонтує RAM disk, воно шукає файл init для виконання. Якщо файлу init немає, ядро ​​вантажить linuxrc як startup script. У цьому файлі робляться базові настройки, такі як монтування файлової системи / proc. Я також монтую каталог / sys file і виводжу повідомлення на консоль. Я викликаю ash (Bourne Shell clone), тому я спілкуюся з рутовий файлової системою. linuxrc можна зробити виконуваним за допомогою chmod.

В кінці ваша root file system зроблена. Вона отмонтіруется і стискається за допомогою gzip. Результуючий файл (ramdisk.img.gz) копіюється в / boot, і його можна завантажити з помощтю GNU GRUB.

Для створення initial RAM disk, викличте mkird. при цьому образ автоматично створиться і ляже в / boot.