- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF144:PXELinux
Материал из Linuxformat.
- Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей
Содержание |
Авария: Чиним поломку
- Хорошо спланированная система восстановления превращает мертвый кирпич в исправную машину. Джон Ламби делится наработанными решениями.
Сутками ныряя на дно океана, команда ученых из LXF сумела проанализировать наноследы от аудиоволн в пыли на капитанском мостике «Титаника», и узнать последние слова капитана Смита перед тем, как его судно затонуло – вот они: «Да, жаль, что я не прочел эту статью про системы спасения».
На этом уроке мы расскажем, как выбрать систему спасения, получить или собрать и испытать ее. Также мы дадим ссылки на более продвинутые системы, для любителей ремней, лонжей и строп безопасности.
Спасательная система – это система Linux, способная запуститься на вашей машине, не трогая жесткий диск (диски), и содержащая утилиты для восстановления данных. Она должна уметь исправлять ситуации, когда «рабочая» система либо вовсе не загружается, либо загрузка не является безопасной. Вот несколько примеров, с соответствующими вариантами исправлений:
- Сбой или сильное повреждение диска Восстановление из резервной копии.
- Поврежденная структура разделов или первичный диск — например, MBR диска повреждена. Использовать TestDisk (расположен на http://www.cgsecurity.org/index.html?testdisk.html).
- Поврежденная корневая файловая система Применить e2fsck.
- Система не загружается или нельзя выполнить вход после какого-либо обслуживания системного ПО Произвести отмену обслуживания – здесь поможет chroot.
Резервное копирование и восстановление – самые фундаментальные средства спасения, и они послужат последним прибежищем во всех перечисленных сценариях. Допустим, испарилась корневая файловая система. Это может случиться с каждым. У вас, конечно, есть резервная копия. Нет?! Тогда обратитесь к прошлым номерам (Сравнение, LXF138 и Файлов больше не теряем, LXF142) за полезными советами.
Простейший пример системы спасения – live CD или DVD. Читатели Linux Format получают таковой в каждом номере. Однако live CD предназначен для установки, а не для восстановления, то есть многих необходимых утилит на нем просто нет. Более того, установка одной из этих утилит в систему спасения – дело непростое. Работающий CD защищен от записи, что вызывает ограничения, и многие live CD распаковывают корневую файловую систему динамически, сильно замедляя работу. Другая система Linux, основанная на CD и предназначенная исключительно для спасения – это SystemRescueCd, который прописался на LXFDVD, начиная с номера 142.
Мы рассмотрим две других разновидности специальных систем спасения; одну из них вы соберете и сможете использовать.
Спасение с флэшки
Сейчас мы соберем систему спасения на USB-брелке (см. Брелок или диск?). Понадобится только 120 МБ свободного места для установки компактной системы спасения, или чуть больше, если вам захочется добавить утилиты. Если у вас нет брелка достаточной вместимости, вы все-таки сможете проделать часть задания на live CD.
Мы воспользуемся дистрибутивом Slitaz, поскольку он – один из самых компактных, но полнофункциональных систем Linux и является любимым дистрибутивом Linux Format (см. Сравнение, LXF130). Он не идеален для всех и вся, но это хорошее введение в запуск Linux с брелка. Все упражнение уложится в 15–30 минут.
Slitaz 3.0 имеется на LXFDVD этого номера, то есть для нашего урока у вас есть все. Также можно скачать ISO-образ для live CD с http://www.slitaz.org/en/get. Если у вас ISO-образ, а не реальный CD, то либо запишите его на CD, либо запустите его с виртуальной машины, определив образ как CD-привод виртуальной машины. (Как это сделать, см. учебник Виртуализация: Миграция в LXF138.)
Итак, Slitaz загрузился на реальной или виртуальной машине. Запустите терминал Xterm, введите su для режима root. Пароль – ‘root’. Воткните USB-брелок и убедитесь, что он виден и на нем есть разделы. Чтобы увидеть все устройства USB, введите команду:
less /proc/bus/usb/devices
Чтобы проверить, является ли оно устройством SCSI – команду
dmesg | grep “sd[a-z]”
И, наконец, для просмотра разделов на устройстве – команду
fdisk -l
Перед запуском установщика Slitaz проверьте, есть ли Linux-раздел подходящего размера (Fdisk hex 83). Если нет, создайте его спомощью Fdisk. Укажите установщику, какой раздел брать и форматировать ли файловую систему или использовать имеющуюся.
Для установки на жесткий диск пользуйтесь инструкциями руководства к Slitaz на http://doc.slitaz.org/en:handbook:installation. Slitaz также допускает установку на LiveUSB Media на USB-брелке. Устанавливай вы большой дистрибутив на маленькое устройство, вы, видимо, взяли бы именно такой формат, но мы так не делали.
Примонтируйте live CD Slitaz на /media/cdrom. Если вы используете LXF132 DVD, то сначала примонтируйте DVD, и только потом – образ Slitaz, лежащий на этом DVD:
Запуская Slitaz на виртуальной машине VirtualBox, выключите EHCI-HCD – виртуальный контроллер высокоскоростного USB, чтобы использовался виртуальный контроллер UHCI-HCD. UHCI-HCD – контроллер по умолчанию для Qemu и virtmgr. Если вы пользуетесь ими, укажите для сетевого интерфейса model=e1000, поскольку именно это поддерживает ядро Slitaz по умолчанию.
mkdir /media/lxfcd mount /dev/cdrom /media/lxfcd mount -o ro,loop -t iso9660 /media/lxfcd/Distros/Slitaz/slitaz-3.0.iso /media/cdrom
Сейчас мы готовы к переносу файлов с live CD Slitaz на USB-брелок. Вам предлагается на выбор Slitaz Installer [Установщик] или Manual Installation [Установить вручную]. Установщик всегда будет либо очищать, либо форматировать раздел, и если на нем есть данные, которые вы хотите сохранить, пользуйтесь ручным методом. Другие разделы установщик трогать не станет.
Заметьте еще одно отличие: установщик меняет стартовые службы в '/etc/rcS.conf – например, модули ядра; а ручная установка – нет, но можно отредактировать этот файл вручную.
Файлы должны скопироваться на устройство USB. Выполните шаг в конце страницы: задайте параметр rootdelay в строке ядра Grub. Теперь отключите live CD и загрузитесь с USB-брелка.
Cкажем, мы хотим проверить целостность раздела жесткого диска (настоящего жесткого диска, не USB-брелка). Чтобы иден-тифицировать все жесткие диски, выполните:
fdisk -l
В списке должен отобразиться и ваш диск. Предположим, что это /dev/hda, а корневая файловая система /dev/hda3:
e2fsck -v /dev/hda3
Slitaz содержит добротный набор базовых утилит, включая web-браузер и просмотрщик PDF (можете читать статьи LXF онлайн!) Также там имеется Netcat, позволяющий пересылать данные любого типа между двумя соединенными машинами, если у вас есть доступ к командной строке обеих. Есть SSH и SCP, но это урезанные версии, отличные от тех, к которым вы привыкли. Перед их использованием прочтите это: http://www.yorkspace.com/2009/04/135. Таким образом экономят место большинство небольших дистрибутивов. Оболочка выглядит как Bash, но на самом деле это Ash, и так далее. Иногда что-то будет работать не так, как вы ожидали, так что сверяйтесь со справкой!
Брелок или диск?
На сегодняшний день популярным альтернативным оборудованием для систем спасения является флэш-привод USB, он же USB-брелок. Для хостовой системы это съемный жесткий диск. У них широкий диапазон скорости, емкости и цены. Но, в общем, они могут содержать больше данных и передавать их быстрее, чем CD или DVD, и, что более важно, допускают операции и чтения, и записи. Однако рано или поздно такие носители изнашиваются.
Любой компьютер моложе восьми лет загрузится с любого USB-устройства при правильных установках BIOS. При входе в настройку BIOS проверьте, что разрешена загрузка с USB-устройства. Возможно, оно называется USB-BIOS. Затем поглядите на список устройств загрузки и убедитесь, что USB-брелок стоит в самом верху. Там может быть иерархия списков; в этом случае низкоуровневые списки можно найти в разделе настройки BIOS, а список верхнего уровня или Boot List – где-нибудь в другом месте. Ваш BIOS может классифицировать брелок как съемный носитель, как жесткий диск или как что-нибудь еще. Ищите и обрящете!
Утилиты Slitaz
Так что насчет средств спасения? После установки Slitaz содержит tar и gzip и немногим более того. Однако там имеется установщик RPM-пакетов и прекрасный репозиторий на http://mirror.slitaz.org/packages/3.0, где более 2300 пакетов.
Запуская менеджер пакетов Slitaz из System Tools в первый раз, соединитесь с Интернетом, а затем перейдите на вкладку Search. В этой панели нажмите на Recharge Lists; произойдет запрос репозитория. Теперь вернитесь на главную вкладку Packages – там отобразится список доступных пакетов. Для установки, дважды щелкните по любому, который еще не установлен. Естественно, сначала вы выберете Emacs, а потом Bzip2.
В репозитории Slitaz содержатся два пакета для резервирования/восстановления:
- rsync' Популярная программа, используемая многими, обычно с отдельным GUI.
- Box Backup' Солидного вида система онлайн-резервирования.
Если резервирование и восстановление протестированы и работают, затраченное на это время переведено не зря, но какие утилиты нам могут понадобиться, и сколько места на диске? А это зависит от вашей конкретной установки и отводимых времени и денег. Однако при непредвиденной ситуации возможность установки дополнительных утилит на систему спасения будет преимуществом. Желательно, чтобы ваша система спасения была как можно проще: ее не придется использовать часто, но уж если придется, вы должны сразу вспомнить, как ее применить.
Если вы пойдете дальше с системой спасения на USB-брелке и заметно расширите ее, не забудьте сделать и ее резервную копию.
Спасение через LAN
Рассмотренные системы спасения ограничены по возможностям и простоте использования, а для некоторых – временем и деньгами, нужными для их создания и поддержки.
Сейчас мы взмахнем волшебной палочкой и покажем вам систему спасения, которой не нужны компромиссы и которая дает вам (почти) неограниченные возможности – и эта система у вас уже есть! Такой системой спасения является полный дистрибутив Linux, расположенный на отдельной машине, которая соединена с проблемной по локальной сети. Вот что сюда входит:
- Компьютеры
- Проблемная Машина, которую спасают
- Спасатель Машина, обеспечивающая службы, связанные со спасением
- Системы Linux (ядро и файловые системы)
- Пассивная Проблемная система Linux, которую нужно спасти. Пассивная из-за того, что ее корневая файловая система не запущена, хотя на проблемной машине запущена копия ядра.
- Сервер Система Linux, которая предоставляет службы сети и загрузки по сети.
- Активная Система Linux, корневая файловая система которой активно работает на проблемной машине.
На проблемной машине ядро пассивного Linux работает в сочетании с файловой системой активного. В таком раскладе мы различаем ядро и корневую файловую систему, и для спасения сочетаем их из разных источников. Почему? Потому, что ядро пассивной системы должно быть специально настроено – чтобы оно могло примонтировать свою корневую файловую систему по сети и, следовательно, привязаться к аппаратным свойствам проблемной машины, в частности, к ее сетевому адаптеру.
На машине-спасателе сидят две системы Linux. Они могут быть и на разных дисках, и на одном, но обе должны быть полными, а их корневые файловые системы должны располагаться на разных разделах жесткого диска. Система-сервер работает на машине-спасателе и обеспечивает несколько служб для проблемной машины. Сюда входят DHCP-сервер для распределения IP-адресов и распознавания загрузчика PXE; сервер TFTP для загрузки Pxelinux и копии пассивного ядра; и сервер NFS для активной корневой файловой системы.
Проблемная машина
При настройке ядра установите параметры в порядке их перечисления. Некоторые зависят от других установок и даже не предлагаются на выбор, пока не задано условие – например, CONFIG_ROOT_NFS зависит от CONFIG_IP_PNP.
Проблемная машина должна иметь по крайней мере один контроллер сетевого интерфейса (NIC) с возможностью загрузки PXE – то есть NIC должен уметь получить DHCP-адрес, а после этого скачать загрузчик с DHCP-сервера. Если вы не уверены, способен ли на это ваш контроллер, войдите при следующей загрузке в настройку BIOS и проверьте список выбора загрузок. NIC, допускающий загрузку по PXE, может иметь непонятное название. Для проверки выберите устройство, перезагрузитесь и поищите анимацию в виде вращающейся диагональной линии. Если на компьютере не оказалось ни одного устройства под PXE, существуют программные (пост-BIOS) альтернативы, типа gPXE (http://etherboot.org), но они требуют больше времени на настройку и лишнего шага для загрузки этой программы с дискеты или с брелка.
Пассивное ядро требует, чтобы в нем были встроены все компоненты для настройки сетевого интерфейса и монтирования корневой файловой системы по NFS. Сюда входят драйвер сетевого интерфейса, клиент NFS, настройка ядра и файловой системы. Следующие параметры из .config ядра должны быть установлены в Y: CONFIG_IP_PNP, CONFIG_IP_PNP_DHCP, драйвер ethernet для PXE NIC (обратите внимание – указывать как встроенный (Y) надо только один драйвер Ethernet, чтобы задать нужный при загрузке по PXE). Также установите равными Y CONFIG_EXT3_FS или CONFIG_EXT4_FS (в зависимости от типа активной корневой файловой системы) и CONFIG_NFS_FS с CONFIG_ROOT_NFS.
После генерации этого ядра скопируйте его в каталог /tptpboot активной системы; именно там его будет искать Pxelinux (см. раздел Процедура загрузки по сети).
Система-сервер
Проверьте, все ли серверные пакеты установлены. Сюда входят:
- Pxelinux Это часть пакета Syslinux – см. http://syslinux.zytor.com/wiki/index.php/PXELINUX. Единственный исполняемый файл, нужный в Pxelinux – это загрузчик Pxelinux pxelinux.0. Некоторые модели NIC могут потребовать достаточно новой версии – для этого мы поместили на DVD pxelinux.0 версии 4.03. При сомнениях пользуйтесь этим файлом.
- DHCP-сервер (dhcpd).
- TFTP-сервер.
- NFS-сервер.
А теперь настроим несколько конфигурационных файлов, которые будут зависеть от имен и адресов в вашей системе. В примерах ниже предполагается, что
- NIC машины-сервера имеет IP-адрес 172.24.1.40.
- NIC проблемной машины имеет MAC-адрес aa:bb:cc:dd:ee:ff, и ему приписан фиксированный IP-адрес 172.24.1.42.
- Имя файла ядра пассивного Linux – vmlinuz-2.6.36-Passive.
- Активная корневая файловая система примонтирована на сервере в /mnt/A_root_fs.
- Файл настройки DHCP активной системы, /etc/dhcpd.conf, должен иметь примерно такой вид:
ddns-update-style interim; subnet 172.24.1.0 netmask 255.255.255.0 { range 172.24.1.6 172.24.1.15; default-lease-time 3600; max-lease-time 4800; option routers 172.24.1.40; option domain-name-servers 208.67.222.222; option subnet-mask 255.255.255.0; option time-offset -8; } group { filename “pxelinux.0”; host distress { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 172.24.1.42; option host-name “distress”; } }
- Файл настройки Pxelinux для активной машины /tftpboot/pxelinux.cfg/01-aabb-cc-dd-ee-ff должен выглядеть примерно так:
prompt 1 default linux timeout 100 label linux kernel vmlinuz-2.6.36-Passive append root=/dev/nfs rw nfsroot=172.24.1.40:/mnt/A_root_fs ip=\ 172.24.1.42:172.24.1.40:172.24.1.40:255.255.255.0:distress::none\ rootfstype=ext3
В этом файле настройки отсутствует initrd, так как ядро само должно монтировать корневую файловую систему. Смотрите требующиеся для ядра устройства ниже, вследствие этого.
Также заметим, что корневая файловая система монтируется ядром как rw, а не ro, так как не может проверить корневую файловую систему, примонтированную по NFS, на наличие ошибок. Время от времени на машине-сервере нужно запускать e2fsck для этой файловой системы.
- NFS exports' добавляет пункт в /mnt/A_root_fs:
/mnt/A_root_fs 172.24.1.42(rw,no_subtree_check,no_root_ squash)
- Сервер TFTP должен быть настроен на использование /tftpboot в качестве своего каталога. Обычно это часть стандартной установки Xinet.
Активная система
Следующие шаги необходимо проделать от имени root, когда на проблемной машине запущен пассивный Linux (то есть когда она еще не проблемная!), а на машине-спасателе запущен сервер Linux с корневой файловой системой активной машины, примонтированной в режиме чтение-запись в /mnt/A_root_fs:
- Скопируйте модули ядра, соответствующие vmlinuz-2.6.36-Passive. Они лежат в подкаталоге 2.6.36-Passive каталога /lib/modules. Скопируйте это из пассивной корневой файловой системы Linux в такой же каталог активной корневой файловой системы, за исключением подкаталогов исходников и сборки, которые нам не нужны. Простейший способ сделать это – использовать scp. На проблемной машине введите:
cd /lib/modules/2.6.36-Passive ssh Rescue -l root “mkdir -p /mnt/A_root_fs/lib/ modules/2.6.36-Passive” for what in k* m*; do scp -pr $what root@Rescue:/mnt/A_root_fs/lib/ modules/2.6.36-Passive/${what} done
Устройства, требующиеся ядру при загрузке, должны быть предопределены в /dev/directory. Для создания узлов устройств запустите на машине-сервере следующие команды:
cd /mnt/A_root_fs mknod dev/mem c 1 1 mknod dev/null c 1 3;chmod 777 dev/null; mknod dev/kmsg c 1 11 mknod dev/console c 5 1 m4knod dev/ptmx c 5 2
Другие узлы устройств будут созданы udev, но эти нам нужны раньше.
- Измените правила сети udev, чтобы предотвратить переименование им устройства Ethernet, которое используется в nfs-mount. Правила сети udev располагаются в файле с именем типа /etc/udev/rules.d/nn-net.rules, где nn – число. Добавьте пару строк для Ethernet-устройства проблемной машины, используемого в PXE загрузке, наподобие:
SUBSYSTEM==”net”, ACTION==”add”, KERNEL==”eth0”,NAME=”eth0” SUBSYSTEM==”net”, ACTION==”add”, SYSFS{address}==”aa:bb:cc:dd:ee:ff”, SYSFS{type}==”1”, OPTIONS:=”ignore_ device”
Первая строка обеспечивает, чтобы любое устройство с именем eth0 не переименовывалось, а вторая строка – чтобы специфический NIC игнорировался. Теперь – для гарантии, что udev не создаст на лету некоторое правило, отменяющие эти два – если файл /etc/udev/rules.d/75-persistent-net-generator.rules существует, переименуйте или сохраните его. Затем, для отключения генерации, выполните:
echo “# disable net-generator rules in /lib/udev” > /etc/udev/rules.d/75-persistent-net-generator.rules
- Системные демоны и скрипты инициализации, способные попытаться переконфигурировать сетевой интерфейс ядра (такие как NetworkManager), должны быть отключены.
- Требуется специальная версия /etc/fstab, не содержащая пунктов ни для одной файловой системы локального диска, и одну – для корневой файловой системы такого формата:
172.24.1.40:/mnt/A_root_fs / nfs defaults 0 0
- Средства восстановления/возврата должны быть установлены в активной машине; их можно устанавливать по необходимости использования на проблемной.
Процедура загрузки по сети
Загрузите машину-спасатель с сервером Linux, примонтируйте активную корневую файловую систему в режиме чтение-запись и убедитесь, что действует правильный fstab, описанный выше. Это надо проверять всякий раз, так как активный Linux может выполняться на этой машине со своим обычным fstab.
Запустите серверы. Обратите внимание, что для Pxelinux дополнительного сервера не надо – его сервером является DHCP-сервер. После этого перейдите на проблемную машину и зайдите в настройку BIOS, выберите в качестве устройства загрузки сетевой интерфейс и загрузитесь. Система должна запросить DHCP-адрес, а затем вызвать pxelinux.0. Pxelinux получает свою конфигурацию, в которой задается ее имя и параметры пассивного ядра, включая параметры NFS-монтирования. После этого Pxelinux получает пассивное ядро и загружает его, и пассивное ядро настраивает сетевой интерфейс для NFS-монтирования корневой файловой системы, монтирует ее, и затем запускается активный Linux.
Первым делом синхронизируйте часы на двух машинах. После этого можно заняться спасательством.
Супер-надежная сеть
Система спасения такого типа чуть более сложна, и ее настройка займет больше времени; и, конечно, вам потребуется второй компьютер, на котором есть два Linux. Взамен вы получите систему спасения, основанную на вашем любимом дистрибутиве, с полным набором обычно предусматриваемых функций. Загрузка будет идти быстрее, чем при любом другом способе, если скорость сети достаточно высока, и не потребуется дополнительной поддержки других ваших систем. Если у вас уже есть два компьютера и вы работаете на обоих, то стоит провести дополнительную установку и развертывание одной в качестве системы спасения. Также естественно возжелать симметрии – пусть эти машины будет системами спасения друг для друга.