Журнал LinuxFormat - перейти на главную

LXF100-101:Запуск по сети

Материал из Linuxformat
Перейти к: навигация, поиск
Диски долой! Научите ПК с Linux загружаться через локальную сеть

Сеть: Загрузка без винчестера

Хотите превратить свой ПК в домашний кинотеатр или завести кластер из однотипных компьютеров? Ответ – сетевая загрузка. Нейл Ботвик все объяснит.


Помните времена, когда компьютерам не были нужны жесткие диски? Amiga и Atari ST загружали все необходимое с дискеты. А еще раньше у 8-битных компьютеров типа Commodore 64 и Spectrum даже и дискет-то не было, все необходимое загружалось из ПЗУ. Сегодня сложно купить компьютер без жесткого диска в несколько сотен гигабайт, но зато загрузить компьютер можно вообще без винчестера. Так называемая «загрузка по сети» позволяет такому компьютеру получить все необходимое с другого компьютера через сеть.

Это рождает два правомерных вопроса: зачем и как. Зачем бы нам это делать? Причин несколько: может быть, вам нужен тихий и прохладный компьютер, а жесткие диски нагреваются и изрядно шумят. Например, в моей гостиной стоит компьютер для работы MythTV, с материнской платой Via EPIA без кулеров и без жесткого диска, абсолютно бесшумный. Объединив все жесткие диски в один большой диск или массив дисков, вместо использования отдельных дисков на каждом компьютере, можно более эффективно обслуживать кластеры. То же справедливо и для компьютерной сети в интернет-кафе или в школьном кабинете информатики. Это не то же самое, что использовать тонкого клиента, когда всю работу выполняет сервер. Компьютер, загружаемый через сеть – это обычный компьютер или рабочая станция; вся разница – что его жесткий диск подключен длинным сетевым кабелем вместо короткого шлейфа.

На второй вопрос (как это сделать?) мы ответим дальше. Как и на первый вопрос, на второй есть несколько ответов, но мы ограничимся только одним. PXE (Preboot eXecution Environment или pixie – среда выполнения перед загрузкой) – самый простой способ обеспечить запуск через сеть, если клиентский компьютер (без жесткого диска) его поддерживает. На большинстве современных материнских плат есть по меньшей мере одна сетевая карта с поддержкой PXE, так что это самый простой вариант; прочие устройства могут потребовать другого подхода, например, установки ПЗУ etherboot (http://www.etherboot.org) на сетевой карте или инициализации процесса с дискеты или CD. Но мы их здесь не рассматриваем.

Как это работает?

Перед тем, как рассматривать загрузку с сети, вспомним, как происходит обычная загрузка с жесткого диска:

  1. BIOS компьютера ищет код загрузчика ОС (bootloader) в первом секторе жесткого диска и загружает его.
  2. Загрузчик ОС, используя информацию из файла настройки и пользовательского меню, загружает ядро, передавая ему информацию о местонахождении корневого раздела и другие данные.
  3. Ядро монтирует корневой раздел и запускает процесс /sbin/init, который загружает все остальное.

Загрузка с использованием PXE очень похожа на обычную загрузку:

  1. Код PXE в сетевой карте или в BIOS компьютера рассылает по сети расширенный DHCP-запрос.
  2. Должным образом сконфигурированный сервер возвращает информацию о настройках DHCP, а также адрес сервера загрузки, код сетевого загрузчика и загрузочное меню, подобное обычному меню загрузки Grub или Lilo.
  3. Когда пользователь выбирает пункт меню (или истекает время ожидания), загрузчик PXE загружает ядро с указанного сервера загрузки, определяя расположение корневого раздела и другие параметры.
  4. Ядро монтирует корневой раздел с помощью NFS и запускает процесс /sbin/init, который загружает все остальное.

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

Предупреждение о перегрузке аббревиатурами: здесь вы встретите множество ТБС и РТБС. Мы уже использовали PXE, BIOS, DHCP и NFS, а будут и новые. Запомните их, так как чуть позже вас ждут тесты.

Установка системы

Во-первых, нам потребуется установленная система на сервере, с которого мы будем загружаться. Использовать ту систему, которая на нем уже стоит, нельзя: даже если аппаратная часть компьютеров полностью идентична, некоторые детали (особенно настройки системы в /etc) могут различаться. Для каждого клиента нужно установить ОС в отдельный каталог; обычно это /diskless/IPaddress, что позволяет вам хранить все установленные ОС клиентов в одном месте и без конфликтов, потому что два компьютера не могут иметь одинаковые IP-адреса.

Простейший способ выполнить начальную установку системы – это подключить к будущему бездисковому компьютеру винчестер и привод CD/DVD и установить систему обычным образом. Если вы будетe настраивать загрузку по сети в существующей системе, то этот этап уже пройден. Потом содержимое диска можно скопировать в соответствующий каталог на сервере – либо физически подключив диск, либо скопировав файлы через сеть. Поскольку вам когда-нибудь придется открывать сетевой доступ к каталогу сервера, сделаем это сейчас и скопируем файлы. В этом примере адрес сервера 192.168.2.10, а адрес клиента 192.168.2.50. Все команды необходимо выполнять с привилегиями администратора.

На сервере добавьте строки

 /diskless/192.168.2.50 192.168.2.0/255.255.255.0(rw,sync,no_root_squash,no_all_squash,no_subtree_check,rw)

в файл /etc/exports, запустите

 mkdir -p /diskless/192.168.2.50
 exportfs -a
 exportfs

и убедитесь, что в выводе последней команды есть новый каталог. На клиенте запустите

 mkdir -p /mnt/remoteroot
 mount -t nfs /mnt/remoteroot 192.168.2.10:/diskless/192.168.2.50
 rsync -ax / /mnt/remoteroot
 rsync -ax /home/ /mnt/remoteroot/home/
 rsync -ax /boot/ /mnt/remoteroot/boot/

Две последних строки в этом примере нужны только в том случае, когда домашний каталог (home) и каталог загрузки (boot) находятся в различных разделах. Проще установить все в один раздел.


А что делать, если жесткий диск к клиенту подключить нельзя? Тогда установите систему на сервер в раздел, который позже смонтируете как /diskless. Проверьте, чтобы все настройки, задаваемые в процессе этой установки, были совместимы с аппаратной частью клиентской машины. Не устанавливайте загрузчик, и после перезагрузки сервер загрузится, как обычно. Теперь смонтируйте новый раздел как /diskless, создайте в нем каталог IPaddress и переместите остальное содержимое в этот каталог. Пользователям Gentoo сделать это проще, так как они могут установить систему вручную в каталог /diskless/IPaddress (просто используйте этот каталог при обычной установке вместо /mnt/gentoo).

Удаленная установка системы отличается от обычной установки на локальный диск. Прежде всего, может потребоваться перекомпиляция ядра. На это есть две причины. Первая – ради возможности смонтировать корневой раздел по сети вы должны установить опцию ROOT_NFS=y. Вторая – в большинстве дистрибутивов для загрузки модулей, необходимых для работы оборудования, используется initrd (начальный ram-диск). Хотя к нему можно обращаться через сеть, скорее всего его придется модифицировать, а это посложнее перекомпиляции ядра. Механизмы перекомпиляции ядра выходят за рамки этой статьи, но вы можете найти руководство в LXF89. Пользователи SUSE (по крайней мере 10.2) могут расслабиться – этот дистрибутив уже подготовлен для загрузки по сети с использованием PXE. Если команда

zgrep ROOT_NFS /proc/config.gz

покажет ROOT_NFS=y, ваше ядро готово к сетевой загрузке и следующий абзац можно пропустить.

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

Последняя задача – отредактировать /etc/fstab. Удалите оттуда все строки, относящиеся к swap-файлу – использовать его в NFS не рекомендуется – и измените строку для корневого раздела на

192.168.2.10:/diskless/192.168.2.50 / nfs defaults,nolock 0 0
Персональные инструменты
купить
подписаться
Яндекс.Метрика