Автоматическая настройка
GRUB2 традиционно настраивается использованием утилиты grub-mkconfig для генерации конфигурационного файла.
grub-mkconfig создаёт конфигурационный файл основываясь на шаблонах расположенных в /etc/grub.d. Стандартных шаблонов, в основном, должно хватить для большинства схем загрузок.
00_header 10_linux 20_linux_xen 30_os-prober 40_custom 41_custom README
Схема именования ядер
Чтобы grub-mkconfig определила доступные ядра, их имена должны начинаться с vmlinuz- или kernel-.
Например:
Код Пример названия ядер, которые GRUB2 может определить
/boot/vmlinuz-3.4.3 /boot/kernel-2.6.39-gentoo /boot/kernel-genkernel-x86_64-3.17.1-gentoo-r1
Если используется initramfs, то название initramfs файла должно начинаться с initramfs- или initrd-. Версия initramfs должна совпадать с версией образа ядра. Файлы, созданные с помощью genkernel, также будут найдены.
Например:
Код Пример initramfs имён, которые GRUB2 может определить
/boot/initrd.img-3.4.3 /boot/initrd-3.4.3.img /boot/initrd-3.4.3.gz /boot/initrd-3.4.3 /boot/initramfs-3.4.3.img /boot/initramfs-genkernel-3.4.3-gentoo /boot/initramfs-genkernel-x86_64-2.6.39-gentoo
Для создания файла grub.cfg выполните команду grub-mkconfig:
Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.2.9 done
Тихая загрузка ядра
Для загрузки ядра без вывода на экран системных сообщений отредактируйте файл /etc/default/grub, добавив в переменную GRUB_CMDLINE_LINUX_DEFAULT.
Файл Пример параметров тихой загрузки
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
Systemd
Для загрузки systemd при использовании GRUB2 отредактируйте переменную GRUB_CMDLINE_LINUX вот так:
Файл Systemd пример
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
Как установить пароль на редактирование параметров ядра?[править]
По умолчанию при загрузке любой пользователь может добавить/изменить параметры.
Этого можно избежать, если установить пароль. Проще всего сделать это в центре управления системой. Для этого потребуется пакет alterator-grub и выполнить следующие действия:
- Зайдите в ЦУС (acc), перейдите в режим эксперта, и в разделе «Система» откройте «Загрузчик GRUB».
- Установите флажок «Установить или сбросить пароль» и введите необходимый пароль.
Примечание: Логин/пароль (последний в хэшированном виде) записываются в файл /etc/grub.d/50_password:
#!/bin/sh cat << EOF set superusers="boot" password_pbkdf2 boot grub.pbkdf2.sha512.10000.<hash> EOF
Также для ограничения загрузки (как с изменением параметров, так и без) можно добавить в файл /etc/grub.d/40_custom строки:
set superusers="user" password user password
GRUB_TERMINAL_OUTPUT='console'
После подобных операций следует перегенерировать конфигурацию командой grub-mkconfig -o /boot/grub/grub.cfg (либо grub-mkconfig, в зависимости от дистрибутива). В случае использования alterator-grub — это не требуется.
Работа с конфигурацией GRUB2
Отредактируйте файл конфигурации grub (/etc/default/grub.conf) с помощью предпочтительного редактора. Добавьте/измените интересующие вас параметры для строки GRUB_CMDLINE_LINUX_DEFAULT. Например, я добавил параметры systemd.log_level=debug systemd.log_target=console. Эти дополнительные параметры активируют режим отладки системы и перенаправляют в консоль. Итак, после обновления моя запись в файле /etc/default/grub будет выглядеть примерно так:
Теперь, чтобы автоматически сгенерировать конфигурацию grub2 на основе добавленных параметров, нам нужно запустить grub2-mkconfig, добавив путь к этой конфигурации:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Перезагрузите систему и проверьте, вступили ли изменения в силу из /proc/cmdline, как мы делали ранее.
Что такое GRUB?
GRUB в основном отвечает за предоставление вам меню параметров, из которого вы можете выбрать операционную систему или среду, в которую хотите загрузиться. Кроме того, GRUB отвечает за загрузку ядра Linux.
Вот как выглядит пункт меню GRUB. Если у вас установлено несколько операционных систем, они будут перечислены здесь.
Примечание. GRUB не ограничивается только загрузкой операционных систем Linux, вы также можете использовать его для загрузки в другие операционные системы, такие как Windows.
На момент написания этой статьи доступны две основные версии GRUB.
- GRUB Legacy: это первая версия GRUB, изначально разработанная в 1995 году.
- GRUB 2: это последняя версия GRUB, используемая многими распространенными дистрибутивами Linux, такими как Manjaro, Ubuntu, Fedora и Red Hat Enterprise Linux (RHEL). GRUB 2 предоставляет вам лучшие инструменты и параметры конфигурации, чем его предшественник.
Помимо GRUB, дистрибутивы Linux также используют другие загрузчики, такие как Linux Loader (LILO), coreboot и SYSLINUX.
Работа с grubby
Чтобы добавить/изменить параметры ядра посредством grubby, нам нужно указать параметры при помощи -args=args совместно с опцией -update-kernel=default-kernel-path. Например, я добавил параметры “clocksource=tsc tsc=reliable”. Параметр “clocksource=tsc” устанавливает источник тактовой частоты как tsc (clocksource=tsc), если он ещё таковым не установлен. Параметр же “tsc=reliable” отключает все проверки стабильности TSC в процессе загрузки.
# grubby --args="clocksource=tsc tsc=reliable" --update-kernel /boot/vmlinuz-$(uname -r)
PS. Для удаления существующих параметров используйте команду -remove-arguments.
Перезагрузите систему и убедитесь, что параметры “clocksource=tsc tsc=reliable” добавлены:
# reboot # cat /proc/cmdline root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295 clocksource=tsc tsc=reliable
Либо просто проверьте это через grubby:
# grubby --info /boot/vmlinuz-$(uname -r)
В дальнейшем вы можете убедиться, что источником тактовой частоты определён tsc, при помощи следующей команды:
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc
Это всё, что касается grubby.
Как дописать свои собственные пункты меню?[править]
- Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось — возможно, придумается какой-то новый общий случай.
- Если вам всё же хочется — допишите то, что считаете нужным в /etc/grub.d/40_custom
Например, если автоматически не обнаружилась Windows 10, может помочь такое описание пункта меню:
menuentry 'Windows 10' { search --fs-uuid --no-floppy --set=root <UUID> chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi }
Где UUID — UUID раздела с загрузчиком Windows. Узнать UUID раздела можно командой
После редактирования этого файла нужно вызвать # grub-mkconfig -o /boot/grub/grub.cfg
Команды консоли GRUB
Чтобы попасть в консоль, нужно нажать клавишу C во время отображения меню загрузки.
Довольно универсальная команда при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в Linux — для вывода содержимого папки. например:
Еще одно полезное свойство комадны «ls» — она позволят получить информацию о любом разделе:
Команда сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
Данная команда выводит содержимое заданного файла, используется в формате:
chainloader
Передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:
Для (загрузчика Windows) можно использовать:
При использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого и тип файловой системы на этом разделе, также команда может быть использована для задания другого root-раздела. Раздел задается в «grub device» — формате »(hd*,*)«. например:
После задания раздела команда сообщит новый root-раздел и тип файловой системы. Примечание: «root hd(*,*)» не всегда корректно срабатывает. более предпочтительным вариантом является «set root» (см. ниже)
Весьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в формате:
Наиболее необходимое ее применение — для задания root-раздела, например:
Также с ее помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. Для этого изменяем переменные «color_normal» — для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно. Например, попробуем такой вариант:
lsfonts
Команда отобразит список загруженных в настоящий момент шрифтов.
При использовании в чистом виде выведет список доступных команд. В формате:
Выведет справку по всем командам, начинающимся на «r».
Отобразит справку по команде «search»
background_image
Позволяет «на лету» изменить фоновое изображение. Используется в формате:
Дает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. В сочетании с заменой цветов через set позволит довольно быстро подобрать подходящий вариант оформления.
При использовании без параметров сбросит текущее фоновое изображение. Однако, заданные цвета останутся, так что если у вас черный цвет текста — на черном фоне вы его не увидите.
terminal_output.console
Позволяет переключиться на обычную черно-белую цветовую гамму. Весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. Картинка на фоне — это, конечно, красиво, но на некоторых участках фона может быть не виден текст.
Защита от зацикливания на перезагрузке
Если загрузка ОС не закончилась успешно, или осуществлялась загрузка в режим восстановления, то при следующей загрузке — меню выбора GRUB будет выводится и ждать явного вмешательства оператора (так же, как если бы вы выставили GRUB_TIMEOUT=-1). При этом последующие аппаратные сбросы системы — не помогут проскочить меню.
Зачем это сделано
При загрузке в лог файлы пишется информация и размеры логов растут. В нормально загруженной систем работают сервисы, которые архивируют и подчищают логи. В нормально работающей системе постоянно пополнение лог-файлов не требует внимания со стороны пользователя. Совсем иная ситуация при загрузке — никакие сервисы по очистке логов не работают (они запускаются позже) и, если, в процессе загрузки система свалится и начнет перезагружаться, то лог будет только расти. И расти он будет до тех пор пока будут повторятся перезагрузки, и будет хватать места на том разделе диска, где расположен каталог /var/log. А когда на разделе с /var/log место кончится то система зависнет уже наглухо и даже в режим восстановления ее будет не загрузить. Загрузится можно будет только с LiveCD/USB (с Live системы и надо будет лечить систему, первым делом руками зачистив логи). Защита встроенная в GRUB не позволит системе попасть в столь тяжелое положение.
А что если.
Функция (как видно) — безусловно полезная, однако она может быть неудобной для без-клавиатурных станций — на них «зависшее» меню GRUB-а — это не преимущество, а некоторые сложности (без подключения клавиатуры такая станция, попавшая в меню GRUB, никогда не загрузится вообще).
А что если отключить?
Собственно сами случаи, когда циклится загрузка — не так и часты, если машина работает без графики то там вообще мало чему падать на этапе загрузки, да еще так, что бы система вышла на перезагрузку. Разве что совсем кривой прикладной софт встроенный в процесс загрузки… Гораздо чаще загрузка прерывается из за внешних условий — например пропадает питание, или кто-то сбрасывает грубо систему.
Как это работает
Реализовано все достаточно просто — в скрипте /boot/grub/grub.cfg переменная окружения GRUB recordfail устанавливается в ходе каждой загрузки в 1. Скрипт /etc/init.d/grub-common запускается на финальных этапах загрузки (линки с именем S99grub-common есть в /etc/rc2.d, /etc/rc3.d, … /etc/rc5.d). grub-common сбрасывает переменную recordfail в 0. Если скрипт /etc/init.d/grub-common не отработает, то не сброшенное значение recordfail предотвращает автоматическую загрузку, меню GRUB появляется и потребуется явное интерактивное вмешательство со стороны оператора.
Для того, что бы убрать необходимость интерактивного вмешательства в процесс загрузки нужно установить переменную GRUB_RECORDFAIL_TIMEOUT в /etc/defaul/grub в то количество секунд, которые меню GRUB-а будет ждать ввода в случае когда recordfail=1. Сохранить изменения и обновить GRUB (sudo update-grub).
Финт с GRUB_RECORDFAIL_TIMEOUT может не сработать в некоторых (старых) версиях GRUB. Тогда нужно редактировать /etc/grub.d/00_header. Нужно найти функцию make_timeout (), которая выглядит примерно так:
и заменить в ней строчку
После этого финт с GRUB_RECORDFAIL_TIMEOUT заработает. Нужно сохранить изменения и обновить GRUB (sudo update-grub).
Вы когда-нибудь интересовались различными этапами загрузки операционной системы? Что происходит, когда вы включаете свой компьютер?
Этапы процесса загрузки Linux условно можно разделить на:
Загрузка BIOS (POST).
Первый этап загрузки (MBR или GPT).
Второй этап загрузки (GRUB2).
Инициализация главного процесса (init или systemd).
Уровни выполнения (runlevels).
Сейчас мы их и рассмотрим.
Кому стоит перейти на Ubuntu?
Никакой разницы между базовыми программами нет. Пока не используются специфические функции
Ubuntu даже невооруженным взглядом выглядит самым прожорливым Linux’ом. Но и самым красивым, самым прокаченным.
Поэтому для повседневных задач она подходит превосходно, заменяя любую другую ОС. И не приносит никаких проблем при переезде с macOS или Windows.
Поэтому для офисных работников клавиатуры и мыши, а так же массы девелоперов, имеющих нативные инструменты для Ubuntu и Co это идеальная система. Почти как macOS, только чуть сложнее и с большим количеством возможностей.
Этот CAD заменяет AutoCAD. Почти. Впрочем, KOMPAS и NX для NIX тоже есть
За пределами офисной работы или веб-разработки появляется масса вопросов, связанных с софтом и конкретным используемым оборудованием.
Нативно поддерживается почти все, так что если не нравится Windows, а «хакинтош» по каким-то причинам невозможен — Ubuntu станет лучшим выбором для первой попытки использовать Unix.
Да, что-то может работать с трудом. Но если уж работает — то работает на славу. И заморочек все же меньше, чем с macOS. Попробуйте, если найдется нужный софт: этот опыт стоит того.
iPhones.ru
Есть ли жизнь в NIX?
/etc/grub.d
Эта папка содержит в себе скрипты, которые используются для создания файла «grub.cfg». При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле «grub.cfg» меню загрузки, которое мы и видим. Два основных из них:
Пример
Добавляем режим загрузки без графической заставки, с текстовым отображением процесса загрузки (verbose mode). Для этого мы немного отредактируем обычный пункт загрузки. допустим, он выглядит так (в «/boot/grub/grub.cfg«):
Для того, чтобы сделать из этого verbose mode, нам нужно убрать опции quiet и splash и изменим название самого пункта. В итоге получаем:
Все это и добавляем в «40_custom» в конец файла. Строка с echo не является обязательной она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении GRUB.
Как переустановить GRUB?[править]
- Загружаемся с rescue-cd, например ALT Linux Rescue
- Если использован ALT Linux Rescue:
mount-system chroot /mnt/system1
Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
mount /dev/sda2 /mnt mount -o bind /dev /mnt/dev mount -o bind /proc /mnt/proc mount -o bind /run /mnt/run mount -o bind /sys /mnt/sys chroot /mnt/ /bin/bash
Скачиваем предыдущую версию пакета:
Устанавливаем rpm
rpm -Uvh --oldpackage /home/andy/grub2-pc-1.99-alt9.i586.rpm
Переконфигурируем меню grub
grub-mkconfig -o /boot/grub/grub.cfg
После описанного выше, у меня загрузилась операционная система.
Уровни выполнения (runlevels)
Runlevel 0 — завершает работу системы.
Runlevel 3 — многопользовательский режим с поддержкой сети, но без графического интерфейса. Чаще всего серверные версии Linux работают именно на этом уровне выполнения.
Runlevel 4 — не используется. Пользователь может настраивать этот уровень исходя из его целей.
Runlevel 5 — схож с режимом 3, но здесь запускается графический интерфейс. В этом режиме работают десктопные версии Linux.
Runlevel 6 — перезагружает систему.
Примечание: В системах семейства Debian уровни выполнения выстроены немного иначе. Например, Ubuntu в режиме командой строки запускается с уровнем выполнения 5.
В процессе загрузки Linux состояние уровня выполнения представлено буквенно-цифровым кодом. Если вы посмотрите на скриншот, приведенный ниже, вы увидите, что мой текущий уровень выполнения равен N 5 ; это означает, что мой компьютер уже завершил процесс загрузки, и работает в многопользовательском режиме с графическим интерфейсом.
Узнать текущий режим уровня выполнения можно с помощью следующей команды:
Если вам по какой-либо причине потребуется изменить уровень выполнения, то это можно сделать с помощью следующей команды:
sudo telinit
Как установить GRUB?[править]
Установить дистрибутив с GRUB либо мигрировать загрузчик вручную.
apt-get install grub grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB grub-mkconfig -o /boot/grub/grub.cfg
Последний пункт выполняет генерацию конфига GRUB на основе шаблонов/скриптов в /etc/grub.d/. Редактировать полученный конфиг руками не рекомендуется т.к. он будет уничтожен следующей автогенерацией (выполняемой, к примеру, installkernel-ом).
Проверьте содержимое /etc/sysconfig/grub2: если там нет раскомментированной переменной GRUB_AUTOUPDATE_DEVICE (при смене загрузчика вручную не будет, т.к. она добавляется только alterator-grub), добавьте устройство или их список; если root/boot на md raid1, следует задать список дисков, на которых он размещён — например, не ‘/dev/md0 ‘, а ‘/dev/sdb /dev/sda ‘. После этого стоит выполнить grub-autoupdate.
Стабильность, качество работы и производительность
Один и тот же условный CAD на «маках» работает быстрее, на Ubuntu его можно «форсить» простым добавлением аппаратных ресурсов, а Windows на удивление оказывается проще в настройке. И мануалов с разбором типовых проблем к нему больше.
Из-за проприетарных драйверов ситуация может меняться за счет качества реализации оных, может быть хуже, чем на других платформах, поэтому рендеринг видео или графики может быть медленнее, чем в других системах.
Если проприетарные драйвера есть именно для этого дистрибутива, они даже обновляться будут автоматически
Кроме того, с аудио- и видео-файлами работа на этой платформе довольно грустная. Софта меньше, оптимизация хуже.
Аналогичная ситуация складывается при работе с внешними устройствами, скажем, при программировании ПЛИС или других устройств через периферийные интерфейсы. Работает не все.
Печальная ситуация: знакомых имен нет, в основном простые утилиты для выполнения одной операции
Тем не менее, нестабильная работа — это не про Ubuntu. Глюков, багов, синих экранов смерти здесь нет и быть не может.
Пока речь идет о выполнении стандартных функций NIX-софта, все практически идеально. Даже Chrome и тот кажется примером браузера, переставая жрать память в привычных объемах.
Знакомство с параметрами ядра
Ядро Linux — это сложный элемент ПО, чьё поведение, как и поведение любого другого ПО, зависит от параметров по умолчанию, установленных в коде самого этого ядра. К примерам этого поведения можно отнести то, как ядро управляет диском, памятью или загрузкой системы. Эти параметры определяют поведение Linux, и в целях корректировки поведения системы могут быть изменены как в процессе работы ядра, так и при его загрузке.
Существует 3 способа, с помощью которых вы можете добавлять или редактировать эти параметры. Выбор одного из них будет зависеть от конкретного случая.
- При загрузке ядра (загрузочные параметры). Эти параметры вызываются через загрузчика ОС.
- В процессе работы ядра через псевдо-файловые системы /proc и /sys, используя “sysctl”.
- При компиляции (или перекомпиляции) ядра и его подсистем (вроде initrd).
В этой статье я обширно рассмотрел загрузочные параметры ядра, а именно: что это такое и как их можно добавлять, редактировать или удалять. В дальнейших статьях серии я рассмотрю остальные 2 варианта с соответствующими примерами. Я также представлю вам пример проблемы, решённой мной в прошлом, относящийся к третьему варианту, чтобы сформировать полноценное понимание темы.
Установка без бубнов. Почти
Системные требования текущей домашней версии Ubuntu 19.10: двухядерный процессор, 4 Гб оперативной памяти, 25 Гб места на жестком диске, доступ и интернету и USB-порт для установки.
Загрузка с USB-носителя запускает live-систему. Она позволяет детально ознакомиться с возможностями и немного поработать в окружении. Любые изменения настроек при таком запуске не сохраняются, поэтому для нормальной работы необходима стационарная установка.
Первая попытка установки не удалась: Ubuntu требует создания отдельного раздела собственного формата, не читаемого из-под других систем.
Создать его можно в установочном меню на любом диске с достаточным количеством свободного места. Загрузку нескольких систем обеспечивает автоматически создаваемый мультизагрузочный сектор с графическим меню.
Стоит отнестись предельно внимательно к этому моменту: несколько дисков в компьютере и ошибочный выбор приведет к невозможности запуска как новой, так и предыдущей системы. Неприятный сюрприз, хотя и очень быстро решаемый.
Ничего не меняется как при запуске из VirtualBox, так и при работе с жесткого диска. Решаемо
При этом FAT/NTFS-диски читаются даже во время загрузки
Но прямое обращение к ним в системе требует дополнительной настройки, поэтому если не хочется связываться — лучше все важное разместить на системном или специально размеченном диске
Для рядового пользователя норм, для гика — безрадостно.
Создание дополнительного меню загрузки
Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:
Поскольку файл скопируется с правами 444, выставим ему права на запись:
Теперь открываем его в любимом текстовом редакторе и изменяем:
Для задания фонового изображения найдем строку с if background_image (подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет — смотрите пример файла в конце раздела). После команды background_image прописан путь к файлу картинки, поменяйте его на нужный файл.
Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с set color_highlight и else теперь настройка будет такой:
Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.
Настроив свой файл, сохраните его Ctrl + Shift и закройте.
Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:
Если ваш путь к файлу отличается — исправьте его.
Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.
Обновите свой «grub.cfg» выполнив команду:
В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):