CentOS 7 и RHEL 7 Обзор процесса загрузки и устранение неисправностей

В этой статье описывается процесс загрузки для систем CentOS / RHEL 7.x. Хотя он может оставаться похожим на предыдущие выпуски, с RHEL 7 вводится systemd. В дополнение к процессу загрузки я предоставлю советы и рекомендации по устранению неполадок.

Вам нужно понять процесс загрузки, прежде чем вы сможете активно устранять проблему при загрузке. Просмотрите шаги ниже, пока не ознакомитесь с процессом.

Обзор высокого уровня

  • Власть + пост.
  • Поиск прошивки устройства.
  • Прошивка читает загрузчик.
  • Загрузчик загружает конфиг (grub2).
  • Загрузчик загружает ядро ​​и initramfs.
  • Загрузчик передает управление ядру.
  • Ядро инициализирует аппаратное обеспечение + выполняется /sbin/initкак pid 1.
  • Systemd выполняет все цели initrd (монтирует файловую систему /sysroot).
  • Ядро root FS переключилось с initramfs root ( /sysroot) на system rootfs ( /), и systemd повторно запускается как системная версия.
  • Systemd ищет цель по умолчанию и запускает / останавливает юниты в соответствии с настройками, автоматически решая зависимости и появляется страница входа.

Для получения дополнительной информации о процессе загрузки обратитесь к официальной документации по ОС для вашей системы.

Системные цели

Цели в основном проверки зависимостей. Они имеют конфигурацию «до» и «после», чтобы точно определить, какие службы требуются для достижения этой цели. Например: arp.ethernet.service, firewalld.serviceи так далее должны быть запущены и работу до network.targetможет быть достигнуто. Если это не будет достигнуто, такие услуги, как httpd, nfsи ldapне может быть запущен. В RHEL / CentOS 7 можно установить 4 цели.

  • graphical.target (графический интерфейс)
  • multi-user.target (многопользовательский режим, текстовый вход в систему)
  • rescue.target (приглашение sulogin, базовая инициализация системы)
  • emergency.target (приглашение sulogin, pivot initramfs завершен и системный корень подключен только для чтения)

Чтобы просмотреть текущую цель загрузки по умолчанию, используйте следующее:

systemctl get-default

Имейте в виду, что вы можете изменить это во время выполнения, изолировав цель. Это запустит / остановит все службы, связанные с новой целью, поэтому соблюдайте осторожность (см. systemctl isolate new.target).

Однопользовательский режим

Есть моменты, когда вам нужно будет загрузиться в однопользовательском режиме, чтобы исправить проблему с операционной системой. В этом примере я покажу вам, как использовать rescue.target«однопользовательский режим» в RHEL / CentOS 7.

  1. Прервите меню grub2, нажав «e» для редактирования при появлении запроса в меню grub.
  2. Найдите строку, которая указывает версию ядра ( vmlinuz ) и добавьте к ней следующее:systemd.unit=rescue.target
  3. Нажмите «Ctrl + x», чтобы начать.
  4. После этого вам будет предложено ввести пароль root для продолжения. После выхода из оболочки восстановления процесс загрузки продолжит загрузку целевой установки по умолчанию.

Восстановление пароля root

Этот процесс немного отличается от того, что мы использовали в прошлых выпусках, но это простая задача, для которой требуется очень мало шагов. Если вам нужно восстановить какие-либо учетные данные, вы можете использовать этот метод для получения доступа к виртуальной машине. Вы все еще можете загрузиться с live CD, смонтировать корневую файловую систему и отредактировать пароль, но этот метод устарел и требует больше усилий.

  1. Перезагрузите систему.
  2. Прервите меню grub2, нажав «e» для редактирования при появлении запроса в меню grub.
  3. Переместите курсор в конец строки, в которой указано ядро ​​( vmlinuz ). Вы можете удалить все другие консоли, кроме TTY0, однако этот шаг может не потребоваться в вашей среде.
  4. Добавить rd.break( без кавычек ), которое прервет процесс загрузки непосредственно перед передачей управления из initramfs в реальную систему.
  5. Ctrl + x для загрузки.

На этом этапе корневая оболочка представлена ​​с корневой файловой системой, смонтированной в режиме только для чтения /sysroot. Нам нужно будет перемонтировать его с правами на запись.

Remount /sysroot.

# mount -oremount,rw /sysroot

Перейдите в тюрьму chroot.

# chroot /sysroot

Измените пароль для пользователя, у которого у нас есть устаревшие учетные данные.

# passwd <username>

Если вы используете SElinux, перед продолжением процесса загрузки вам следует подумать о перемаркировке всех файлов. Эта часть может быть пропущена, если вы не используете SElinux.

# touch /.autorelabel

Выйдите дважды, и система загрузится с того места, где мы ее прервали.

Просмотр логов предыдущих загрузок

Это может быть полезно для просмотра журналов предыдущих неудачных попыток загрузки. Если журналы journald сделаны постоянными (обычно хранятся в памяти и освобождаются при загрузке), это можно сделать с помощью journalctlинструмента. Выполните следующие действия, если вам нужно настроить постоянное ведение журнала загрузки.

В качестве пользователя root создайте файл журнала для хранения этой информации.

# mkdir -p 2775 /var/log/journal && chown :systemd-journal /var/log/journal
# systemctl restart systemd-journald

Чтобы просмотреть журналы предыдущей загрузки, используйте -bпараметр с journalctl. Без каких-либо аргументов -bбудет фильтровать вывод только для сообщений, относящихся к последней загрузке. Отрицательное число к этому аргументу будет фильтроваться в предыдущих загрузках. Например:

# journalctl -b-1 -p err

Это покажет вам журналы ошибок от загрузки, которая произошла до самой последней. Вы должны изменить числовое значение, чтобы отразить загрузку, которую вам нужно просмотреть.

Исправление ошибок диска и файловой системы

Одна из наиболее распространенных ошибок при загрузке - неправильно настроенный /etc/fstabфайл. Вы НЕ МОЖЕТЕ использовать, rescue.targetчтобы исправить /etc/fstabошибку. Большинство из этих проблем потребует от нас использования, emergency.targetпоскольку для «спасения» требуется более функциональная система.

Ниже приведены примеры проблем, которые требуют emergency.target:

  1. Поврежденная файловая система.
  2. Несуществующий UUID в /etc/fstab.
  3. Несуществующая точка монтирования в /etc/fstab.
  4. Неправильная опция монтирования в /etc/fstab.

Важное замечание : После редактирования /etc/fstabфайла в аварийном режиме вы должны выполнить следующие меры безопасности:

# systemctl daemon-reload

Вот пример прохождения. Мы собираемся загрузиться в аварийном режиме, чтобы удалить ложную запись в /etc/fstab.

  1. Прервите меню grub2, нажав «e» для редактирования при появлении запроса в меню grub.
  2. Найдите строку, которая указывает версию ядра ( vmlinuz ) и добавьте к ней следующее:systemd.unit=emergency.target
  3. Нажмите «Ctrl + x» для загрузки.
  4. Вам будет предложено ввести пароль root для продолжения.
  5. Перемонтировать, /чтобы мы могли внести изменения в fstabфайл:# mount -oremount,rw /
  6. Мы можем использовать mountкоманду, чтобы увидеть, какая запись вызывает ошибку:# mount -a
  7. Удалите оскорбительную запись из fstabфайла.
  8. Используйте mount -aс��ова, чтобы убедиться, что ошибка устранена.
  9. Используйте, systemctl daemon-reloadкак я упоминал ранее, для перезагрузки всех файлов модулей и воссоздания всего дерева зависимостей.

Как только вы выйдете из аварийной оболочки, система завершит загрузку с аварийной цели, после чего вы сможете продолжить как обычно с этой точки. Этот пример просто использовался, чтобы показать вам процесс использования аварийной цели для внесения постоянных изменений в файлы в системе.

Проблемы с загрузчиком в Grub 2

/boot/grub2/grub.cfgФайл основной конфигурационный файл. НЕ редактируйте этот файл вручную. Вместо этого используйте grub2-mkconfigдля создания новой конфигурации grub2, используя набор различных файлов конфигурации и список установленных ядер. Команда grub2-mkconfigбудет искать /etc/default/grubпараметры, такие как время ожидания меню по умолчанию и командную строку ядра, которые будут использоваться, а затем использовать набор сценариев /etc/grub.d/для создания результирующего файла конфигурации.

Вот текстовая диаграмма этих отношений.

/boot/grub2/grub.cfg
               |
               |__________________
               |                  |
         /etc/default/grub         /etc/grub.d/*

Важное замечание : Чтобы отредактировать основной файл grub.cfg, вам необходимо внести необходимые изменения /etc/default/grubв файлы и в них, /etc/grub.d/а затем создать новый grub.cfg, выполнив:

# grub2-mkconfig > /boot/grub2/grub.cfg

Устранение неполадок grub

Важно понять синтаксис /boot/grub2/grub.cfgфайла перед устранением неполадок.

  • Сначала загрузочные записи кодируются внутри блоков menuentry. В этих блоках linux16и initrd16строках указывается ядро ​​для загрузки с диска (вместе с командной строкой ядра) и initramfs для загрузки. Во время интерактивного редактирования при загрузке вкладка используется для поиска этих строк.
  • Строки «установить корень» внутри этих блоков не указывают на корневую файловую систему для системы RHEL / CentOS 7, а вместо этого указывают на файловую систему, из которой grub2 должен загружать файлы ядра и initramfs. Синтаксис harddrive.partitionгде hd0первый жесткий диск в системе и hd1второй. Разделы указаны как msdos1для первого раздела MBR или gpt1для первого раздела GPT.

Пример из /boot/grub2/grub.cfg:

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-a2531d12-46f8-4a0f-8a5c-b48d6ef71275' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  123455ae-46f8-4a0f-8a5c-b48d6ef71275
    else
      search --no-floppy --fs-uuid --set=root 123455ae-46f8-4a0f-8a5c-b48d6ef71275
    fi

Если вам нужно переустановить загрузчик на устройстве, используйте следующую команду.

# grub2-install <device>

Исправление сломанной установки грязи

Для случаев, когда система не загружается после входа в меню grub2.

  • Вы должны начать с редактирования меню grub и поиска синтаксических ошибок. Если вы найдете его, исправьте его и войдите в систему, чтобы внести постоянные изменения, чтобы решить проблему.
  • Если вы не можете найти никаких ошибок, обратитесь к разделу выше, где мы загружаемся в аварийную цель. Вам нужно будет перемонтировать root ( /) снова.
  • Просмотрите текущую конфигурацию grub2 с помощью следующей команды: # grub2-mkconfig
  • Если вы не видите никаких ошибок, вполне вероятно, что кто-то отредактировал /boot/grub2/grub.cfgфайл. Не изменяйте этот файл. Перестройте конфигурацию с помощью следующей команды:# grub2-mkconfig > /boot/grub2/grub.cfg

После того, как вы перестроили конфигурацию grub, вы сможете перезагрузиться без каких-либо проблем.

Оставить комментарий

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше