Реанимация серверов Ubuntu на Hetzner или немного полезных команд
Этот небольшой пост-шпаргалка предназначен для тех у кого внезапно в ходе неудачного эксперимента или обновления перестал пинговаться сервер, отвалился ssh и прочее. Проще говоря он о восстановлении сервера после обновлений, взломов и тому подобного. По моим ощущениям последнее бывает гораздо реже.
Упоминания heczner носят исключительно мимолетный характер, в силу того, что часто приходится пользоваться его услугами.
Resсue, монтирование разделов, chrootИтак, начнем с того, что никакого доступа к системе у нас нет, после, к примеру, очередной перезагрузки. Поэтому у нас остается два варианта — переустановить систему или восстановить её. В случае с VPS хецнер просто накатит новую систему и, естественно, что на диске ничего не останется. Поэтому мы, безусловно, выбираем восстановление.Кому интересно, для переустановки из rescue используется команда: installimage
После этого heczner покажет сгенерированный пароль. Перегружаем из админки сервер и коннектимся, лучше через IP адресс по ssh, ssh root@55.22.33.44Логин, естественно, root.
После залогинивания нас встречает приглашение такого рода root@rescue chroot цвет поменяется на синий root@rescue
Первое, что мы делаем — смотрим название наших дисков:
ls /dev/[hsv]d[a-z]*[0–9]* # самый распространенный пример вывода: /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 Затем монтируем диск с нашей системой:
mount /dev/sda3 /mnt Разделы /boot и прочие пока не трогаем. После того как подмонтировали, нам надо сделать видимым содержимое /dev /sys /proc иначе, если мы остались без ядра, то оно не поставится. mount --bind /dev /mnt/dev/; mount --bind /proc /mnt/proc/; mount --bind /sys /mnt/sys/ в debian есть удобная команда, заменяющая эту строчку, в ubuntu она обнаружена не была. chroot-prepare /mnt После этого: chroot /mnt; Теперь можно домонтировать все остальное: /boot mount -a На этом этапе мы имеем, в принципе, более менее подконтрольную нам недавно упавшую систему.Диагностика Чаще все приходится сталкиваться с проблемами обновления или установки. Тут, конечно, детализировать что-то сложно — можно только посоветовать, если обновляется дистрибутив, делать это через screenНапример: screen -S upgrade apt-get update apt-get dist-upgrade do-release-upgrade Причина одной из самых распространенных проблем — банальная нехватка места на диске df -h Иногда бывает, что место есть, а нодов свободных нет. Тогда это тоже приведет к сбою обновления и дальнейшим проблемам. df -i Безопасность Если есть подозрение, что нас взломали или ломают, то первым делом нужно глянуть кто сейчас на сервере: who Посмотреть кто какие команды вводил: last Глянуть на историю history Конечно, это все полумеры, но тем не менее.Далее нужно: Проверить /root/.ssh чтобы там не было левых сертификатов. Посмотреть в /etc/passwd чтобы кроме root ни у кого не было полномочий. nmap чтобы не было подозрительных открытых портов, а если есть, то убеждаемся, что никто подозрительный их не слушает. Меняем на всякий случай пароль root c помощью passwd. Польза от изучения логов в /var/log бывает неоценима . Проверяем систему на руткиты Обновление и установка:
apt-get install rkhunter rkhunter --update Поиск руткитов: rkhunter -c -sk Warnin-гов он, скорее всего, найдет много, особенно в /bin и /usr/binЕще есть альтернативный вариант: Установка chkrootkit: apt-get install chkrootkit Поиск руткитов: chkrootkit Восстановление Рассмотрим худший вариант, когда в папке /boot вообще пусто и в системе grub не стоит, ядра нет и большая часть пакетов битая.Чистим архив пакетов
Восстановление системы apt-get clean Удаляем не удалённые зависимости от уже удалённых пакетов apt-get autoremove Ставим grub2:
apt-get install grub2 Записываем grub в MBR grub-install /dev/sda Устанавливаем или переустанавливаем нормальное ядро. apt-get install linux-image-x.x.x-xx-generic --reinstall Обновляем меню grub update-grub Выполняем команды, предназначенные для разрешения конфликтов зависимостей:
apt-get install -f
dpkg --configure -a Переустанавливаем все пакеты:
apt-get install --reinstall `dpkg --get-selections | grep -v deinstall | awk '{print $1}'` Если известно в чем была проблема, то достаточно переустановить нужный пакет:
apt-get install {имя_пакета} --reinstall В конце можно еще раз выполнить:
apt-get install -f dpkg --configure -a Заключение Предварительно выйдя из chroot c помощью Ctrl+D или exit делаем: reboot Смотрим, что вышло. Если проблема осталась, то все по новой и смотрим, что мы упустили, как можно больше внимания уделяя /var/log.
Все предложенные рецепты не являются панацеей. Возможно, кто-то по другому решал подобные проблемы, но мне эти рецепты часто помогали.
Полезные ссылки:
wiki Hetzner Rescue Systemubuntu wiki восстановления grubscreen