на главную ] 

Бездисковые станции и терминалы

Евгений Борисов

суббота, 20 октября 2007 г.


В этой статье речь пойдет о бездисковых станциях и терминалах.

1 Что такое бездисковая станция?

Короткий ответ на этот вопрос - бездисковая станция это компьютер без жесткого диска. Такой компьютер является частью распределенной вычислительной системы (компьютерной сети). Файловая система этого компьютера располагается на других узлах компьютерной сети.

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

2 Зачем это надо?

Действительно - а зачем? Не лучше ли выдать каждому пользователю отдельный компьютер в личное (монопольное) пользование, где тот будет сам себе администратор и программист? Такое решение имеет ряд недостатков:

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

    Это установка и настройка программного обеспечения, защита от вирусов и хакерских атак, периодическое техническое обслуживание системы (дефрагментация файловых систем, обновление программного обеспечения), обслуживание аппаратной части системы и т.п.

    Далеко не каждый пользователь компьютера обладает квалификацией системного программиста и способен эффективно выполнять выше перечисленные операции.

    К тому же необходимость выполнять эти дополнительные обязанности будет отвлекать пользователя компьютера от непосредственных профессиональных обязанностей и негативно сказываться на производительности труда в целом.

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

  2. Жесткая привязка пользователя к конкретному компьютеру. В такой конфигурации все файлы пользователя находятся на его персональном компьютере и он не может просто пересесть на другое место и продолжать работать если вдруг его компьютер поломается.

  3. Проблематично использование устаревших компьютеров. Новое программное обеспечение часто на них не работает.

  4. Низкий уровень безопасности. Такая конфигурация системы подвержена инсадерским атакам (взлому системы изнутри), что может привести к утечке информации, потере данных или поломке оборудования.

    Потому как пользователи системы могут обладать широкими правами внутри её и возможностями копирования системных данных через свои устройства ввода/вывода (CD/DVD, FDD и др). Причем речь может идти даже не о злом умысле, а о случайно занесенных вредоносных программах.

  5. Несбалансированная загрузка вычислительных мощностей. Все компьютеры в сети редко когда бывают загружены работой на все 100%. Иногда бывает ситуация когда часть компьютеров сети простаивает в то время когда работающим в данный момент пользователям недостаточно производительности их персональных компьютеров.

  6. Цена одного рабочего места. Машины должны комплектоваться жесткими дисками, а также устройствами CD/DVD, дисководами и т.п. Сюда следует ещё добавить стоимость лицензий на программное обеспечение для каждого компьютера.

Технология бездисковых станций и терминалов позволяет успешно решать большинство проблем, описанных выше.

  1. Централизованное администрирование системы. Всё программное обеспечение, системные и пользовательские настройки могут хранится в одном месте. Что существенно упрощает и ускоряет обслуживание системы.

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

  3. Возможность использования устаревших компьютеров в качестве терминалов.

  4. Улучшенная безопасность. Пользовательские станции можно не комплектовать устройствами ввода/вывода (CD/DVD, FDD и т.п.). Систему можно построить таким образом, что данные можно будет копировать только через определённый узел в сети.

  5. Использование кластерных технологий параллельных вычислений позволяет улучшить балансировку загрузки вычислительных мощностей.

  6. Цена одного рабочего места существенно снижается. Экономия на лицензиях - возможно совместное использование коммерческого программного обеспечения. Нет необходимости комплектовать узлы жесткими дисками, устройствами CD/DVD, дисководами и т.п. Бездисковая станция может быть исполнена в виде простого одноплатного компьютера.

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

В простейшем случае система состоит из сервера загрузки, одной или нескольких бездисковых станций и коммутатора(рис.1).

Рис.1: схема простой системы
схема простой системы

Инициализация бездисковых станций происходит следующим образом:

  1. При включении питания бездисковая станция выполняет свой код BIOS и код записанный в ПЗУ своей сетевой карты (BOOTROM).
  2. Бездисковая станция по сети обращается к серверу загрузки посредством широковещательного запроса.
  3. Сервер загрузки дает бездисковой станции информацию о ее сетевых настройках и указывает место в сети где расположены файлы операционной системы для неё.
  4. Бездисковая станция выполняет загрузку операционной системы согласно соответствующим файлам конфигурации.

К представленной на (рис.1) системе легко можно подключать дополнительные функциональные возможности. Это могут быть самые разные модули(рис.2).

  1. Шлюз в internet, включающий в себя сервер электронной почты, межсетевой экран для обеспечения безопасности, proxy сервер для доступа к WWW.
  2. Файл-сервер для хранения больших объёмов пользовательских данных.
  3. Сервер печати для совместного использования принтеров.
  4. Терминальный сервер для совместного использования специального программного обеспечения и включения в систему устаревших компьютеров.
  5. Дополнительные рабочие места, подключение ещё одной бездисковой станции требует минимум настроек, в простейшем случае её надо просто подключить к компьютерной сети и включить питание.

Рис.2: схема сложной системы
схема сложной системы

4 О графических терминалах

Несколько слов надо сказать о графических терминалах, т.е. бездисковых станциях, которые отображают результаты работы графических (GUI) программ, запущенных на других узлах сети.

Рис.3: схема работы X Window
схема работы X Window

Стандартом "де-факто" графической среды в unix-подобных системах есть X Window System[7]. Эта система обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с мышью и клавиатурой. Она имеет клиент-серверную архитектуру и реализует сетевую прозрачность, т.е. графические программы могут выполняться на другом узле компьютерной сети, при этом их интерфейс будет передаваться по сети и отображаться на машине пользователя (рис.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 [6], которая реализует протокол RDP и может успешно работать с терминальным сервером для Microsoft Windows(рис.4).

Рис.4: схема работы Rdesktop
схема работы Rdesktop

 

Бездисковые станции на основе FreeBSD

Далее мы раскажем о практической реализации, описаных выше технологий, на программной основе OS FreeBSD.

1 Использованые устройства

Все эксперименты проводились на сети из следующих компьютеров.

Бездисковая станция и сервер загрузки будут работать под управлением ОС FreeBSD, терминальный сервер - под управлением Windows 2003 Server. Настройка последнего выходит за рамки данной статьи.

2 Настройка бездисковой станции

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

Относительно новые машины (после 2001г.) с интегрированными сетевыми картами должны поддерживать разработанный Intel стандарт PXE (''пикси'') - Preboot Execution Environment, необходимо просто сделать соответствующие настройки в BIOS.

Если такого интегрированного устройства нет то можно использовать ''навесную'' сетевую карту, которая должна иметь сокет для микросхемы ПЗУ (BOOTROM). В это ПЗУ (аналогично BIOS) записывается соответствующая программа сетевой загрузки.

В данном случае использовалась машина с "навесной" сетевой картой RealTek8139. Эта карта имеет сокет для BOOTROM, который не был использован, программа сетевой загрузки была успешно дописана ''в хвост'' BIOS по методу описанному в статье[1]

Последовательность операций при загрузке бездисковой станции в данном случае такая:

  1. выполняется код BIOS и код PXE (дописанный "в хвост" BIOS)
  2. бездисковая станция по сети обращается к DHCP-серверу на сервере загрузки посредством широковещательного запроса
  3. DHCP сервер дает бездисковой станции следующую информацию:
    • её бездисковой станции ip-адрес
    • ip-адрес узла где лежит программа начальной загрузки
    • имя программы начальной загрузки, в данном случае pxeboot
    • ip-адрес шлюза (gateway)
    • NFS-путь к корню файловой системы для бездисковой станции
  4. бездисковая станция используя полученную на предыдущем шаге информацию выполняет следующие действия:
    • выкачивает по протоколу TFTP программу начальной загрузки pxeboot из указанного DHCP места в сети
    • выполняет pxeboot, монтирует NFS-корень файловой системы и запускает загрузку ядра операционной системы
    • загружает операционную систему и другие программы согласно файлам конфигурации

3 Настройка сервера загрузки

На сервере загрузки установим и настроим следующие программы:

Для этого выполним такие действия:

  1. устанавливаем ОС FreeBSD [2]

    при разбивке диска кроме стандартных разделов (slice) для

    /  /var  /tmp /usr swap
    
    заводим дополнительные разделы где будут ''жить'' бездисковые станции
    • /diskless/rootfs
      - общий корень файловой системы для бездисковых станций, размер - 128MB

    • /diskless/nodes
      - персональные данные бездисковых станций: swap и др.
      размер зависит от количества станций
      каждой бездисковой станций можно выделить личный swap-файл размером примерно равный размеру оперативной памяти данной станции

    • /diskless/home
      - общий home где будут каталоги пользователей бездисковых станций
      размер зависит от количества и ''аппетитов'' пользователей
      эти данные можно вынести на отдельный файл сервер

    Эти отдельные разделы нужны для корректной работы NFS-сервера дополнительную информацию по этому вопросу можно получить в статье[3].

  2. настройка DHCP сервера
    • собираем устанавливаем DHCP сервер
      # сd /usr/ports/net/isc-dhcp3-server && make install clean
      

    • правим конфиг /usr/local/etc/dhcpd.conf (на основе статьи [3])

    • запускаем dhcpd
      # echo 'dhcpd_enable="YES"' >> /etc/rc.conf
      # sh /usr/local/etc/rc.d/isc-dhcpd start
      

  3. настройка TFTP сервера

    Для передачи бездисковой станции программы начальной загрузки 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.log

      # touch /var/log/tftpd.log
      

    • запустить inetd

      # echo 'inetd_enable="YES"' >> /etc/rc.conf
      # sh /etc/rc.d/inetd start
      

    В завершении настроек 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, он показывает сколько клиентов одновременно смогут работать с данным сервером.

4 Настройка параметров бездисковых станций

Теперь перейдём к настройкам программной части бездисковых станций.

В каталоге /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.

    В /diskless/rootfs/conf создадим следующие подкаталоги[4]:

    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.

5 Настройка графического терминала

В этой работе был использован X.Org X Server v.1.4 [5]. Для сборки и установки этой среды во FreeBSD надо выполнить следующие действия.

# cd /usr/ports/x11/xorg && make install clean

Далее необходимо задать параметры для X-сервера, для этого надо отредактировать файл /etc/X11/xorg.conf или воспользоваться программой xorgconfig, есть ещё GUI-вариант этой утилиты xorgcfg. Для запуска X-сервера надо выполнить программу startx или xdm. Подробнее об этом читайте[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 (A Remote Desktop Protocol client)[6], она позволяет отображать удалённый ''рабочий стол'' Microsoft Windows в окне локального X-сервера. Для сборки и установки этой программы во FreeBSD надо выполнить следующие действия.

# cd /usr/ports/net/rdesktop && make install clean

Для подключения к удалённому ''рабочему столу'' Microsoft Windows достаточно выполнить команду

# rdesktop mswindows.my.net

Кроме отображения окна Microsoft Windows, программа rdesktop может предоставлять разные дополнительные возможности, например, передача кроме картинки ещё и звукового канала с удалённой машины.


Примеры файлов настройки можно найти [ здесь ]


Литература

1
Lissyara Прошивка загрузчика PXE для сетевых плат RTL8139 в БИОС материнской платы - http://www.lissyara.su/?id=1303

2
Руководство FreeBSD - http://www.freebsd.org/doc/ru/books/handbook

3
Mikhail E. Zakharov Сервер бездисковых станций FreeBSD 5.2.1 - http://www.opennet.ru/docs/RUS/diskless-FreeBSD

4
man 8 diskless

5
The X.Org Foundation - http://www.x.org

6
A Remote Desktop Protocol Client - http://www.rdesktop.org

7
Википедиия: X Window System - http://ru.wikipedia.org/wiki/X_Window_System



Evgeny S. Borisov
2007-10-20
Яндекс.Метрика
TOP.zp.ua PR-CY.ru
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.