Linux
Шрифт:
Есть еще несколько других программ, которые можно использовать для загрузки Linux, однако они не получили широкого распространения.
Параметры ядра
Обзор параметров строки загрузки
Программы-загрузчики, описание которых приведено выше, способны также, помимо загрузки самого ядра, передавать ему необходимые параметры загрузки.
В параметрах загрузки недопустимо использовать пробелы, кроме как между отдельными аргументами. Список значений для одного аргумента должен разделяться запятыми между значениями. К примеру:
ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1
Посмотреть параметры командной строки, заданные при загрузке, можно набрав /proc/cmdline.
Утилита rdev
Есть несколько параметров загрузки ядра Linux, хранящих свои значения по умолчанию в его образе. Эти параметры задаются при компиляции ядра, и для того, чтобы не перекомпилировать каждый раз ядро, используется утилита rdev.
Утилита rdev может изменять следующие параметры:
• rdev – устройство, с которого производится загрузка;
• swapdev – устройство, содержащее раздел подкачки (swap);
• ramsize – параметры RAM-диска;
• vidmode – видеорежим по умолчанию;
• rootflags – установка режима монтирования корневого устройства ("только для чтения" или "чтение/запись").
Более подробную информацию по rdev можно найти в соответствующей справочной документации.
Разбор параметров ядром Linux
Большая часть параметров загрузки имеет вид:Имя[=значение_1][,значение_2]…[,значение_11]
где имя – уникальное ключевое слово, идентифицирующее часть ядра, которому передаются связанные значения, но не более одиннадцати параметров. Большая часть разбора параметров загрузки происходит в linux/init/main.c. Сначала ядро проверяет, не являются ли параметры одним из специальных параметров root=, ro, rw или debug. Затем ядро просматривает список функций установки (находящийся в массиве bootsetups) в поиске совпадения заданной строки параметра с функцией установки конкретного устройства или части ядра. Если мы передаем ядру строку foo=3,4,5,6, bar, то ядро будет искать, присутствует ли foo в массиве bootsetups. Если присутствует, то ядро вызовет функцию установки, связанную с foo (foo setup ) и передаст ей целочисленные значения 3, 4, 5 и 6, указанные в командной строке ядра, и также строковый параметр bar.
Если строка не подходит ни для
Любые оставшиеся параметры, не выбранные ядром и не интерпретированные в качестве переменных окружения, будут переданы в дальнейшую обработку, которую обычно выполняет программа init. Чаще всего процессу init в качестве параметра передается слово single, которое сообщает init о необходимости загрузить компьютер в однопользовательском режиме. Список параметров программы init можно найти в соответствующей справочной документации.
Общие неаппаратные параметры загрузки
В этом разделе рассматриваются параметры загрузки, не связанные с каким-либо оборудованием или периферией, а с параметрами ядра, такими как управление памятью, RAM-диском, корневой системой и т. п.
Опции корневой файловой системы
Параметр rootЭтот параметр сообщает ядру, какое устройство будет использовано в качестве корневой файловой системы во время загрузки. По умолчанию эта установка имеет значение корневого устройства системы, на котором было скомпилировано ядро. Например, на одном компьютере корневая файловая система находится на /dev/hda2, а на другом – на /dev/hda6. Если скомпилировать ядро на втором компьютере, перенести его на первый и не указать в параметре root=/dev/hda2, то ядро будет думать, что оно загружается с /dev/hda6. А такого устройства на этом компьютере нет! Допустимыми корневыми устройствами могут быть следующие:
• /dev/hdaN, /dev/hdbN, /dev/hdcN, /dev/hddN, которые являются разделами N на IDE-диске;
• /dev/sdaN, /dev/sdbN, /dev/sdcN, /dev/sddN, /dev/sdeN, которые являются разделами N на SCSI-диске;
• /dev/fd0, /dev/fdl – привод флоппи-диска с номером N;
• /dev/nfs, не являющееся флагом, заставляющим ядро получить корневую файловую систему по сети.
Это один из немногих параметров загрузки ядра, которые хранятся в его образе и могут быть изменены утилитой rdev.
Параметры ro и rwПараметр го сообщает ядру о необходимости монтирования корневой файловой системы в режиме «только для чтения». Парный ему параметр rw указывает ядру монтировать корневую файловую систему в режиме «чтение/ запись». Сразу после загрузки ядра и запуска процесса init система должна осуществить проверку подмонтированных файловых систем на отсутствие ошибок. Однако, если корневая файловая система смонтирована в режиме «чтение/запись» надежно проверить целостность файловой системы невозможно. Существует два способа решения проблемы:
• Смонтировать изначально корневую файловую систему в режиме "только для чтения".
• Смонтировать изначально корневую файловую систему в режиме "чтение/запись", а перед проверкой перемонтировать ее в режим "только для чтения".
Это одни из немногих параметров загрузки ядра, которые хранят значение в образе ядра и могут быть изменены утилитой rdev.
Опции управления RAM-диском
Все следующие опции сообщают ядру, как управлять устройством RAM-диска, обычно используемым для загрузки машины.
Параметр ramdisk_startЧтобы разрешить образу ядра находиться на флоппи-диске со сжатым образом RAM-диска, необходимо добавить команду ramdisk_start=<cMei4eHMe>.
Параметр load_ramdiskЭтот параметр сообщает ядру, нужно загружать образ RAM-диска или нет. При ioad_ramdisk=l ядро будет загружать RAM-диск. По умолчанию значение параметра равно нулю, т. е. ядро не должно в этом случае загружать RAM-диск.
Параметр prompt_ramdiskЭтот параметр сообщает ядру о необходимости вывести пользователю приглашение вставить флоппи-диск с образом RAM-диска. В однодисковой конфигурации образ RAM-диска находится на той же дискете, с которой только что закончилась загрузка ядра, поэтому приглашение не нужно. В этом случае нужно использовать команду prompt_ramdisk=0. В двухдисковой конфигурации может потребоваться заменить диски, поэтому нужно указать команду prompt_ramdisk=1. По умолчанию значение равно единице.
Параметр ramdisk_sizeПоскольку RAM-диск размещается в оперативной памяти, необходимо каким-то способом указать занимаемый им объем оперативной памяти. По умолчанию это 4096 Кбайт.
Параметр noinitrd (начальный RAM-диск)В ядрах, начиная с версии 2jc, корневой файловой системой изначально может быть RAM-диск. Эта возможность обычно используется для загрузки модулей, необходимых для монтирования реальной корневой файловой системы (например, загрузка модулей драйвера SCSI, хранящихся в образе RAM-диска, а затем монтирование реальной файловой системы на SCSI-диске).
Параметр noinitrd определяет, что будет происходить с данными initrd после загрузки ядра.
Параметры загрузки для управления памятью
Следующие параметры определяют действия ядра Linux по обнаружению или управлению физической и виртуальной памятью системы.
Параметр memИспользуется для указания объема установленной памяти (или меньшего значения, если требуется ограничить объем памяти, доступный Linux). Старые версии BIOS не могли корректно возвращать количество оперативной памяти, если оно превышало 64 Мбайт. Поэтому приходилось вручную передавать в ядро реально установленное количество памяти.
Ядро воспримет любое значение параметра mem=xx, которое будет указано, однако если указать больший размер памяти, чем физически установлено в компьютере, то при определенном количестве процессов система попытается использовать несуществующий участок памяти и в общем возникнут проблемы, и что самое неприятное, такое может произойти и через месяц-другой после конфигурирования системы.
Количество памяти можно указывать как в шестнадцатеричном представлении, так и в десятичном. Например, если в компьютере установлено 96 Мбайт оперативной памяти, можно указать mem=0x6000000 или mem=96M.
Параметр swapПозволяет пользователю настраивать некоторые параметры виртуальной памяти (Virtual Memory), относящиеся к разделу подкачки. Он может иметь следующие значения:
• MAX_PAGE_AGE;
• PAGE_ADVANCE;
• PAGE_DECLINE;
• PAGE_INITIAL_AGE;
• AGE_CLUSTER_FRACT;
• AGE_CLUSTER_MIN;
• PAGEOUT_WEIGHT;
• BUFFEROUT_WEIGHT.
В каталоге /usr/src/Linux-2.4.3/Documentation/vm/ содержится полезная документация по этой теме, подставляемая с ядром операционной системы.
Параметр buffПараметр, похожий на swap, позволяет пользователю настроить некоторые параметры, связанные с управлением буферной памятью. Он может иметь следующие значения:
• MAX_BUFF_AGE;
• BUFF_ADVANCE;
• BUFF_DECLINE;
• BUFF_INITIAL_AGE;
• BUFFEROUT_WEIGHT;
• BUFFERMEM_GRACE.
Параметры загрузки для файловой системы NFS
Linux поддерживает и бездисковые рабочие станции, загружаемые по локальной сети. Для этого необходимо настроить корневую файловую систему бездисковой станции как NFS (Network File System, сетевая файловая система). Чтобы сообщить бездисковой рабочей станции, с какой машины она будет получать операционную систему, используются указанные в этом разделе параметры. Также необходимо установить параметр root=/dev/nfs. Подробная информация по использованию NFS в качестве корневой файловой системы содержится в файле /usr/src/Linux-2.4.3/Documentation/nfsroot.txt. Эта тема также будет рассмотрена в гл. 33.
Параметр nfsroot Параметр сообщает ядру, какую машину, какой каталог и с какими опциями NFS использовать в качестве корневой файловой системы. Формат этого параметра следующий:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
Если параметр nfsroot не был дан в командной строке, то по умолчанию будет использовано значение /tftpboot/%s.
Другие опции:
• <server-ip> – задает IP-адрес сервера NFS. Если это поле не задано, по умолчанию адрес будет определен переменной nfsaddrs;
• <root-dir> – имя каталога на сервере, монтируемого как корневой. Если в строке имеется фраза "%s", она будет заменена на ASCII-представление IP-адреса клиента;
• <nfs-options> – стандартные опции NFS. Все опции разделены запятыми. Если поле опций не задано, будут использованы следующие параметры:
– port = указывается демоном роЛтар-сервера
– rsize = 1024
– wsize = 1024
– timeo = 7
– retrans = 3
– acregmin = 3
– acregmax = 60
– acdirmin = 30
– acdirmax = 60
– flags = hard, nointr, noposix, cto, ac
Параметр nfsaddrs Параметр загрузки устанавливает параметры сетевого интерфейса. Если параметр опущен, то для выяснения этих значений ядро попытается использовать RARP и/или ВООТР. Формат параметра следующий:nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>
• <my-ip> – IP-адрес клиента. Если параметр опущен, адрес определяется с помощью RARP или ВООТР. Выбор протокола будет зависеть от того, как было сконфигурировано ядро, и от параметра <auto>. Если параметр указан, ни RARP, ни ВООТР использоваться не будут;
• <serv-ip> – IP-адрес сервера NFS. Если это поле опущено, будет использован адрес сервера, ответившего на запрос RARP или ВООТР;
• <gw-ip> – IP-адрес шлюза. Если поле опущено, шлюзы использоваться не будут;
• <netmask> – маска сети для сетевого интерфейса;
• <name> – имя клиента;
• <dev> – имя используемого сетевого устройства. Если поле опущено, для RARP-запросов будут использованы все устройства, а для ВООТР – первое найденное. Для NFS будет использовано устройство, на котором были получены ответы RARP или ВООТР;
• <auto> – автоконфигурирование. Можно использовать следующие значения:
– rarp – использовать протокол RARP;
– bootp – использовать протокол ВООТР;
– both – будут применены оба протокола;
– none – означает отсутствие автоконфигурирования. В этом случае следует указать все необходимые значения в предыдущих полях.
Дополнительные параметры загрузки
Эти параметры начальной загрузки позволяют пользователю настраивать некоторые внутренние параметры ядра.
Параметр debug
Ядро Linux имеет возможность выводить важные сообщения на консоль (ошибки ввода/вывода, проблемы с оборудованием и т. п.). Пороговое значение важности сообщения задается переменной consoie_iogievei. По умолчанию на консоль отправляется практически все, кроме отладочной информации. Использование параметра debug позволит всем сообщениям ядра попадать на консоль.
Параметр init
Во время загрузки ядро Linux запускает программу init, которая затем подготавливает операционную систему для полноценной работы. Сначала ядро Linux ищет программу init в каталоге /sbin, а при неудаче попробует запустить ее из каталога /bin/sh. Если программа init повреждена и загрузить операционную систему не удается, можно использовать командную строку загрузки init=/bin/sh, которая
Параметр kbd-reset
Обычно на компьютерах семейства х86 ядро Linux не сбрасывает при загрузке контроллер клавиатуры, предполагая, что это делает BIOS. Однако такое предположение не всегда соответствует действительности. Применение этой опции заставляет во время загрузки Linux делать сброс контроллера клавиатуры.
Параметр maxcpus
Параметр ограничивает максимальное количество процессоров, используемое в режиме SMP. Указание в параметре о эквивалентно опции nosmp.
Параметр mca-pentium
Параметр, специфичный для компьютеров IBM модели 95 с шиной МСА (MicroChannel), которые зависают во время теста, выполняемого Linux для обнаружения типа математического сопроцессора. Эту проблему можно решить с помощью параметра загрузки mca-pentium.
Параметр md
Если корневая система компьютера расположена на составном (Multiple) устройстве (как правило, это RAID-массив дисков), то можно использовать параметр md, чтобы сообщить ядру конфигурацию составного устройства.
Подробная информация по этой теме содержится в файле /usr/src/Linux-2.4.3/Documentation/md.txt.
Параметр no387
Параметр актуален только для старых компьютеров на базе процессора i386. В некоторых сопроцессорах 1387 есть ошибки, например, ранние чипы ULSI-387 вызывают зависание при вычислениях с плавающей запятой. Параметр загрузки по387 заставляет Linux игнорировать сопроцессор, даже если он имеется.
Параметр no-hlt
Параметр актуален только для старых компьютеров на базе процессора i486. У процессоров Intel есть инструкция hit, заставляющая процессор ничего не делать, пока внешнее устройство (клавиатура, винчестер и т. п.) не вызовут его для выполнения задачи. Некоторые чипы i486 имели проблемы с командой hit, после которой они не могли вернуться в рабочий режим. С помощью параметра no-hit можно заставить ядро Linux при отсутствии активности вместо остановки процессора выполнять бесконечный цикл.
Параметр no-scroll
Параметр запрещает при загрузке функцию прокрутки. Актуально только для некоторых устаревших терминалов.
Параметр noapic
Параметр позволяет ядру Linux с поддержкой мультипроцессорности не использовать расширенные возможности контроллера прерываний в многопроцессорных машинах. Подробную информацию можно найти в файле /usr/src/Linux-2.4.3/Documentation/IO-APIC.txt.
Параметр nosmp
Позволяет ядру Linux с поддержкой мультипроцессорности на SMP-машинах работать только с одним процессором. Обычно используется для отладки.
Параметр panic
В крайне редком случае «паники» ядра (обнаруженная ядром внутренняя ошибка, которую ядро считает достаточно серьезной, что приводит к выдаче сообщения kernel panic и полной остановке системы) по умолчанию компьютер остается в этом состоянии, пока администратор его не перезагрузит. Однако иногда необходимо, чтобы машина автоматически перезагрузила себя, чтобы восстановить нормальную работу системы. Используя этот параметр, можно установить время (в секундах), по прошествии которого система попытается перезагрузиться. Например, при установке параметра panic=2 о ядро Linux попытается перегрузиться через 20 секунд после выдачи сообщения kernel panic. Нулевое значение соответствует стандартному поведению – ждать вмешательства администратора.
Также время тайм-аута можно прочитать и изменить через интерфейс /proc /sys/kernel/panic.
Параметр pirq
Эта опция передает мультипроцессорному ядру информацию об установках IRQ-слота PCI для некоторых материнских плат SMP. Подробную информацию можно найти в файле /usr/src/Linux-2.4.3/Documentation/IO-APIC.txt.
Параметр profile
Разработчики ядер могут разрешать опции, позволяющие им с целью оптимизации быстродействия ядра определять, как и где ядро может использовать циклы процессора. Эта опция позволяет указать номер конфигурационного файла при загрузке. Можно также скомпилировать ядро с конфигурацией, разрешенной по умолчанию.
Параметр reboot
Параметр задает тип перезагрузки, выполняемой ядром Linux. Стандартно ядро Linux выполняет так называемую «холодную» перезагрузку (полная инициализация аппаратного обеспечения, BIOS проверяет память и т. д.). Существует также «теплая» перезагрузка, при которой не происходит первоначального тестирования оборудования, что несколько убыстряет загрузку операционной системы.
Параметр reserve
Используется для защиты диапазона портов ввода/вывода от тестирования (I/O probe). Формат команды:reserve=iobase,extent[,iobase,extent]…
В некоторых машинах бывает необходимо защитить драйверы устройств от поиска устройств (auto-probing) в определенном диапазоне. Причиной могут послужить устройства, идентифицирующиеся ошибочно, или устройства, инициализация которых ядром нежелательна.
Параметр загрузки reserve устраняет проблему, указывая диапазон портов ввода/вывода, который необходимо исключить из тестирования. При этом диапазон резервируется в таблице ядра регистрации портов как уже определенный. Такой механизм необходимо использовать только при наличии проблем или в специальных случаях.
Параметр vga
Опция, интерпретируемая LILO, а не ядром, однако ее применение стало настолько обычным, что заслуживает упоминания. Также может быть установлена с помощью команды rdev – v. Лучший способ применения этой опции – стартовать с vga=ask. Тогда до загрузки ядра будет предложен список различных режимов, допустимых для имеющейся в системе видеокарты. Более подробная информация содержится в файле /usr/src/Linux-2.4.3/Documentation/svga.txt.Загрузочные параметры, определяющие поведение шины PCI
Параметр pci= можно использовать для изменения способа поиска устройств на шине PCI и поведения этих устройств. Как правило, это необходимо либо для старого оборудования, не совсем корректно использующего технологию Plug and Play, либо для специфических РС1-устройств.
Аргументы pci=bios и pci-nobios
Используются для установки или сброса флага индикации тестирования (probing) PCI через PCI BIOS. По умолчанию используется BIOS.
Аргументы pci=conf1 и pci=conf2
Разрешают тип конфигурации 1 или 2. Также они неявно сбрасывают флаг PCI BIOS probe (т. е. pci=nobios).
Аргумент pci=io=
Если получено сообщение типа
Unassigned 10 space for…/
то может потребоваться указать значение ввода/вывода этой опцией.
Аргумент pci=nopeer
Специфический аргумент, исправляющий погрешности некоторых версий BIOS.
Аргумент pci=nosort
Использование этого аргумента заставляет ядро не сортировать PCI-устройства в процессе проверки.
Аргумент pci=off
Использование этой опции запрещает все проверки PCI-шины. Любые драйверы устройств, использующих функции PCI для поиска и инициализации оборудования, скорее всего, потеряют работоспособность.
Аргумент pci=reverse
Эта опция меняет на обратный порядок PCI-устройств на шине PCI.
Аргументы загрузки для драйверов буфера видеофреймов
Аргумент video= используется, когда уровень абстракции устройства буфера фреймов встроен в ядро. Это означает, что вместо наличия отдельных программ для каждого семейства видеокарт (VOODOO, TNT, S3 и пр.) ядро имеет встроенный драйвер для каждой видеокарты и экспортирует единственный (единый) интерфейс для видеопрограмм. Типичный формат этого аргумента:video=name: option1,option2,…
где name – название универсальной опции или драйвера буфера фреймов. Как только найдено совпадающее имя драйвера, то список параметров, разделенных запятыми, передается в этот конкретный драйвер для окончательной обработки.
Информацию по опциям, поддерживаемым каждым драйвером, можно найти в файле /usr/src/Linux-2.4.3/Documentation/fb/.
Аргумент video=map:…
Эта опция используется для установки консоли отображения устройства буфера фреймов.
Аргумент video=scrollback:…
Число после двоеточия устанавливает размер памяти, выделенной для буфера прокрутки. Суффикс к или к после числа указывает, что число представляет килобайты.
Аргумент video=vc:…
Число или диапазон чисел определяют первую или первую и последнюю виртуальную консоли буфера фреймов.
Аргументы загрузки для SCSI-периферии
Этот раздел содержит описание аргументов загрузки, используемых для передачи информации об установленных SCSI-контроллерах и устройствах.
Аргументы для драйверов Mid-level
Драйверы уровня Mid управляют такими устройствами, как винчестеры, CD-ROM и стримеры без учета специфики SCSI-контроллера.
Максимальный LUN (max_scsi_luns=)Каждое SCSI-устройство может иметь несколько псевдоустройств внутри себя. К примеру, SCSI CD-ROM, обслуживающий более чем один диск одновременно. Каждый CD-ROM адресуется номером логического устройства (Logical Unit Number, LUN). Но большинство SCSI-устройств являются одним устройством, и им назначается нулевой LUN.
Старые SCSI-устройства не могут обработать запросы поиска с LUN, не равным нулю. Зачастую это приводит к зависанию устройства. Чтобы избежать указанной проблемы, по умолчанию пробуется только нулевой LUN.
Для определения количества пробуемых LUN при загрузке, в качестве аргумента загрузки вводится max_scsi_iuns=n, где л – номер от 1 до 8.
Регистрация SCSI ( scsi_logging= )Ненулевое значение этого загрузочного аргумента включает регистрацию всех SCSI-событий.
Параметры для ленточного накопителя SCSI ( st=) При загрузке ядра Linux можно изменить конфигурацию ленточного накопителя SCSI, используяst=buf_size[,write_threshold[,max bufs]]
Первые два числа указываются в килобайтах. По умолчанию buf_size равен 32 Кбайт. write_threshoid – значение, при котором буфер сбрасывается на ленту, по умолчанию 30 Кбайт. Максимальное количество буферов зависит от количества обнаруженных ленточных накопителей, по умолчанию равно 2.
Аргументы для контроллеров SCSI
Понятия, используемые в данном разделе:
• iobase – первый порт ввода/вывода, занимаемый контроллером SCSI. Указывается в шестнадцатеричной нотации и обычно лежит в диапазоне от 0x200 до 0x3ff;
• irq – аппаратное прерывание, установленное на карте. Допустимые значения зависят от конкретного контроллера, но обычно это 5, 7, 9, 10, 11, 12 и 15;
• dma – используемый картой канал DMA (Direct Memoiy Access – прямой доступ к памяти). Обычно применяется только для карт с управлением шиной (bus-mastering);
• scsi-id – идентификатор, используемый контроллером для идентификации себя на SCSI-шине. Только некоторые контроллеры позволят изменить это значение. Типичное значение по умолчанию – 7.
• parity – ожидает ли SCSI-контроллер поддержку всеми подсоединенными устройствами четности при всех информационных обменах. Единица разрешает проверку четности, ноль – запрещает.
К сожалению, большей неразберихи, чем в настройках SCSI-контроллеров и устройств, наверное, не существует. До недавнего времени любая попытка улучшить поддержку SCSI-устройств в Linux оборачивалась тем, что какие-то новые контроллеры работали, а старые (казалось, уже давно отлаженные) теряли свою работоспособность.
В качестве примера ниже приведена конфигурация некоторых семейств контроллеров. Подробную информацию следует искать в документации на конкретные контроллеры.
Adaptec aha154x (aha1542=) Карты серии ahal54x с управлением шиной. Аргументы загрузки выглядят следующим образом: