Soft reboot (мягкая перезагрузка) — перезагрузка сервера через операционную систему: ядро корректно завершает все процессы, сбрасывает дисковые буферы, размонтирует файловые системы и инициирует перезапуск через аппаратный ACPI. Выполняется командами reboot, shutdown -r now или systemctl reboot в Linux. Противопоставляется hard reboot — принудительному отключению питания.
Что происходит при soft reboot
- Системный вызов reboot(2) — ядро получает сигнал на перезагрузку.
- systemd запускает shutdown target — отправляет SIGTERM всем работающим сервисам.
- Ожидание завершения — systemd ждёт штатного завершения каждого сервиса (по умолчанию DefaultTimeoutStopSec=90s). Сервисы сохраняют данные и закрывают соединения.
- SIGKILL для зависших процессов — процессы, не завершившиеся за timeout, принудительно уничтожаются.
- sync() — принудительный сброс буферов страничного кэша на диск.
- Размонтирование ФС — все смонтированные файловые системы корректно размонтируются.
- ACPI reboot — ядро инициирует аппаратную перезагрузку через ACPI или через порт 0xCF9.
Soft reboot vs Hard reboot
| Параметр | Soft Reboot | Hard Reboot |
|---|---|---|
| Метод | Команда ОС (reboot, systemctl reboot) | Аппаратный сброс питания (IPMI/панель) |
| Корректное завершение | Да (SIGTERM → SIGKILL → sync) | Нет (мгновенное отключение) |
| Риск повреждения ФС | Минимальный (данные сброшены) | Высокий (незафиксированные буферы) |
| Применяется при | Плановое обновление ядра, конфига | ОС зависла, kernel panic, SSH недоступен |
| Время простоя | 60–180 с (зависит от сервисов) | 30–90 с (только POST + загрузка ОС) |
История
Концепция «мягкого» и «жёсткого» сброса возникла с появлением многопользовательских ОС в 1970-х: несинхронизированные данные при отключении питания ведут к повреждению файловых систем. В ранних UNIX-системах команда sync выполнялась вручную перед выключением. Команда shutdown(8) (UNIX V7, 1979) стандартизировала корректное завершение. systemd унифицировал управление перезагрузкой через target units с 2010 года.
Особые сценарии перезагрузки в Linux
kexec — загрузка нового ядра без полного сброса BIOS/UEFI. Время перезагрузки сокращается с 60–120 с до 5–15 с. Используется в облачной инфраструктуре для минимизации downtime при обновлении ядра. Команда: kexec -l /boot/vmlinuz-new --initrd=/boot/initrd-new --reuse-cmdline, затем systemctl kexec.
Warm reboot — перезагрузка без потери содержимого RAM (экспериментально в Linux 6.9+). Данные виртуальных машин и контейнеров переживают перезагрузку.
Soft reboot на VPS и выделенных серверах
На VPS и выделенных серверах soft reboot инициируется из панели управления (Hetzner Robot, ISPmanager, Plesk) или через SSH. Hard reboot доступен через IPMI/BMC-консоль для физических серверов или через кнопку «Reset» в панели VPS-провайдера. После hard reboot обязательно проверить файловую систему: journalctl -b | grep -i 'fsck\|error\|warning'. XFS журнализирует метаданные и обычно восстанавливается автоматически при следующей монтировании; EXT4 с journal=writeback требует fsck при незакрытых транзакциях.
Практика: сокращение downtime при перезагрузке
На production-серверах с Nginx и PHP-FPM можно сократить downtime до нуля через rolling restart: если за балансировщиком несколько backend-серверов, перезагрузка выполняется поочерёдно. Один сервер выводится из rotation (HAProxy: set server web/web01 state maint), перезагружается, возвращается в rotation — трафик на него не поступает во время reboot. Для одиночного сервера soft reboot с kexec минимизирует простой с 2–3 минут до 15–30 секунд.