- 1.18. Booting Linux¶
- 1.18.1. Introduction¶
- 1.18.2. The bootm command¶
- 1.18.2.1. Passing Kernel Arguments¶
- 1.18.2.2. Creating root= options for the Kernel¶
- 1.18.3. The boot command¶
- 1.18.3.1. Boot entries¶
- 1.18.3.2. Bootloader Spec¶
- 1.18.4. Network boot¶
- Загрузка операционной системы из командной строки Grub
- Аварийный запуск системы из командной строки GRUB
- Комментариев: 8
- GRUB: Получаем полный доступ к системе
- Сценарий 1: загружаемся со внешнего носителя
- Сценарий 2: получаем консоль root’a
- Защита?
1.18. Booting Linux¶
1.18.1. Introduction¶
The lowlevel boot command in barebox is bootm — boot an application image . This command can be used directly, but there is also a boot — boot from script, device, … command which offers additional features like a boot sequence which tries to boot different entries until one succeeds.
1.18.2. The bootm command¶
The bootm — boot an application image command is the lowlevel boot command. Depending on the architecture the bootm command handles different image types. On ARM the following images are supported:
ARM Linux zImage
The images can either be passed directly to the bootm command as argument or in the global.bootm.image variable:
When barebox has an internal devicetree it is passed to the kernel. You can specify an alternative devicetree with the -o DTS option or the global.bootm.oftree variable:
NOTE: it may happen that barebox is probed from the devicetree, but you have want to start a Kernel without passing a devicetree. In this case set the global.bootm.boot_atag variable to true .
1.18.2.1. Passing Kernel Arguments¶
The simple method to pass bootargs to the kernel is with CONFIG_FLEXIBLE_BOOTARGS disabled: in this case the bootm command takes the bootargs from the bootargs environment variable.
With CONFIG_FLEXIBLE_BOOTARGS enabled, the bootargs are composed from different global device variables. All variables beginning with global.linux.bootargs. will be concatenated to the bootargs:
Additionally all variables starting with global.linux.mtdparts. are concatenated to a mtdparts= parameter to the kernel. This makes it possible to consistently partition devices with the addpart — add a partition description to a device command and pass the same string as used with addpart to the Kernel:
1.18.2.2. Creating root= options for the Kernel¶
It’s a common case that the Linux Kernel is loaded from a filesystem that later becomes the root filesystem for the Kernel. For several filesystems barebox can automatically append a suitable root= option to the Kernel command line. This is done when global.bootm.appendroot is true. How the root= option is appended depends on the device type and filesystem the kernel is booted from. For disk like devices (SD/MMC, ATA) the partition UUID will be used, the root= option will be something like root=PARTUUID=deadbeef-1 . For UBIFS fileystems it will be root=ubi0:volname ubi.mtd=mtdpartname rootfstype=ubifs . NFS filesystems will result in root=/dev/nfs nfsroot=ip:/path/to/nfsroot,v3,tcp . The v3,tcp part is configurable in global.linux.rootnfsopts .
1.18.3. The boot command¶
The boot — boot from script, device, … command offers additional convenience for the bootm — boot an application image command. It works with Boot entries and Bootloader Spec entries. Boot entries are located under /env/boot/ and are scripts which setup the bootm variables so that the boot command can run bootm without further arguments.
1.18.3.1. Boot entries¶
A simple boot entry in /env/boot/mmc could look like this:
This takes the kernel from /mnt/mmc1/zImage (which could be an Automount path registered earlier). The devicetree will be used from /env/oftree . The Kernel gets the command line root=PARTUUID=deadbeef:01 . Note the .dyn in the bootargs variable name. boot entries should always add Kernel command line parameters to variables with .dyn in it. These will be cleared before booting different boot entries. This is done so that following boot entries do not leak command line parameters from the previous boot entries.
This entry can be booted with boot mmc . It can also be made the default by setting the global.boot.default variable to mmc and then calling boot without arguments.
1.18.3.2. Bootloader Spec¶
barebox supports booting according to the bootloader spec:
It follows another philosophy than the Boot entries . With Boot Entries booting is completely configured in the bootloader. Bootloader Spec Entries on the other hand the boot entries are on a boot medium. This gives a boot medium the possibility to describe where a Kernel is and what parameters it needs.
All Bootloader Spec Entries are in a partition on the boot medium under /loader/entries/*.conf . In the Bootloader Spec a boot medium has a dedicated partition to use for boot entries. barebox is less strict, it accepts Bootloader Spec Entries on every partition barebox can read.
A Bootloader Spec Entry consists of key value pairs:
All paths are absolute paths in the partition. Bootloader Spec Entries can be created manually, but there also is the scripts/kernel-install tool to create/list/modify entries directly on a MMC/SD card or other media. To use it create a SD card / USB memory stick with a /boot partition with type 0xea. The partition can be formatted with FAT or EXT4 filesystem. If you wish to write to it from barebox later you must use FAT. The following creates a Bootloader Spec Entry on a SD card:
The entry can be listed with the -l option:
When on barebox the SD card shows up as mmc1 then this entry can be booted with boot mmc1 or with setting global.boot.default to mmc1 .
machine-id is an optional key. If global.boot.machine_id variable is set to non-empty value, then barebox accepts only Bootloader Spec entries with machine-id key. In case if value of global variable and Bootloader Spec key match each other, barebox will choose the boot entry for booting. All other Bootloader Spec entries will be ignored.
A bootloader spec entry can also reside on an NFS server in which case a RFC2224 compatible NFS URI string must be passed to the boot command:
Additionally to the options defined in the original spec barebox understands the linux-appendroot option. This is a boolean value and if set to true barebox will automatically append a root= string to the Linux commandline based on the device where the entry is found on. This makes it possible to use the same rootfs image on different devices without having to specify a different root= option each time.
1.18.4. Network boot¶
With the following steps, barebox can start the kernel and root filesystem over the network, a standard development case.
See Networking for informations how to configure your network interfaces.
Note that barebox will pass the same IP settings to the kernel, i.e. it passes ip=$ipaddr:$serverip:$gateway:$netmask::
By default, barebox uses the variables global.user and global.hostname to retrieve its kernel image over TFTP, which makes it possible to use multiple boards for multiple users with one single server. You can adjust those variables using nvvars with these commands:
Copy the kernel (and devicetree if needed) to the root directory of your TFTP server, and name them accordingly; for example:
(In this example, the directory /tftpboot represents the root directory of the TFTP server. That directory depends on the configuration of your TFTP server, some servers may also use /srv/tftp instead.)
barebox will pass nfsroot=/home/$
For more information about booting with nfsroot , see Documentation/admin-guide/nfs/nfsroot.rst in the Linux kernel documentation.
If the preconfigured paths or names are not suitable, they can be adjusted in /env/boot/net :
boot net will then retrieve the kernel (and also the device tree and initramfs, if used) over TFTP and boot it.
Источник
Загрузка операционной системы из командной строки Grub
У меня на домашнем компьютере стоит две операционные системы, Windows 7 и Linux (Arch). Причем вторая появилась относительно недавно. Да и особых знаний о новой (для меня) ОС не было. Тем не менее систему я поставил и даже относительно настроил под себя. Энтузиазм и программерское любопытство меня пересиливало, поэтому, в качестве ознакомления, стал экспериментировать с различного рода пакетами. К сожалению, не всегда вчитываясь в детали.
Решил я переставить Grub, а точнее обновиться до Grub2. (Слышал я такое мнение, что в духе Linux принято держать последнюю версию пакета… Про изменения Grub2 хорошо написано тут.)
Ну и как результат «спешной» установки — перестала грузиться система. Единственное за что можно было зацепиться — это приглашение командной строки:
По нажатию на Tab вываливается список возможных команд. Их существенно меньше чем в командной строке Linux, но их достаточно для загрузки системы. Почитав про grub тут я решил загрузить Windows, все-таки тут я пока себя чувствую увереннее. Для этого нужно было указать где находиться загрузчик ОС и передать ему управление:
grub> root (hd0,2) [Устанавливаем корневой раздел и монтируем. Тут главное помнить, на каком разделе стоит операционная система]
Запись (hd0,2) означает устройство диска номер 0 (мастер), раздел номер 2.
что соответствует устройству /dev/sda2 (в моем случае). У вас это может быть или /dev/hd2, или еще что-нибудь, в зависимости от дистрибутива. Нумерация устройств идет по-порядку и начинается с (hd0,1) или /dev/sda1.
Далее вводим:
grub> chainloader +1 [пробел перед «+» важен. сhainloader — передает управление загрузкой по цепочке другому загрузчику. В моем случае это был NTLDR]
grub> boot
NTLDR — это загрузчик Windows.
Система стала грузиться, а раз это дало результат — можно копаться дальше (все-таки не Windows теперь предмет изучений).
Перезагружаемся и вводим снова.
grub> root (hd0,6)
grub> linux /boot/vmlinuz26 root=/dev/sda6 [Загружает указанное linux-ядро (/boot/vmlinuz26) с параметрами(root=/dev/sda6)]
Тут стоит различать команду root (hd0,6) и параметр root=/dev/sda6. Первое монтирует раздел к среде выполнения. А второе указывает где находиться root загружаемой ОС. В моем случае ядро и корень оказались на одном разделе, хотя это может быть не так.
grub> initrd /boot/kernel26.img [Загружает указанный initrd-образ]
grub> boot
Мне это помогло, надеюсь вам это не пригодиться, а если и пригодиться, то поможет.
Кстати, если неправильно указать root, процесс загрузки завершиться ошибкой и появиться приглашение вида:
[ramfs /]#
Можно набрать:
[ramfs /]# ls /dev
и посмотреть список устройств(если вы вдруг его забыли как я).
Моя проблема установки gurb2 была в том, что при установке затер файл меню grub (обычно он находиться /boot/grub/menu.lst), а новый файл не создал. Для создания файла конфигурации надо было выполнить grub-mkconfig.
Если у вас сбились настройки grub, то отличия в командах будут минимальными:
- для загрузки Windows вместо root (h d0,2) надо набирать rootnoverify (hd0,1). Нумерация устройств начинается с (hd0,0), а не (hd0,1). А командой rootnoverify вы устанавите корневое устройство, но не смонтируете его.
- для загрузки Linux поменяется другая команда: вместо linux вам понадобится команда kernel (полный аналог, даже параметры теже).
UPD: дописал про отличия загрузки с grub от grub2. Спасибо bliznezz
Источник
Аварийный запуск системы из командной строки GRUB
Краткая инструкция по загрузке Windows и Linux из командной строки GRUB на случай каких-либо неполадок. Сразу оговорюсь, что сам grub2 должен запускаться, если же вы не можете попасть в консоль grub2, то вам скорее всего потребуется переустановка grub.
Запуск Linux с помошью командной строки GRUB
Нам понадобится написать всего 3 строчки: «set root«, «linux» и «initrd» и в конце дать команду «boot».
set root=(hd0,5)
linux /boot/vmlinuz-2.6.32-generic root=/dev/sda5
initrd /boot/initrd.img-2.6.32-generic
boot
Немного поясню — в строке set root указываем на корневой раздел linux. В моем случае это был «hd0,5», он же «/dev/sda5», то есть пятый раздел первого диска. Список доступных разделов диска можно получить, выполнив команду ls.
Далее, командой linux, указываем загружаемое ядро. Полное название ядра знать не обязательно, просто пишем «linux /boot/vmlinuz» и нажимаем tab. Консоль сама допишет правильный результат. У меня был предложен выбор между старым и новым ядром. Только в конце строки не забудьте дописать параметр root=/dev/sda5 или что там у вас.
Для старта системы этого уже должно хватить. Осталось выполнить команду boot. В некоторых случаях перед выполнением «boot» попробуйте дополнительно выполнить команду initrd, как описано выше в примере.
Запуск Windows из командной строки GRUB
Процесс запуска Windows из консоли GRUB ещё проще. Как и в случае с Linux в начале указываем корневой раздел, где находится Windows. В моем случае окошки установлены в /dev/sda1. После чего, отдаем команду chainloader +1, которая заставляет grub2 передать дальшейшее управление загрузкой Windows-загрузчику. Даем команду boot на запуск системы и наблюдаем загрузку винды. Пример:
set root=(hd0,1)
chainloader +1
boot
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
Комментариев: 8
Единственный работающий мануал на весь рунет.
Если не знаете на каком разделе установлен Линукс (вдруг), можно каждый раздел проверить командой типа ls(hd0,1)/ (со слешем в конце).
Привет, а как сделать так, чтобы каждый раз это не прописывать?
Для этого нужно прописать соотвествующие изменения в загрузчик GRUB. Обычно нужные строки добавляются автоматически при установке системы.
Что делать, если видит только разделы msdos, но я знаю что там есть Linux
Что делать, если видит только разделы msdos, но я знаю что там есть Linux
Если пишет например (hd0,msdos5) — то это тоже самое, что (hd0,5).
У меня так пишет, хотя там Linux и ext4.
Что делать если на всех разделах не находит виндовс? пишет unknown filesystem
Источник
GRUB: Получаем полный доступ к системе
GRUB, безусловно, является самым продвинутым загрузчиком на сегодняшний день, и за это любим админами и разработчиками по всему миру. Его функционал настолько широк, что он практически монополизировал рынок загрузчиков в мире *NIX, а некоторые вообще говорили, что GRUB2 — это скорее маленькая операционная система, чем просто загрузчик. Эдакий швейцарский нож в мире загрузчиков.
Но в этот раз я хочу обратить внимание на то, что с помощью швейцарского ножа можно не только открывать консервы, но и вырезать неприличные слова на парте.
Сценарий 1: загружаемся со внешнего носителя
Ситуация, когда в BIOS заблокирована загрузка со внешних носителей, — отнюдь не редкость. Делается ли это из соображений безопасности или иных причин не так уж и важно. Важно то, что GRUB может помощь нам преодолеть этот барьер. Ниже описана последовательность действий, которая позволит нам загрузиться с флешки.
- Изготавливаем загрузочную флешку любым способом, например, с помощью unetbootin.
- Вставляем флешку и включаем компьютер.
- Дожидаемся появления экрана grub (иногда для того, чтобы успеть его поймать, надо держать Shift ).
- Перед нами появляется список вариантов загрузки.
- Нажимаем c и входим в интерактивный режим.
- Теперь требуется указать носитель, с которого будем грузиться. Обычно (hd0) — это родной жесткий диск компьютера, а флешка становится (hd1). Выяснить, как назовется флешка в вашем случае, нетрудно просто опытным путем.
Так или иначе, вводим: root (hd1) для GRUB Legacy или set root=(hd1) для GRUB2 - Просим передать управление загрузчику на указанном диске: chainloader +1
- Загружаемся! boot
Если вы все сделали правильно, то в результате вы успешно загрузитесь со своей флешки, несмотря на запрет в биосе. Опытным путем мне удалось выяснить, что метод не работает если ваша материнка не умеет грузиться с usb или не опрашивает устройства при каждой загрузке (как, например, на моем eee PC при включенном Boot Booster).
Лирическое отступление: этот метод мне удалось опробовать в одном из терминальных классов нашего университета, где на компах стояли в дуалбуте винда с линуксом. Прелесть того случая в том, что факультетский сервер экспортировал /home по NFS и та терминалка была занесена в разрешенные подсети. В результате, мне удалось прочитать домашние каталоги пользователей того сервера и уйти так никем и незамеченным.
Сценарий 2: получаем консоль root’a
Опять-таки, ситуация, когда пароль рута не сообщают конечным пользователям компьютера, ни у кого удивления не вызывает. Однако все тот же GRUB поможет нам это досадное ограничение обойти. В отличие от предыдущего способа, удобного для доступа в духе «незаметно пришел, скопировал и ушел, не наследив», этот способ удобнее для внесения нужных нам изменений в установленную систему. Кроме того, для этого нам уже не нужны никакие флешки.
- Аналогично, добираемся до списка вариантов загрузки.
- Выбираем нужный нам вариант.
- Входим в режим редактирования. Здесь есть небольшие отличия между GRUB Legacy и GRUB2. В GRUB2 после нажатия клавиши e мы сразу попадаем в режим редактирования, а в GRUB Legacy нужно нажать e первый раз, выбрать строку для редактирования и еще раз нажать e .
- Выбираем строку, которая начинается со слова linux или kernel.
- Удаляем из нее слова quiet и splash , если они есть, и дописываем в конец single init=/bin/bash
- Если у нас GRUB2, то сразу жмем Ctrl+X , а если GRUB Legacy — Esc и потом b
В результате мы загрузимся в рутовую консоль безо всяких паролей и ненужных вопросов.
Защита?
И GRUB2, и GRUB Legacy предоставляют возможность ограничить доступ к интерактивному режиму и редактированию с помощью директивы password . Подробности описаны в руководстве по GRUB2 и GRUB Legacy. В обоих случаях манипуляции весьма просты и не требуют много времени.
Источник