Centos зависает при перезагрузке

Обновлено: 03.07.2024

Понимание процедуры загрузки в Linux RHEL7/CentOS

Следующие шаги суммируют, как процедура загрузки происходит в Linux.

1. Выполнение POST: машина включена. Из системного ПО, которым может быть UEFI или классический BIOS, выполняется самотестирование при включении питания (POST) и аппаратное обеспечение, необходимое для запуска инициализации системы.

2. Выбор загрузочного устройства: В загрузочной прошивке UEFI или в основной загрузочной записи находится загрузочное устройство.

3. Загрузка загрузчика: с загрузочного устройства находится загрузчик. На Red Hat/CentOS это обычно GRUB 2.

4. Загрузка ядра: Загрузчик может представить пользователю меню загрузки или может быть настроен на автоматический запуск Linux по умолчанию. Для загрузки Linux ядро загружается вместе с initramfs . Initramfs содержит модули ядра для всего оборудования, которое требуется для загрузки, а также начальные сценарии, необходимые для перехода к следующему этапу загрузки. На RHEL 7/CentOS initramfs содержит полную операционную систему (которая может использоваться для устранения неполадок).

5. Запуск /sbin/init: Как только ядро загружено в память, загружается первый из всех процессов, но все еще из initramfs . Это процесс /sbin/init , который связан с systemd . Демон udev также загружается для дальнейшей инициализации оборудования. Все это все еще происходит из образа initramfs .

6. Обработка initrd.target: процесс systemd выполняет все юниты из initrd.target , который подготавливает минимальную операционную среду, в которой корневая файловая система на диске монтируется в каталог /sysroot . На данный момент загружено достаточно, чтобы перейти к установке системы, которая была записана на жесткий диск.

7. Переключение на корневую файловую систему: система переключается на корневую файловую систему, которая находится на диске, и в этот момент может также загрузить процесс systemd с диска.

8. Запуск цели по умолчанию (default target): Systemd ищет цель по умолчанию для выполнения и запускает все свои юниты. В этом процессе отображается экран входа в систему, и пользователь может проходить аутентификацию. Обратите внимание, что приглашение к входу в систему может быть запрошено до успешной загрузки всех файлов модуля systemd . Таким образом, просмотр приглашения на вход в систему не обязательно означает, что сервер еще полностью функционирует.
На каждом из перечисленных этапов могут возникнуть проблемы из-за неправильной настройки или других проблем. Таблица суммирует, где настроена определенная фаза и что вы можете сделать, чтобы устранить неполадки, если что-то пойдет не так.

Передача аргементов в GRUB 2 ядру во время загрузки

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

Когда сервер загружается, вы кратко видите меню GRUB 2. Смотри быстро, потому что это будет длиться всего несколько секунд. В этом загрузочном меню вы можете ввести e, чтобы войти в режим, в котором вы можете редактировать команды, или c, чтобы ввести полную командную строку GRUB.


После передачи e в загрузочное меню GRUB вы увидите интерфейс, показанный на скриншоте ниже. В этом интерфейсе прокрутите вниз, чтобы найти раздел, начинающийся с linux16 /vmlinuz , за которым следует множество аргументов. Это строка, которая сообщает GRUB, как запустить ядро, и по умолчанию это выглядит так:



После ввода параметров загрузки, которые вы хотите использовать, нажмите Ctrl + X, чтобы запустить ядро с этими параметрами. Обратите внимание, что эти параметры используются только один раз и не являются постоянными. Чтобы сделать их постоянными, вы должны изменить содержимое файла конфигурации /etc/default/grub и использовать grub2-mkconfig -o /boot/grub2/grub.cfg , чтобы применить изменение.

Когда у вас возникли проблемы, у вас есть несколько вариантов (целей), которые вы можете ввести в приглашении загрузки GRUB:

■ rd.break Это останавливает процедуру загрузки, пока она еще находится в стадии initramfs .
Эта опция полезна, если у вас нет пароля root.

■ init=/bin/sh или init=/bin/bash Указывает, что оболочка должна быть запущена сразу после загрузки ядра и initrd . Это полезный вариант, но не лучший, потому что в некоторых случаях вы потеряете консольный доступ или пропустите другие функции.

■ systemd.unit=rescue.target Команда запускает еще несколько системных юнитов, чтобы привести вас в более полный рабочий режим. Требуется пароль root.
Чтобы увидеть, что загружено только очень ограниченное количество юнит-файлов, вы можете ввести команду systemctl list-units .

Запуск целей(targets) устранения неполадок в Linux

1. (Пере)загружаем Linux. Когда отобразиться меню GRUB, нажимаем e ;

2. Находим строку, которая начинается на linux16 /vmlinuz. В конце строки вводим systemd.unit=rescue.target и удаляем rhgb quit ;

3. Жмем Ctrl+X, чтобы начать загрузку с этими параметрами. Вводим пароль от root;

4. Вводим systemctl list-units и смотрим. Будут показаны все юнит-файлы, которые загружены в данный момент и соответственно загружена базовая системная среда;

5. Вводим systemctl show-environment . Видим переменные окружения в режиме rescue.target;

6. Перезагружаемся reboot ;

7. Когда отобразится меню GRUB, нажимаем e . Находим строку, которая начинается на linux16 /vmlinuz. В конце строки вводим systemd.unit=emergency.target и удаляем rhgb quit ;

8. Снова вводим пароль от root;

9. Система загрузилась в режиме emergency.target;

10. Вводим systemctl list-units и видим, что загрузился самый минимум из юнит-файлов.

Устранение неполадок с помощью загрузочного диска Linux

Еще один способ восстановления работоспособности Linux использовать образ операционки.

Если вам повезет меньше, вы увидите мигающий курсор в системе, которая вообще не загружается. Если это произойдет, вам нужен аварийный диск. Образ восстановления по умолчанию для Linux находится на установочном диске. При загрузке с установочного диска вы увидите пункт меню "Troubleshooting". Выберите этот пункт, чтобы получить доступ к параметрам, необходимым для ремонта машины.

  • Install CentOS 7 in Basic Graphics Mode: эта опция переустанавливает систему. Не используйте её, если не хотите устранить неполадки в ситуации, когда обычная установка не работает и вам необходим базовый графический режим. Как правило, вам никогда не нужно использовать эту опцию для устранения неисправностей при установке.
  • Rescue a CentOS System: это самая гибкая система спасения. Это должен быть первый вариант выбора при использовании аварийного диска.
  • Run a Memory Test: если вы столкнулись с ошибками памяти, это позволяет пометить плохие микросхемы памяти, чтобы ваша машина могла нормально загружаться.
  • Boot from local drive: здесь я думаю всё понятно.

Пример использования "Rescue a CentOS System"

1. Перезагружаем сервер с установочным диском Centos 7. Загружаемся и выбираем "Troubleshooting".

2. В меню траблшутинга выбираем "Rescue a CentOS System" и загружаемся.


3. Система восстановления теперь предлагает вам найти установленную систему Linux и смонтировать ее в /mnt/sysimage . Выберите номер 1, чтобы продолжить:
4. Если была найдена правильная установка CentOS, вам будет предложено, чтобы система была смонтирована в /mnt/sysimage . В этот момент вы можете дважды нажать Enter, чтобы получить доступ к оболочке восстановления.



5. Ваша система Linux на данный момент доступна через каталог /mnt/sysimage . Введите chroot /mnt/sysimage . На этом этапе у вас есть доступ к корневой файловой системе, и вы можете получить доступ ко всем инструментам, которые необходимы для восстановления доступа к вашей системе.

Переустановка GRUB с помощью аварийного диска

Одна из распространенных причин, по которой вам нужно запустить аварийный диск, заключается в том, что загрузчик GRUB 2 не работает. Если это произойдет, вам может понадобиться установить его снова. После того, как вы восстановили доступ к своему серверу с помощью аварийного диска, переустановить GRUB 2 несложно, и он состоит из двух этапов:

  1. Убедитесь, что вы поместили содержимое каталога /mnt/sysimage в текущую рабочую среду.
  2. Используйте команду grub2-install , а затем имя устройства, на котором вы хотите переустановить GRUB 2. Если это виртуальная машина KVM используйте команду grub2-install /dev/vda и на физическом сервере или виртуальная машина VMware, HyperV или Virtual Box, это grub2-install /dev/sda .

Повторное создание Initramfs с помощью аварийного диска

Иногда initramfs также может быть поврежден. Если это произойдет, вы не сможете загрузить свой сервер в нормальном рабочем режиме. Чтобы восстановить образ initramfs после загрузки в среду восстановления, вы можете использовать команду dracut . Если используется без аргументов, эта команда создает новый initramfs для загруженного в данный момент ядра.
Кроме того, вы можете использовать команду dracut с несколькими опциями для создания initramfs для конкретных сред ядра. Существует также файл конфигурации с именем /etc/dracut.conf , который можно использовать для включения определенных параметров при повторном создании initramfs .

  • /usr/lib/dracut/dracut.conf.d/*.conf содержит системные файлы конфигурации по умолчанию.
  • /etc/dracut.conf.d содержит пользовательские файлы конфигурации dracut.
  • /etc/dracut.conf используется в качестве основного файла конфигурации.

Исправление общих проблем

В пределах статьи, подобной этой, невозможно рассмотреть все возможные проблемы, с которыми можно столкнуться при работе с Linux. Однако есть некоторые проблемы, которые встречаются чаще, чем другие. Ниже некоторые наиболее распространенные проблемы.

Переустановка GRUB 2

Код загрузчика не исчезает просто так, но иногда может случиться, что загрузочный код GRUB 2 будет поврежден. В этом случае вам лучше знать, как переустановить GRUB 2. Точный подход зависит от того, находится ли ваш сервер в загрузочном состоянии. Если это так, то довольно просто переустановить GRUB 2. Просто введите grub2-install и имя устройства, на которое вы хотите его установить. У команды есть много различных опций для точной настройки того, что именно будет установлено, но вам, вероятно, они не понадобятся, потому что по умолчанию команда устанавливает все необходимое, чтобы ваша система снова загрузилась. Становится немного сложнее, если ваш сервер не загружается.

Если это произойдет, вам сначала нужно запустить систему восстановления и восстановить доступ к вашему серверу из системы восстановления. После монтирования файловых систем вашего сервера в /mnt/sysimage и использования chroot /mnt/sysimage , чтобы сделать смонтированный образ системы вашим корневым образом: Просто запустите grub2-install , чтобы установить GRUB 2 на желаемое установочное устройство. Но если вы находитесь на виртуальной машине KVM, запустите grub2-install /dev/vda , а если вы находитесь на физическом диске, запустите grub2-install /dev/sda .

Исправление Initramfs

В редких случаях может случиться так, что initramfs будет поврежден. Если вы тщательно проанализируете процедуру загрузки, вы узнаете, что у вас есть проблема с initramfs , потому что вы никогда не увидите, как корневая файловая система монтируется в корневой каталог, и при этом вы не увидите запуска каких-либо системных модулей. Если вы подозреваете, что у вас есть проблема с initramfs , ее легко создать заново. Чтобы воссоздать его, используя все настройки по умолчанию (что в большинстве случаев нормально), вы можете просто запустить команду dracut --force . (Без --force команда откажется перезаписать ваши существующие initramfs .)
При запуске команды dracut вы можете использовать файл конфигурации /etc/dracut.conf , чтобы указать, что именно записывается в initramfs . В этом файле конфигурации вы можете увидеть такие параметры, как lvmconf = «no» , которые можно использовать для включения или выключения определенных функций. Используйте эти параметры, чтобы убедиться, что у вас есть все необходимые функции в initramfs .

Восстановление после проблем с файловой системой

enter image description here

Есть ли у кого-нибудь такая же проблема и есть ли решение?

SELinux определяет права доступа и перехода для каждого пользователя, приложения, процесса, и файл в системе.

fstab - это место, откуда система монтирует файловую систему. Итак, войдите в режим обслуживания и проверьте свою информацию fstab, есть проблема.

Отключение SELinux вряд ли вызвало это, хотя возможно, что это могло быть вызвано ошибкой в ​​вашем fstab.

Я бы предоставил пароль root и зашел в систему. Затем проверьте fstab и предпримите соответствующие действия для исправления или возврата.

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

Вам явно не хватает раздела / boot из того, что я видел в вашем комментарии, что всегда необходимо при использовании LVM.

Ваша MBR по-прежнему должна указывать на нужное место, поэтому grub должен отображаться как как только ваш fstab будет исправлен, нет необходимости его перенастраивать.

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

Введите пароль root для входа в однопользовательский режим. Затем сделайте так, чтобы смонтированная корневая файловая система находилась в режиме чтения / записи.

Из вашей таблицы fstab я вижу, что у вас только один корневой раздел (/) и нет отдельного раздела / boot. Убедитесь, что ваш UUID соответствует тому, что у вас есть в / dev. В однопользовательском режиме вы можете смонтировать файловую систему вручную, чтобы увидеть, появляется ли ошибка.

Вы также можете прервать процесс автоматической загрузки и удалить любые параметры, такие как «splash», «rhgb» или «quiet», чтобы заставить систему предоставьте дополнительную информацию в процессе загрузки. Вы получите дополнительную информацию об отладке и советы по решению проблемы.

Почему тормозит CentOS 7 или CloudLinux 7

Видно как CentOS 7 или CloudLinux 7 тормозит

Такие данные можно увидеть с помощью программы iotop.

Ничего не менялось при использовать PHP как suPHP или FastCGI , и даже c модулем mod_lsapi.

Долгое исследование проблемы и обращение в поддержку CloudLinux открыли завесу тайны.

Что делать если тормозит CentOS 7 или CloudLinux 7?

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

Если вы наберете

Вы вдруг обнаружите откуда идут тормоза на CloudLinux или Centos. а ларчик открывается просто.

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

  • powersave — энергосберегающий ( вообще всё тормозит , всегда. Часто та постоянно внизу.)
  • ondemand — меняет частоту по требованию ( причем тормозит с IO wait хотя по идеи должен поднимать когда идет нагрузка)
  • performance — максимальная частота всегда.
  • и другие , которые нам не интересны.

О других режимах можно почитать тут.

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

В CentOS 7 и Cloudlinux 7 есть отличная утилита , которая решает эту проблему. И задаёт постоянно максимальный режим.

Эта демон Tuned. По умолчанию он работает в режиме powersave или ondemand. Что для сайтов или хостинга грозит постоянным тормозами или медленной работой сайтов , вплоть до подвисания Apache сервера. Почему так сделано? Мне вообще это не понятно. Подробно о его проблемах можно почитать тут.

Поэтому мы смело устанавливаем максимальный режим.

После чего получаем на нашем сервере максимальную производительность и никаких тормозов.

Есть еще один узкий момент. Это драйвер intel_pstate. По словам поддержи CloudLinux он так же создаёт проблемы , поэтому если вы видите его вот так:

То можно смело его отключать.

Немного информации об этом драйвере можно почерпнуть информацию на этой странице.

Редактируем фаил /etc/default/grub

и добавляем в строку GRUB_CMDLINE_LINUX=" тут что то"

Например: GRUB_CMDLINE_LINUX word-spacing:nowrap;">что-то intel_pstate=disable rhgb quiet"

Пересоздаём новый grub

Всё. Надеюсь теперь ваша жизнь станет веселее , а клиенты не будут страдать от диких тормозов сайтов.

P. S. Если у вас Ubuntu или Linux Mint и тому подобное , то тоже можно ускорить , и избавиться от тормозов О. С. Особенно это актуально если у вас домашней комп на этой системе. Надо установить tuned-adm и использовать его. Вся информация на этой странице.

Для тех кого мало памяти на сервер , и он всё равно , иногда , наблюдаете такую проблему.

Если у вас мало памяти на сервере с Centos или CloudLinux , vps или vds , то cache с буферором будут сжирать у вас память. По идеи при нуждах программ они должны скидывать на диск и высвобождать часть. Но как показывает опыт , этот бред ядра Centos ни черта нормально не работает и похоже просто тупо не успевает сбрасывать лишний кэш. Часто может дойти даже до зависания.

Поэтому что бы высвободить память мы делаем такую вещь.

В файле /etc/sysctl.conf вносим:

После синхронизируем данные кэша и диска , очистим кэш и сохраним параметры:

После чего мы вносим в крон

Подробно про чистку кэша и почему это приходится делать описано тут. Так же обратите внимание , что такая чистка не рекомендуется , так как из-за некоторых проблем вы рискуете создать проблемы с потерями каких либо данных. Подробно описано в источнике. Однако на слабых машинах я пока не вижу другого выхода. Если вы его знаете , напишите в комментариях.

На этом всё. Удачи с вашим сервером!

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

Читайте также: