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

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

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(викификация, оформление)
 
(Сеть: Загрузка без винчестера)
 
(не показана 1 промежуточная версия 1 участника)
Строка 88: Строка 88:
 
Две последних строки в этом примере нужны только в том случае, когда домашний каталог ('''home''') и каталог загрузки ('''boot''') находятся в
 
Две последних строки в этом примере нужны только в том случае, когда домашний каталог ('''home''') и каталог загрузки ('''boot''') находятся в
 
различных разделах. Проще установить все в один раздел.
 
различных разделах. Проще установить все в один раздел.
 +
 +
{{Врезка|Заголовок=Cкорая помощь|Содержание=По возможности, проверяйте все локально. Перед тем, как переносить систему на сервер, убедитесь, что она
 +
загружается с жесткого диска. Это повысит шансы на успешный результат.|Ширина=200px}}
  
 
А что делать, если жесткий диск к клиенту подключить нельзя? Тогда установите систему на сервер в раздел, который позже смонтируете как '''/diskless'''. Проверьте, чтобы все настройки, задаваемые в процессе этой установки, были совместимы с аппаратной частью клиентской машины. Не устанавливайте загрузчик, и после перезагрузки сервер загрузится, как обычно. Теперь смонтируйте новый раздел как
 
А что делать, если жесткий диск к клиенту подключить нельзя? Тогда установите систему на сервер в раздел, который позже смонтируете как '''/diskless'''. Проверьте, чтобы все настройки, задаваемые в процессе этой установки, были совместимы с аппаратной частью клиентской машины. Не устанавливайте загрузчик, и после перезагрузки сервер загрузится, как обычно. Теперь смонтируйте новый раздел как
Строка 109: Строка 112:
  
 
  192.168.2.10:/diskless/192.168.2.50 / nfs defaults,nolock 0 0
 
  192.168.2.10:/diskless/192.168.2.50 / nfs defaults,nolock 0 0
 +
 +
===DHCP, TFTP и другие аббревиатуры===
 +
 +
Теперь, когда система на сервере полностью установлена, нужно объяснить серверу, как перенести ее на компьютер клиента. Для этого
 +
нам понадобятся ''DHCP''-сервер и ''TFTP''-сервер. '''DHCP''' (Dynamic Host Configuration Protocol – протокол динамической конфигурации хоста) –
 +
это система, с помощью которой компьютер может запросить IP-адрес и другие параметры конфигурации непосредственно из сети. Помните,
 +
что на клиенте нет постоянного хранилища файлов, поэтому хранить
 +
статические настройки сети негде. '''TFTP''' (Trivial File Transfer Protocol –
 +
простой протокол передачи файлов) – это простая система передачи
 +
файлов, удобная для сетевой загрузки, потому что ее можно хранить в
 +
ПЗУ сетевой карты '''PXE'''. Она используется для передачи загрузчика ОС
 +
и ядра на компьютер клиента.
 +
 +
{{Врезка|Заголовок=Chroot’инг|Содержание=А что делать, если в системе необходимо произвести какие-то изменения, например, обновить ПО на клиентских компьютерах? Можно зайти на каждый компьютер клиента и установить новое ПО, но клиент может быть просто выключен, когда вы захотите это сделать. Альтернативный вариант – произвести изменения с сервера с помощью ''chroot''. Выполнив команды
 +
 +
mount -t proc none /diskless/IPaddress/proc
 +
mount --bind /dev/ /diskless/IPaddress/dev
 +
chroot /diskless/IPaddress /bin/bash
 +
mount -a
 +
source /etc/profile
 +
 +
вы окажетесь в командной оболочке системы клиента. Там можно
 +
сделать все необходимое, затем выйти:
 +
 +
umount -a
 +
exit
 +
umount /diskless/IPaddress/proc
 +
umount /diskless/IPaddress/dev
 +
 +
Чтобы каждый раз не набирать эти команды снова, сохраните их как скрипт.|Ширина=300px}}
 +
 +
Серверов '''DHCP''' и '''TFTP''' на свете хватает; ''dnsmasq'' (http://www.thekelleys.org.uk/dnsmasq) является легко настраиваемой комбинацией обоих.
 +
Установка ''dnsmasq'' по умолчанию предоставляет базовый сервис '''DHCP''', но нам потребуется еще кое-что. Установив и запустив ''dnsmasq'', отключите сервер ''DHCP'' в своем маршрутизаторе, если он у вас есть, иначе может возникнуть конфликт. ''Dnsmasq'' будет наблюдать за всей сетью,
 +
а не только за компьютерами без жесткого диска.
 +
 +
Сначала нужно позаботиться, чтобы ''dnsmasq'' всегда выделял клиенту один и тот же IP-адрес. Для этого нужен MAC-адрес клиента (еще
 +
одна аббревиатура). Чтобы получить MAC-адрес, запустите на этом компьютере команду ifconfig или загрузитесь с подключенного диска
 +
или live CD – MAC-адрес зашит в сетевой карте и не может меняться ['''это не совсем так: существуют программы, способные менять MAC-адрес карты, но в условиях данного урока о них можно забыть, – прим.ред.''']. Раскомментируйте строку '''conf-dir=/etc/dnsmasq.d''' в файле '''/etc/dnsmasq.conf''', затем создайте файл '''/etc/dnsmasq.d/local''' и добавьте в него такую строку:
 +
 +
dhcp-host=00:0c:29:d4:cb:2e,192.168.2.50,somename
 +
 +
где '''00:0c:29:d4:cb:2e''' – MAC-адрес. Эта строка означает, что компьютеру
 +
с данным MAC-адресом всегда будет выделяться IP-адрес '''192.168.2.50'''
 +
и имя узла '''somename'''. То же можно проделать и для других компьютеров сети, чтобы им всегда выделялись одни и те же IP-адреса. Прямого
 +
отношения к бездисковой загрузке это не имеет.
 +
 +
Чтобы разрешить загрузку с ''pxegrub'', добавьте в файл строки
 +
 +
log-facility=/var/log/dnsmasq.log
 +
enable-tftp
 +
tftp-root=/diskless
 +
tftp-unique-root
 +
dhcp-boot=/boot/pxegrub
 +
dhcp-option=150,/boot/grub.lst
 +
 +
Первые три строки пояснять не нужно. Четвертая говорит ''dnsmasq'' о
 +
том, что для получения корневого каталога клиента нужно добавить его
 +
IP-адрес к каталогу '''tftp-root'''. Благодаря этому корневой каталог будет
 +
уникален для каждого клиента. Следующая строка определяет расположение файла загрузчика, который отправится клиенту, и последняя – меню загрузчика. Так и слышу ваш вопрос: «Какого загрузчика и меню?». Ну, мы еще не установили их, но сейчас это сделаем.
 +
 +
===Добавляем сетевой загрузчик===
 +
 +
Существует два основных загрузчика '''PXE''' – ''pxegrub'' и ''pxelinux''. Мы
 +
возьмем ''pxegrub'', но не потому, что ''pxelinux'' плох: просто ''Grub'' используется в большинстве дистрибутивов, форматы файлов конфигурации
 +
совместимы, и не нужно их изучать. ''Grub'', способный на загрузку с
 +
жесткого диска, CD/DVD и из сети, сейчас становится повсеместным.
 +
Если с ''pxegrub'' что-то не получится или вы желаете не быть как все,
 +
попробуйте ''pxelinux''. Загрузчик входит в состав пакета ''syslinux'' (http://syslinux.zytor.com).
 +
 +
''Pxegrub'' может быть уже установлен в вашей системе как часть
 +
пакета ''Grub'', в SUSE он находится в '''/usr/lib/grub/pxegrub'''. ''Dnsmasq''
 +
добавляет к этому пути корневой каталог клиента, и символьная
 +
ссылка на загрузчик будет такой: '''/diskless/192.168.2.50/boot/pxegrub'''.
 +
Можно скопировать файл загрузчика в этот каталог, но символьная
 +
ссылка всегда удобнее: тогда при установке новых версий ''Grub'' не придется переделывать загрузочные каталоги.
 +
 +
Для ''pxegrub'' нужно создать файл меню. Если вы уже редактировали
 +
стандартный файл меню ''Grub'', то поймете его синтаксис.
 +
 +
default 0
 +
timeout 10
 +
title=default
 +
root (nd)
 +
kernel /boot/vmlinuz ip=dhcp root=/dev/nfs nfsroot=192.168.2.10:/diskless/192.168.2.50
 +
 +
Основное отличие – в команде '''root''', где для загрузки вместо привычного '''hd(n,m)''' указано сетевое устройство, и параметрах ядра, задающих использование '''DHCP''' для получения IP-адреса и разделяемого каталога ''NFS'' в качестве корневого раздела. Если нужно указать другие
 +
параметры ядра (такие как '''vga''' или '''noapic'''), просто припишите их к строке настроек.
 +
 +
===И это функционирует?===
 +
 +
Пора посмотреть, все ли работает. Для этого включите компьютер клиента и выберите загрузку из сети в настройках BIOS. Должны появиться сообщения, отражающие состояние ''DHCP''; для его отслеживания на
 +
сервере также полезно запустить
 +
 +
{{Врезка|Заголовок=Скорая помощь|Содержание=Уменьшите количество сервисов и других программ, запускаемых при старте системы. Это позволит
 +
значительно ускорить загрузку, поскольку сетевая загрузка с необходимостью медленнее обычной.|Ширина=200px}}
 +
 +
tail -f /var/log/dnsmasq.log
 +
 +
Если все в порядке, то через несколько секунд появится меню ''Grub''. Это значит, что ''DHCP'' и ''TFTP'' работают, и первый тест вами пройден (а
 +
вы думали, что тест будет про аббревиатуры?).
 +
 +
По окончании тайм-аута ''Grub'', или после нажатия '''Enter''', должен запуститься сам сетевой загрузчик. Выглядит это так же, как и обычная загрузка с жесткого диска, разве что медленнее. Если система нормально загружалась на клиентской машине с жестким диском, то и
 +
сейчас все должно работать. Единственная проблема, которая иногда возникает – ''init'' может попытаться еще раз запустить сетевое соединение, разрывая первоначальное, и все остановится, потому что исчезнет корневая файловая система. Решение проблемы зависит от дистрибутива – в некоторых есть возможность не перезапускать сеть, если она уже работает: например, пользователи Gentoo могут добавить строку
 +
 +
config_eth0=( “noop” )
 +
 +
в файл '''/etc/conf.d/net'''. А можно просто отключить запуск '''eth0''' в утилите управления сервисами вашего дистрибутива. В сетевых настройках
 +
SUSE есть опция управления ''NFSroot'', делающая взаимодействие с сервисами ненужным. Точно так же нужно убедиться в том, что сеть не
 +
отключается и во время выключения компьютера, иначе система вновь потеряет связь со своей корневой файловой системой. В разных дистрибутивах это делается по-разному. Один из вариантов – просто удалить соответствующую символьную ссылку '''K''' в каталоге '''runlevel'''. Это
 +
будет что-то вроде '''/etc/rc5.d/K05network'''. K означает, что этот скрипт запускается при остановке системы для завершения ('''Kill''') сервисов.
 +
Пользователи Gentoo могут воспользоваться хитрым приемом для
 +
предотвращения отключения сети при отключении интерфейса, добавив в файл '''/etc/conf.d/net''' следующие строки
 +
 +
predown() {
 +
return 1
 +
}
 +
 +
===А оно работало?===
 +
 +
На данный момент система должна загрузиться. Если это не так, прежде всего проверьте, смонтировалась ли корневая файловая система.
 +
Поищите в системном файле журнала на сервере любые сообщения,
 +
связанные с ''NFS''. Самый простой способ получить их – перед запуском
 +
компьютера клиента выполнить следующую команду:
 +
 +
tail -f /var/log/messages | grep mountd
 +
 +
Имя файла может различаться в разных дистрибутивах и зависит от
 +
используемого системного сервиса журнала. На компьютере клиента
 +
должно вывестись что-то типа
 +
 +
authenticated unmount request from 192.168.2.50:nnn for /diskless/192.168.2.50 (/diskless/192.168.2.50)
 +
 +
Это значит, что корневая файловая система смонтирована правильно. Увидев сообщение об ошибке, проверьте синтаксис '''/etc/exports''' и
 +
сверьтесь с '''man'''. Проверьте, можете ли вы смонтировать этот ресурс с другого компьютера вашей сети.
 +
 +
Если корневая система смонтирована правильно, все остальное не должно отличаться от обычной загрузки, поэтому проверьте настройки
 +
и конфигурацию ядра. Убедитесь, что вы не забыли добавить в конфигурацию ядра важные драйверы. Однако если вы проверяли установку
 +
на локальном жестком диске и корневая файловая система смонтировалась правильно, все остальное должно «просто работать». Готово!
 +
Теперь у вас есть компьютер без жесткого диска с полной установкой
 +
Linux, который можно использовать точно так же, как «обычный». '''LXF'''
 +
 +
===Общий доступ к каталогам===
 +
 +
Если вы хотите запускать несколько компьютеров без диска с одного сервера, то представляете, какой объем дискового пространства
 +
понадобится. Несколько каталогов (особенно '''/usr''' и '''/opt''') можно разделить между клиентскими компьютерами (прочие каталоги не
 +
столь велики, чтоб о них беспокоиться, и одновременно безопасны для общего доступа), что позволит сэкономить около 3 ГБ дисковой
 +
памяти для каждого клиента. Но это непростая задача, требующая знаний в области скриптов загрузки. Просто создать символическую
 +
ссылку с каталога usr одного клиента на другой нельзя, потому что ссылки вне общего доступа NFS не работают. То же относится к монтированию с опцией '''–-bind'''. Можно куда-нибудь поместить общие каталоги '''/usr''' и '''/opt''' (например, в '''/diskless/common''') и добавить их в
 +
файл '''/etc/exports'''. После этого можно добавить строки монтирования '''/usr''' и '''/opt '''в файл '''/etc/fstab''' каждого клиента.
 +
 +
Пока все выглядит просто, но есть большая загвоздка, о которой некоторые из вас уже догадались. Оставить эту задачку вам было
 +
бы жестоко: скрипты ''init'' монтируют общие сетевые ресурсы при загрузке значительно позднее, чем локальную файловую систему,
 +
так как обычно надо дожидаться активизации сетевого интерфейса. Поэтому вам нужно было начать с изменения скриптов инициализации в вашем дистрибутиве. Быть может, игра не стоит свеч: даже если у вас много клиентов, то и дискового пространства много.

Текущая версия на 14:58, 20 марта 2009

Диски долой! Научите ПК с 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

[править] DHCP, TFTP и другие аббревиатуры

Теперь, когда система на сервере полностью установлена, нужно объяснить серверу, как перенести ее на компьютер клиента. Для этого нам понадобятся DHCP-сервер и TFTP-сервер. DHCP (Dynamic Host Configuration Protocol – протокол динамической конфигурации хоста) – это система, с помощью которой компьютер может запросить IP-адрес и другие параметры конфигурации непосредственно из сети. Помните, что на клиенте нет постоянного хранилища файлов, поэтому хранить статические настройки сети негде. TFTP (Trivial File Transfer Protocol – простой протокол передачи файлов) – это простая система передачи файлов, удобная для сетевой загрузки, потому что ее можно хранить в ПЗУ сетевой карты PXE. Она используется для передачи загрузчика ОС и ядра на компьютер клиента.


Серверов DHCP и TFTP на свете хватает; dnsmasq (http://www.thekelleys.org.uk/dnsmasq) является легко настраиваемой комбинацией обоих. Установка dnsmasq по умолчанию предоставляет базовый сервис DHCP, но нам потребуется еще кое-что. Установив и запустив dnsmasq, отключите сервер DHCP в своем маршрутизаторе, если он у вас есть, иначе может возникнуть конфликт. Dnsmasq будет наблюдать за всей сетью, а не только за компьютерами без жесткого диска.

Сначала нужно позаботиться, чтобы dnsmasq всегда выделял клиенту один и тот же IP-адрес. Для этого нужен MAC-адрес клиента (еще одна аббревиатура). Чтобы получить MAC-адрес, запустите на этом компьютере команду ifconfig или загрузитесь с подключенного диска или live CD – MAC-адрес зашит в сетевой карте и не может меняться [это не совсем так: существуют программы, способные менять MAC-адрес карты, но в условиях данного урока о них можно забыть, – прим.ред.]. Раскомментируйте строку conf-dir=/etc/dnsmasq.d в файле /etc/dnsmasq.conf, затем создайте файл /etc/dnsmasq.d/local и добавьте в него такую строку:

dhcp-host=00:0c:29:d4:cb:2e,192.168.2.50,somename

где 00:0c:29:d4:cb:2e – MAC-адрес. Эта строка означает, что компьютеру с данным MAC-адресом всегда будет выделяться IP-адрес 192.168.2.50 и имя узла somename. То же можно проделать и для других компьютеров сети, чтобы им всегда выделялись одни и те же IP-адреса. Прямого отношения к бездисковой загрузке это не имеет.

Чтобы разрешить загрузку с pxegrub, добавьте в файл строки

log-facility=/var/log/dnsmasq.log
enable-tftp
tftp-root=/diskless
tftp-unique-root
dhcp-boot=/boot/pxegrub
dhcp-option=150,/boot/grub.lst

Первые три строки пояснять не нужно. Четвертая говорит dnsmasq о том, что для получения корневого каталога клиента нужно добавить его IP-адрес к каталогу tftp-root. Благодаря этому корневой каталог будет уникален для каждого клиента. Следующая строка определяет расположение файла загрузчика, который отправится клиенту, и последняя – меню загрузчика. Так и слышу ваш вопрос: «Какого загрузчика и меню?». Ну, мы еще не установили их, но сейчас это сделаем.

[править] Добавляем сетевой загрузчик

Существует два основных загрузчика PXEpxegrub и pxelinux. Мы возьмем pxegrub, но не потому, что pxelinux плох: просто Grub используется в большинстве дистрибутивов, форматы файлов конфигурации совместимы, и не нужно их изучать. Grub, способный на загрузку с жесткого диска, CD/DVD и из сети, сейчас становится повсеместным. Если с pxegrub что-то не получится или вы желаете не быть как все, попробуйте pxelinux. Загрузчик входит в состав пакета syslinux (http://syslinux.zytor.com).

Pxegrub может быть уже установлен в вашей системе как часть пакета Grub, в SUSE он находится в /usr/lib/grub/pxegrub. Dnsmasq добавляет к этому пути корневой каталог клиента, и символьная ссылка на загрузчик будет такой: /diskless/192.168.2.50/boot/pxegrub. Можно скопировать файл загрузчика в этот каталог, но символьная ссылка всегда удобнее: тогда при установке новых версий Grub не придется переделывать загрузочные каталоги.

Для pxegrub нужно создать файл меню. Если вы уже редактировали стандартный файл меню Grub, то поймете его синтаксис.

default 0
timeout 10
title=default
root (nd)
kernel /boot/vmlinuz ip=dhcp root=/dev/nfs nfsroot=192.168.2.10:/diskless/192.168.2.50

Основное отличие – в команде root, где для загрузки вместо привычного hd(n,m) указано сетевое устройство, и параметрах ядра, задающих использование DHCP для получения IP-адреса и разделяемого каталога NFS в качестве корневого раздела. Если нужно указать другие параметры ядра (такие как vga или noapic), просто припишите их к строке настроек.

[править] И это функционирует?

Пора посмотреть, все ли работает. Для этого включите компьютер клиента и выберите загрузку из сети в настройках BIOS. Должны появиться сообщения, отражающие состояние DHCP; для его отслеживания на сервере также полезно запустить


tail -f /var/log/dnsmasq.log

Если все в порядке, то через несколько секунд появится меню Grub. Это значит, что DHCP и TFTP работают, и первый тест вами пройден (а вы думали, что тест будет про аббревиатуры?).

По окончании тайм-аута Grub, или после нажатия Enter, должен запуститься сам сетевой загрузчик. Выглядит это так же, как и обычная загрузка с жесткого диска, разве что медленнее. Если система нормально загружалась на клиентской машине с жестким диском, то и сейчас все должно работать. Единственная проблема, которая иногда возникает – init может попытаться еще раз запустить сетевое соединение, разрывая первоначальное, и все остановится, потому что исчезнет корневая файловая система. Решение проблемы зависит от дистрибутива – в некоторых есть возможность не перезапускать сеть, если она уже работает: например, пользователи Gentoo могут добавить строку

config_eth0=( “noop” )

в файл /etc/conf.d/net. А можно просто отключить запуск eth0 в утилите управления сервисами вашего дистрибутива. В сетевых настройках SUSE есть опция управления NFSroot, делающая взаимодействие с сервисами ненужным. Точно так же нужно убедиться в том, что сеть не отключается и во время выключения компьютера, иначе система вновь потеряет связь со своей корневой файловой системой. В разных дистрибутивах это делается по-разному. Один из вариантов – просто удалить соответствующую символьную ссылку K в каталоге runlevel. Это будет что-то вроде /etc/rc5.d/K05network. K означает, что этот скрипт запускается при остановке системы для завершения (Kill) сервисов. Пользователи Gentoo могут воспользоваться хитрым приемом для предотвращения отключения сети при отключении интерфейса, добавив в файл /etc/conf.d/net следующие строки

predown() {
return 1
}

[править] А оно работало?

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

tail -f /var/log/messages | grep mountd

Имя файла может различаться в разных дистрибутивах и зависит от используемого системного сервиса журнала. На компьютере клиента должно вывестись что-то типа

authenticated unmount request from 192.168.2.50:nnn for /diskless/192.168.2.50 (/diskless/192.168.2.50)

Это значит, что корневая файловая система смонтирована правильно. Увидев сообщение об ошибке, проверьте синтаксис /etc/exports и сверьтесь с man. Проверьте, можете ли вы смонтировать этот ресурс с другого компьютера вашей сети.

Если корневая система смонтирована правильно, все остальное не должно отличаться от обычной загрузки, поэтому проверьте настройки и конфигурацию ядра. Убедитесь, что вы не забыли добавить в конфигурацию ядра важные драйверы. Однако если вы проверяли установку на локальном жестком диске и корневая файловая система смонтировалась правильно, все остальное должно «просто работать». Готово! Теперь у вас есть компьютер без жесткого диска с полной установкой Linux, который можно использовать точно так же, как «обычный». LXF

[править] Общий доступ к каталогам

Если вы хотите запускать несколько компьютеров без диска с одного сервера, то представляете, какой объем дискового пространства понадобится. Несколько каталогов (особенно /usr и /opt) можно разделить между клиентскими компьютерами (прочие каталоги не столь велики, чтоб о них беспокоиться, и одновременно безопасны для общего доступа), что позволит сэкономить около 3 ГБ дисковой памяти для каждого клиента. Но это непростая задача, требующая знаний в области скриптов загрузки. Просто создать символическую ссылку с каталога usr одного клиента на другой нельзя, потому что ссылки вне общего доступа NFS не работают. То же относится к монтированию с опцией –-bind. Можно куда-нибудь поместить общие каталоги /usr и /opt (например, в /diskless/common) и добавить их в файл /etc/exports. После этого можно добавить строки монтирования /usr и /opt в файл /etc/fstab каждого клиента.

Пока все выглядит просто, но есть большая загвоздка, о которой некоторые из вас уже догадались. Оставить эту задачку вам было бы жестоко: скрипты init монтируют общие сетевые ресурсы при загрузке значительно позднее, чем локальную файловую систему, так как обычно надо дожидаться активизации сетевого интерфейса. Поэтому вам нужно было начать с изменения скриптов инициализации в вашем дистрибутиве. Быть может, игра не стоит свеч: даже если у вас много клиентов, то и дискового пространства много.

Персональные инструменты
купить
подписаться
Яндекс.Метрика