Файл Initrd:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Решение заключается в том, что GRUB должен загружать не только ядро, но и файл Initrd. Это специальный файл, в котором содержатся все модули ядра, необходимые для запуска системы. Ядро временно использует этот файл как псевдодиск, то есть оно может загрузить все модули сразу же после запуска псевдодиска (сокращение Initrd означает Initial RAM Disk — диск в оперативной памяти для начальной инициализации). Обычно файл Initrd называется /boot/initrd или /boot/initrd.gz. В большинстве дистрибутивов имеются инструменты, позволяющие создать такой файл Initrd, который бы подошел к применяемому аппаратному обеспечению и к файловой системе, которая находится в системном разделе (команда mkinitrd). Установка и конфигурация GRUB. Когда на страницах этой книги говорится об установке программы, обычно имеется в виду установка программного пакета на жесткий диск. В этой главе все иначе. Под установкой GRUB понимается процесс, в ходе которого стартовый код GRUB записывается в загрузочный сектор жесткого диска. Конфигурация GRUB протекает по-разному в зависимости от версии GRUB. В GRUB 0.97 применяется центральный конфигурационный файл /boot/grub/menu.lst. В GRUB 2 есть целая коллекция конфигурационных сценариев, находящихся в каталоге /etc/grub.d/. Благодаря исполнению этих сценариев создается сам конфигурационный файл GRUB 2 /boot/grub/grub.cfg. Файл initrd должен содержать такие модули ядра, версия которых точно совпадает с версией ядра. Поэтому всякий раз, когда вы устанавливаете или самостоятельно компилируете новую версию ядра, необходимо заново создавать соответствующий этому ядру Initrd-файл. При обновлении ядра этот процесс обычно автоматически выполняет сама программа обновления. А если вы самостоятельно устанавливаете ядро, то сами должны позаботиться и об Initrd-файле. Строго говоря, название «initrd-файл>> в большинстве современных дистрибутивов уже неприменимо. На самом деле мы работаем с initramfs-файлами, организация которых будет описана немного ниже. Но поскольку и в параметрах GRUB, и в различных командах для создания файлов используется понятие initrd, а само ядро правильно интерпретирует файл, несмотря па неверное название, Файл Initrd не всегда необходим для работы. Если ядро вашего дистрибутива содержит все компоненты, необходимые для загрузочного процесса, то запуск возможен и без Initrd-файла. Но для этого ядро нужно соответствующим образом скомпилировать — и именно такого в большинстве дистрибутивов не происходит. (Почти все модули ядра при желании можно интегрировать в само ядро. Разумеется, файл ядра от этого увеличится.) К огромному сожалению, создание Inicrd-файлов не стандартизировано. В каждом дистрибутиве для этого используются собственные инструменты. Initrd-файлы содержат не только модули ядра, но и сценарии для инициализации оборудования. Исполнение этих сценариев длится достаточно долго и стало головной болью для многих разработчиков, так как сильно тормозит процесс загрузки. |
Основные команды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
apt-get install initrd-tools cp /boot/ initrd.img-2.6.20-16-generic /boot/ initrd.img-2.6.20-16-generic.back mkinitrd -o /boot/initrd.img-2.6.20-16-generic mkinitrd -o /boot/initrd.img-'uname -r' 'uname -r' uname -r - отображает версию ядра uname -a - отображает всю доступную информацию о ядре dmesg | less - лог загрузки/выполнения системы (кольцевой буфер системы) less /var/log/dmesg - полный лог dmesg lsmod - позволяет просмотреть/добавит/убрать имена загружаемых модулей modinfo snd_ens1371 - выведет подробную информацию о модуле snd_ens1371 modprobe -l |grep c-qcam - отображает все модули, затем ищет c-qcam modprobe c-qcam - загружает модуль c-qcam modprobe -r c-qcam - удаляет модуль sysctl -a | less - отображает все параметры ядра sysctl kernel.hostname - отображает значения отдельных параметров ядра sysctl -p - загружает параметры из файла /etc/sysctl.conf (перечитать конфигурацию) sysctl -w kernel.hostname=joe - устанавливает значение kernel .hostname sysctl -A | less - отобразить все динамические параметры ядра sysctl -w net.ipv4.ip_forward=1 - включить перенаправление пакетов ipv4 lspci - отображает список устройств pci lspci -v - отображает список устройств pci (подробно) lspci -vv - отображает список устройств pci (более подробно) dmidecode | less - отображает список устройств lsusb - отображает список usb устройств hdparm /dev/sda - отображает параметры диска /dev/sda hdparm -I /dev/sda - выводит подробную информацию о диске /dev/sda fdisk -l - отобразит все диски и файловые системы на них |
Update-initramfs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Update-initramfs (Debian, Ubuntu). В Debian и Ubuntu для создания Initrd-файлов и их последующего администрирования предусмотрен сценарий update-initramfs. В простейшем случае для обновления Initrd-файла новейшей установленной версии ядра вы просто задаете параметр -u. Но если вы хотите обновить Initrd-файл не до новейшей, а до какой-то другой версии ядра, то укажите помер версии с помощью параметра -k. Параметр -kail обновляет Initrd-файлы для всех установленных версий ядра. С помощью параметров -с или -dcuenapuHupdate-initramfs создает новый или удаляет имеющийся Initrd-файл. В таком случае обязательно требуется указать версию ядра с помощью параметра -k. update-initramfs -c -k 3.5-13-generic (Debian, Ubuntu) mkinitramfs -o myinitrd 3.5-13-generic (Debian, Ubuntu) dracut /boot/initrd-3.5.3 3.5.3 (Fedora, Red Hat) mkinitrd (SUSE) |