RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Что такое бездисковая станция? Короткий ответ на этот вопрос - бездисковая станция это компьютер без жесткого диска. Такой компьютер является частью распределенной вычислительной системы (компьютерной сети). Файловая система этого компьютера располагается на других узлах компьютерной сети.
Бездисковая станция может быть самостоятельным вычислительным узлом сети, простым терминалом или тем и другим одновременно. Терминал отличается от полнофункционального компьютера тем, что он не выполняет пользовательских программ, он лишь отображает результаты работы этих программы, запущенных на других узлах сети.
Зачем это надо?
Действительно - а зачем? Не лучше ли выдать каждому пользователю отдельный компьютер в личное (монопольное) пользование, где тот будет сам себе администратор и программист? Такое решение имеет ряд недостатков:
1. На пользователя компьютера кроме его непосредственных профессиональных обязанностей возлагается бремя системного администрирования. Это установка и настройка программного обеспечения, защита от вирусов и хакерских атак, периодическое техническое обслуживание системы (дефрагментация файловых систем, обновление программного обеспечения), обслуживание аппаратной части системы и т.п.
Далеко не каждый пользователь компьютера обладает квалификацией системного программиста и способен эффективно выполнять выше перечисленные операции.
К тому же необходимость выполнять эти дополнительные обязанностибудет отвлекать пользователя компьютера от непосредственныхпрофессиональных обязанностей и негативно сказываться напроизводительности труда в целом. Обычно задачу системного администрирования поручают специальнонанятому специалисту. Но в данной конфигурации ему приходитьсяобслуживать каждый компьютер по отдельности, что при большом ихколичестве затруднительно.
2. Жесткая привязка пользователя к конкретному компьютеру. В такойконфигурации все файлы пользователя находятся на его персональномкомпьютере и он не может просто пересесть на другое место ипродолжать работать если вдруг его компьютер поломается.
3. Проблематично использование устаревших компьютеров. Новоепрограммное обеспечение часто на них не работает.
4. Низкий уровень безопасности. Такая конфигурация системы подверженаинсадерским атакам (взлому системы изнутри), что может привести кутечке информации, потере данных или поломке оборудования.
Потому как пользователи системы могут обладать широкими правамивнутри её и возможностями копирования системных данных через своиустройства ввода/вывода (CD/DVD, FDD и др). Причем речь может идтидаже не о злом умысле, а о случайно занесенных вредоносныхпрограммах.
5. Несбалансированная загрузка вычислительных мощностей. Всекомпьютеры в сети редко когда бывают загружены работой на все100%. Иногда бывает ситуация когда часть компьютеров сетипростаивает в то время когда работающим в данный моментпользователям недостаточно производительности их персональныхкомпьютеров.
6. Цена одного рабочего места. Машины должны комплектоваться жесткимидисками, а также устройствами CD/DVD, дисководами и т.п. Сюдаследует ещё добавить стоимость лицензий на программное обеспечениедля каждого компьютера.
Технология бездисковых станций и терминалов позволяет успешно решатьбольшинство проблем, описанных выше.
1. Централизованное администрирование системы. Всё программноеобеспечение, системные и пользовательские настройки могут хранитсяв одном месте. Что существенно упрощает и ускоряет обслуживаниесистемы. 2. Независимость пользователей от рабочих мест. Все программы, данныеи настройки хранятся в сети. Пользователь может получить доступ кним с любого рабочего места. 3. Возможность использования устаревших компьютеров в качестветерминалов. 4. Улучшенная безопасность. Пользовательские станции можно некомплектовать устройствами ввода/вывода (CD/DVD, FDD и т.п.).Систему можно построить таким образом, что данные можно будеткопировать только через определённый узел в сети. 5. Использование кластерных технологий параллельных вычисленийпозволяет улучшить балансировку загрузки вычислительных мощностей. 6. Цена одного рабочего места существенно снижается. Экономия налицензиях - возможно совместное использование коммерческогопрограммного обеспечения. Нет необходимости комплектовать узлыжесткими дисками, устройствами CD/DVD, дисководами и т.п.Бездисковая станция может быть исполнена в виде простогоодноплатного компьютера.
Как это работает?
В простейшем случае система состоит из сервера загрузки, одной илинескольких бездисковых станций и коммутатора(рис.1).
Рис.1: схема простой системы
Инициализация бездисковых станций происходит следующим образом:
1. При включении питания бездисковая станция выполняет свой код BIOSи код записанный в ПЗУ своей сетевой карты (BOOTROM). 2. Бездисковая станция по сети обращается к серверу загрузкипосредством широковещательного запроса. 3. Сервер загрузки дает бездисковой станции информацию о ее сетевыхнастройках и указывает место в сети где расположены файлыоперационной системы для неё. 4. Бездисковая станция выполняет загрузку операционной системысогласно соответствующим файлам конфигурации.
К представленной на (рис.1) системе легко можно подключатьдополнительные функциональные возможности. Это могут быть самые разныемодули(рис.2).
1. Шлюз в internet, включающий в себя сервер электронной почты,межсетевой экран для обеспечения безопасности, proxy сервер длядоступа к WWW. 2. Файл-сервер для хранения больших объёмов пользовательских данных. 3. Сервер печати для совместного использования принтеров. 4. Терминальный сервер для совместного использования специальногопрограммного обеспечения и включения в систему устаревшихкомпьютеров. 5. Дополнительные рабочие места, подключение ещё одной бездисковойстанции требует минимум настроек, в простейшем случае её надопросто подключить к компьютерной сети и включить питание.
Рис.2: схема сложной системы
О графических терминалах
Несколько слов надо сказать о графических терминалах, т.е. бездисковыхстанциях, которые отображают результаты работы графических (GUI)программ, запущенных на других узлах сети.
Рис.3: схема работы X Window
Стандартом "де-факто" графической среды в unix-подобных системах естьX Window System (1). Эта система обеспечивает базовые функцииграфической среды: отрисовку и перемещение окон на экране,взаимодействие с мышью и клавиатурой. Она имеет клиент-сервернуюархитектуру и реализует сетевую прозрачность, т.е. графическиепрограммы могут выполняться на другом узле компьютерной сети, при этомих интерфейс будет передаваться по сети и отображаться на машинепользователя (рис.3). Надо отметить, что эти узлы могут иметьразличную архитектуру и работать на под управлением разныхоперационных систем.
X Window System чаще всего ассоциируется с UNIX, но X-серверы могуттакже существовать внутри других операционных сред. Например дляOpenVMS от Hewlett-Packard существует реализация X Window подназванием DECwindows, а в состав операционной системы Mac OS X отApple входит система X11.app.
Microsoft Windows не включает в себя поддержку X, но существуютмногочисленные сторонние реализации: как свободные (Cygwin/X,Xming,X-Deep/32, WeirdMind, WeirdX), так и коммерческие (Xmanager,WiredX, Exceed, X-Win32). Для Microsoft Windows существует система спохожей функциональностью - Remote Desktop Protocol (протоколудалённого рабочего стола). На основе этого протокола построен сервертерминалов Microsoft Windows Server 2003 Terminal Services.
UNIX и X Window могут быть включены в эту систему от Microsoft спомощью программы Rdesktop (2), которая реализует протокол RDP иможет успешно работать с терминальным сервером для MicrosoftWindows(рис.4).
Все эксперименты проводились на сети из следующих компьютеров. * сервер загрузки ASUS CUSI-M Celeron 700MHz/RAM 128MB/HDD 10GB/CD/LAN 100Mb SiS900(int)
* бездисковая станция PCPARTNER VIB861S Celeron 600MHz/RAM 64MB/LAN 100Mb RealTek8139(ext)/video ATI 8MB Samsung 551s 15''
Бездисковая станция и сервер загрузки будут работать под управлениемОС FreeBSD, терминальный сервер - под управлением Windows 2003 Server.Настройка последнего выходит за рамки данной статьи.
Настройка бездисковой станции
Настройка бездисковые станции заключается в установке в машину сетевойкарты с поддержкой функции сетевой загрузки.
Относительно новые машины (после 2001г.) с интегрированными сетевымикартами должны поддерживать разработанный Intel стандарт PXE(''пикси'') - Preboot Execution Environment, необходимо просто сделатьсоответствующие настройки в BIOS.
Если такого интегрированного устройства нет то можно использовать''навесную'' сетевую карту, которая должна иметь сокет для микросхемыПЗУ (BOOTROM). В это ПЗУ (аналогично BIOS) записываетсясоответствующая программа сетевой загрузки.
В данном случае использовалась машина с "навесной" сетевой картойRealTek8139. Эта карта имеет сокет для BOOTROM, который не былиспользован, программа сетевой загрузки была успешно дописана ''вхвост'' BIOS по методу описанному в статьеhttp://mechanoid.narod.ru/unix/diskless2/index.html#lissyara">1]
Последовательность операций при загрузке бездисковой станции в данномслучае такая:
1. выполняется код BIOS и код PXE (дописанный "в хвост" BIOS) 2. бездисковая станция по сети обращается к DHCP-серверу на серверезагрузки посредством широковещательного запроса 3. DHCP сервер дает бездисковой станции следующую информацию: * её бездисковой станции ip-адрес * ip-адрес узла где лежит программа начальной загрузки * имя программы начальной загрузки, в данном случае pxeboot * ip-адрес шлюза (gateway) * NFS-путь к корню файловой системы для бездисковой станции
4. бездисковая станция используя полученную на предыдущем шагеинформацию выполняет следующие действия:
* выкачивает по протоколу TFTP программу начальной загрузки pxeboot из указанного DHCP места в сети
* выполняет pxeboot, монтирует NFS-корень файловой системы и запускает загрузку ядра операционной системы
* загружает операционную систему и другие программы согласно файлам конфигурации
Настройка сервера загрузки
На сервере загрузки установим и настроим следующие программы:
* ОС FreeBSD 6.2-RELEASE-p8 * tftpd - Internet Trivial File Transfer Protocol server * nfsd - Network File System server * Internet Systems Consortium DHCP Server V3.0.5
Для этого выполним такие действия:
1. устанавливаем ОС FreeBSD http://mechanoid.narod.ru/unix/diskless2/index.html#handbook">2]при разбивке диска кроме стандартных разделов (slice) для/ /var /tmp /usr swapзаводим дополнительные разделы где будут ''жить'' бездисковыестанции * /diskless/rootfs - общий корень файловой системы для бездисковых станций, размер - 128MB
* /diskless/nodes - персональные данные бездисковых станций: swap и др. размер зависит от количества станцийкаждой бездисковой станций можно выделить личный swap-файлразмером примерно равный размеру оперативной памяти данной станции
* /diskless/home - общий home где будут каталоги пользователей бездисковыхстанций размер зависит от количества и ''аппетитов'' пользователейэти данные можно вынести на отдельный файл сервер
Для передачи бездисковой станции программы начальной загрузкиpxeboot воспользуемся упрощенным FTP сервером tftpd. Онприсутствует в системе по умолчанию и работает в рамках inetd(internet ''super-server'') Для запуска tftpd необходимо выполнить следующие действия:
создать корень файловой системы для tftp сервера # mkdir /diskless/tftpboot
раскоментировать и поправить в файле /etc/inetd.confсоответствующую строку tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /diskless/tftpboot
создать для tftpd журнал сообщений, для этого в /etc/syslog.conf добавим !tftpd *.* /var/log/tftpd.log
В завершении настроек tftpd скопируем в корень tftp серверапрограмму-загрузчик pxeboot откуда его будут ''брать'' бездисковыестанции при загрузке. # cp /boot/pxeboot /diskless/tftpboot/
4. Настройка NFS сервера.
Для того что бы бездисковая станция успешно работала ей нужнафайловая система состоящая из следующего набора:
nfs-ресурс точка монтирования комментарий
/diskless/rootfs / корневая файловая система для бездисковой станции /diskless/home /home каталоги пользователей бездисковой станции /usr /usr каталог c программным обеспечением /diskless/nodes/192.168.21.4/var /var персональный каталог длявременных и служебных файлов бездисковой станции с адресом192.168.21.4
В /diskless/nodes для каждой бездисковой станции создаетсяподкаталог по имени ее ip. Там будут содержаться её индивидуальныеданные (swap-файл и др.) К этой теме мы вернемся позже когда будемзадавать конфигурацию бездисковой станции./diskless/rootfs и /usr ''отдаются'' бездисковой станции в режиме''только чтение''
/home и /diskless/nodes/X.X.X.X - в режиме полного доступа. Помещаем соответствующие записи в файл настроек /etc/exports.
Для запуска сервера NFS в файл /etc/rc.conf надо добавить: rpcbind_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -n5"
Здесь надо отдельно отметить параметр запуска -n5, он показываетсколько клиентов одновременно смогут работать с данным сервером.
Настройка параметров бездисковых станций
Теперь перейдём к настройкам программной части бездисковых станций.
В каталоге /diskless/rootfs создадим общую корневую файловую системудля бездисковых станций. Основные скрипты и файлы конфигурации будутрасполагаться в каталоге /diskless/rootfs/conf. (В каталоге/usr/share/examples/diskless можно найти дополнительную информацию)
1. Создаем корневую файловую систему для бездисковые станции # mkdir -p /diskless/rootfs && cd /diskless/rootfs # cp -r /boot /bin /lib /libexec /sbin . # mkdir -p dev home proc usr var etc conf/default # ln -s tmp /var/tmp
в /diskless/rootfs должен получиться следующий набор conf - файлы настроек (вернемся сюда позже) etc bin - основные утилиты системы sbin boot - загрузчик и ядро dev - точка монтирования devfs home - точка монтирования пользовательских каталогов lib - основные библиотеки системы libexec proc - точка монтирования procfs tmp - симлинк на /var/tmp usr - точка монтирования каталога с основным программным обеспечением var - точка монтирования каталога временных и служебных файлов
Далее в /diskless/nodes создаем для каждой бездисковой станциикаталог персональных данных. # cd /diskless/nodes # mkdir -p 192.168.21.4/var
здесь же создаем создаем файл подкачки (для узла 192.168.21.4размером 64MB) # dd if=/dev/zero of=/diskless/nodes/192.168.21.4/var/swap bs=1k count=64000
2. Собираем ядро для бездисковых станций.
Для бездисковых станций необходимо собрать специальное ядро. Изнего можно удалить всё лишнее (например, поддержку ATAвинчестера). В ядро надо добавить опции поддержки сетевойзагрузки. options BOOTP options BOOTP_NFSROOT options NFS_ROOT
компилируем # cd /usr/src/sys/i386/conf # /usr/sbin/config DISKLESS # cd /usr/src/sys/i386/compile/DISKLESS/ # make cleandepend depend all
и копируем получившееся ядро в соответствующий каталог # cp /usr/src/sys/i386/compile/DISKLESS/kernel /diskless/rootfs/boot/kernel/
3. Переходим к собственно настройкам.
После загрузки ядра запускаетсяпроцесс init, который считывает и выполняет содержимое /etc/rc. Можно написать этот скрипт самому под свои задачи, этот вариантможно реализовать для простых терминалов.
Альтернативный вариант - воспользоваться системными скриптом/etc/rc.initdiskless. Для начальной инициализация бездисковойстанций необходимо чтобы в каталоге /diskless/rootfs/etc былследующий набор файлов, скопированных из /etc: # ls /diskless/rootfs/etc login.conf rc rc.initdiskless rc.subr
Работает это следующим образом: скрипт rc запускаетrc.initdiskless, который проверяет как смонтирован корень файловойсистемы. Если выясняется что корень это NFS то запускаютсясценарии инициализации бездисковой станции, содержащиеся вкаталоге /conf.
base - задает начальную структуру каталогов defauts - настройки по умолчанию ip - персональные настройки узлов * В каталоге base создадим подкаталог etc, в котором создадимтекстовый файл с именем md_size. Содержимое этого файла -число 6144. Это значит, что при запуске в памяти бездисковой станциибудет создан виртуальный диск размером 6144 блока (3MB), точка его монтирования - /etc.
* В каталог defauts положим копию /etc, это будут настройкисистемы по умолчанию. Там необходимо поправить файл fstab, заменив локальные диски на nfs, ну и всё прочее,что сочтёте для себя нужным изменить.
* В каталоге ip создадим подкаталог 192.168.21.4 и внутри негоetc. Это будут персональные настройки бездисковой станции192.168.21.4. Сюда можно положить файл X11/xorg.conf с настройками X-сервера, fstab с указанием персональногоnfs-каталога /var, скрипт rc.d/swap2, который будетподключать swap-файл и др.
При запуске бездисковой станции 192.168.21.4 в её памяти будетсоздан виртуальный диск размером /conf/base/etc/md_size (3MB) ипримонтирован в /etc. Туда копируется содержимое/conf/defauts/etc, а затем содержимое /conf/ip/192.168.21.4/etc,при копировании файлы с одинаковыми именами перезаписываются. После этого бездисковая станция инициализируется с использованиеминформации из этого виртуального /etc.
Настройка графического терминала
В этой работе был использован X.Org X Server v.1.4 [[[http://mechanoid.narod.ru/unix/diskless2/index.html#xorg 5].]] Для сборкии установки этой среды во FreeBSD надо выполнить следующие действия. # cd /usr/ports/x11/xorg && make install clean
Далее необходимо задать параметры для X-сервера, для этого надоотредактировать файл /etc/X11/xorg.conf или воспользоваться программойxorgconfig, есть ещё GUI-вариант этой утилиты xorgcfg. Для запускаX-сервера надо выполнить программу startx или xdm. Подробнее об этомчитайте[[[http://mechanoid.narod.ru/unix/diskless2/index.html#handbook 1].]]
Чтобы запустить удалённого X-клиента, выводящего графику на локальныйX-сервер, необходимо выполнить такие действия. 1. Убедиться, что локальный X-сервер работает в сетевом режиме ипринимает подключения с других машин. Можно проверить с помощьюутилиты netstat открыт ли порт X11. 2. Разрешить удалёной машине соединение с нашим X-сервером с помощьюxhost. 3. Подключиться к удалённой машине при помощи ssh (или подобногоэтому средства), установить на удалённой машине переменнуюокружения DISPLAY. 4. Запустить клиентскую программу на удалённой машине. user@localX.my.net# netstat -a |grep LISTEN user@localX.my.net# xhost +remoteX.my.net user@localX.my.net# ssh remoteX.my.net user@remoteX.my.net# export DISPLAY="localX.my.net:0" user@remoteX.my.net# firefox
Можно также использовать вспомогательную программу, котораяавтоматически будет делать все описанное выше.
Говоря о графическом терминале на базе X.Org, можно ещё упомянутьклиента для Microsoft Terminal Services. Это программа rdesktop (ARemote Desktop Protocol client)[[[http://mechanoid.narod.ru/unix/diskless2/index.html#xrdp 6],]] она позволяет отображатьудалённый ''рабочий стол'' Microsoft Windows в окне локальногоX-сервера. Для сборки и установки этой программы во FreeBSD надовыполнить следующие действия. # cd /usr/ports/net/rdesktop && make install clean
Для подключения к удалённому ''рабочему столу'' Microsoft Windowsдостаточно выполнить команду # rdesktop mswindows.my.net
Кроме отображения окна Microsoft Windows, программа rdesktop можетпредоставлять разные дополнительные возможности, например, передачакроме картинки ещё и звукового канала с удалённой машины.