Клонирование рабочих станций

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

Целью данной статьи является рассмотрение нескольких из многих способов клонирования жесткого диска рабочей станции. В процессе клонирования мы используем встроенные средства Линукс для того чтобы добиться результата, более менее сопоставимого с Norton Ghost для Windows.

И хотя мы будем загружать на наших опытных машинах Линукс, в реальной жизни это может быть и любая другая ОС. Я, например, пользуюсь нижеописанным методом для клонирования станций под Windows ME, которые приходиться форматировать хотя бы раз в год - по очевидным причинам (самый совместимый формат с Microsoft - "format c:" - прим.перев.)

Подключение жестких дисков

Традиционно для клонирования необходимы две машины (здесь и далее А - машина-модель, В - её клон), а также третий компьютер (назовём его С) под управлением Линукс.

1. Вынимаем жесткие диски из машин А и B, подключаем их к машине С. Не забудем, однако, что родной диск с ОС Линукс на машине С должен работать как IDE primary master. То есть схема подключения должна выглядеть примерно так:

IDE bus 0, master       => жесткий диск машины C     => /dev/hda
IDE bus 0, slave        =>   жесткий диск машины A   =>   /dev/hdb          
IDE bus 1, master       =>   жесткий диск машины B   =>   /dev/hdc  

Затем просто копируем содержимое /dev/hdb в /dev/hdc. В случае если модели компьютеров одинаковы, то создаем копию диска один к одному.

        dd if=/dev/hdb of=/dev/hdc 

или даже вот так:

          cp /dev/hdb /dev/hdc  
(Но первый вариант предпочтительней -- вы можете "поиграть" в dd такой опцией как bs [количество читаемых и записываемых байт за один раз], что позволит вам "выжать" максимум из своих жёстких дисков. Прим.ред. )

Есть и другие ещё более простые способы создать копию, но при этом вы должны учитывать следующие моменты:

  • Жесткие диски должны быть именно одной и той же модели, иначе вы рискуете получить проблемы если один из них новее или старее другого
  • Могут возникнуть проблемы если на диске А или B есть битые сектора
  • Можно зря потратить время копируя пустые области диска с А на B

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

Можно пойти и другим путём копирования с А на B, более сложным (который скорее не клонирование, а просто копирование - прим.перев.), он состоит из двух этапов:

  • Сначала создаём таблицу разделов на B, (утилитами fdisk, cfdisk...)
  • Затем форматируем созданные разделы (утилиты mkfs.ext2/3, mkfs.vfat, mkswap)
  • Производим непосредственно само копирование

В этом случае копирование предполагает предварительное монтирование:

mkdir /mount/A ; mkdir /mount/B          
mount /dev/hdb /mount/A
mount /dev/hdc /mount/B
cp -dpR /mount/A/* /mount/B 
umount /dev/hdb ; umount /dev/hdc  

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

Внимание: Если вы используете загрузчик типа lilo/grub для загрузки рабочей станции под Линукс, то при копировании вторым способом надо создать конфигурационный файл загрузчика и при его помощи устанавливать загрузчик в загрузочный сектор (MBR, Master Boot Record. прим.ред.) на диск B.

Загрузчику необходимо указать следующее:

  • Использовать диск /dev/hdc для записи загрузочного сектора, то есть туда, где клонируемый диск находится сейчас.
  • Использовать /dev/hda для загрузки, то есть откуда затем клонированный диск будет загружаться.

Будьте предельно осторожны! Внимательно изучите содержимое своих файлов /etc/lilo.conf или /boot/grub/menu.lst и соответствующие man-страницы перед тем как предпринимать что-либо!

Альтернативный способ, если машины сразу грузятся в Линукс, то вы можете:

  • скопировать файлы на диск B
  • вставить диск B обратно в рабочую станцию B
  • Загрузить машину B с восстановительной (rescue) дискеты которую вы создали для машины А при установке системы
  • непосредственно выполнить команду lilo или grub

Такой способ наверное наиболее подходящий для новичков в Линукс-системах... :-)

Можно предложить ещё один способ, если диск С (не путать с С: !!! - прим.перев.) достаточно емкий, то можно скинуть содержимое А на С, а оттуда соответственно растиражировать на B1, B2, B3....Если у вас достаточно много IDE интерфейсов (или SCSI) то можно за один раз сделать копии на 5 дисках.

Но всем, конечно, понятно, что копирование с диска на диск удобно использовать только при отсутствии сети, отсутствие последней сейчас можно назвать редкостью. Хотя копирование с диска на диск даёт преимущество в скорости, поскольку копирование происходит на скорости IDE-интерфейсов.

Копирование по сети

Схема при клонировании по сети такова: станция В загружается с дискеты или компакт-диска с операционной системой, способной работать в сети без установки непосредственно на жесткий диск (очевидно что Линукс с этим вполне справляется, чего нельзя сказать про MS Windows ), а далее просто копируется образ жесткого диска со станции А, ну, или с файлового сервера С. В своих примерах я буду использовать станцию В в качестве конфигурируемого компьютера, а образ жесткого диска с А лежит на сервере С.

Существует довольно много микро-дистрибутивов Линукс, умещающихся на дискету. Мне больше всех нравится MicroLinux (muLinux), хотя, на самом деле, все они работают по аналогичному принципу.

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

Далее вы можете выбрать один из следующих способов:

  • Разместить образ жесткого диска на сервере, и затем по-байтно скопировать его на локальный жесткий диск. Но при этом следует учитывать те же нюансы, что и при по-байтном копировании с диска на диск через шину IDE/SCSI.
  • Дать доступ к файлам на сервере, разметить и отформатировать локальный диск, а затем скопировать на него по сети все необходимые файлы.

Пример первого способа с использованием NFS:

mkdir /mount/C          
mount server:/exported.directory /mount/C          
dd if=/mount/C/my.image of=/dev/hda          
umount server:/exported.directory  

Пример второго способа ( подразумевается что локальный диск /dev/hda уже разбит и отформатирован ):

mkdir /mount/B ; mkdir /mount/C          
mount /dev/hda /mount/B          
mount server:/exported.directory /mount/C          
cp -dpR /mount/C/* /mount/B          
umount server:/exported.directory /mount/C          
umount /dev/hda    

Для второго случая не забудьте установить загрузчик (если вы его используете) сразу после копирования файлов, или после перезагрузки станции В с восстановительной дискеты.

Что мне нравится в Линуксе, так это то, что копирование файлов или образа по сети выглядит также как и копирование с другого жесткого диска в вашем компьютере!

Конечно, файлы с сервера С не обязательно копировать именно по NFS. Можно использовать любой другой протокол, который поддерживает ваш микро-дистрибутив с дискеты. Очевидно, что проще всего использовать тот протокол, который уже установлен на вашем сервере. А выбрать есть из чего:

NFS (Network File System) Классический протокол обмена файлами для *nix систем, устойчив и прост в настройке. Рекомендую.
HTTP (as in Web server) Прост в настройке серверной части, но довольно трудно найти подходящего клиента. Используется в основном автоматическими инсталляционными скриптами.
FTP Не так прост в настройке сервера, но зато прост при использовании клиентов. Вероятно у вас он уже установлен.
TFTP (trivial FTP) Прост как в настройке сервера, так и клиента. Большинство маршрутизаторов (Cisco) используют tftp для хранения конфигурационных файлов.
SMB (or Netbios) Да, он тоже подходит! Ваш сервер может работать и под Linux+Samba, и под любой версией Windows. Клиент в Линуксе на станции В может примонтировать ресурс командой smbmount, а уж надо это или нет - решать вам.
rcp or scp (scp предпочтительней использовать если вам нужна повышенная безопасность)
rsync Ещё один из моих предпочитаемых протоколов. Обычно используется для синхронизации резервных копий или веб-серверов с другими серверами. Если ваш сервер С доступен извне вашей сети, то в целях безопасности заблокируйте этот протокол на брандмауэре. А ещё rsync поддерживает компрессию.

Также можно отметить современный CD-дистрибутив Knoppix, с которого можно грузиться сразу в KDE, и использовать ваши любимые графические утилиты.

Загрузка по сети

Ну и последний способ - это загрузка станции В прямо по сети без использования загрузочной дискеты. Смысл состоит в том чтобы BIOS загрузил небольшой драйвер сетевой карты из EPROM. Далее управление переходит к этому драйверу, который ищет в сети DHCP сервер, с которого затем получает IP-адрес и образ ядра. При последующей загрузке ядро монтирует файловую систему NFS сервера в качестве своей корневой.

После этого станция В работает в полноценной Линукс-системе. Можно отформатировать локальный жесткий диск и скопировать на него файлы с сервера.

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

Здесь есть ещё один вариант - полностью распределить локальные жесткие диски на станциях В1, В2, В3 таким образом.... чтобы они загружались каждый раз по сети, а пользовательские файлы хранились на главном NFS сервере.

Литература для изучения

Многие администраторы для научных кластеров используют программу dolly. Я слышал о ней много чего хорошего, но попробовать самому пока не довелось.

На тему загрузки по сети обратите внимание на ключевое слово etherboot или, если ваше оборудование поддерживает этот метод удалённой загрузки, PXE.

PS. Для тех кто пожелает перевести эту статью: я написал её в духе GPL, т.е. вы можете совершенно свободно копировать, рассылать и переводить её - только пожалуйста, уведомьте меня об этом по эл.почте, я хочу отслеживать переводы - это полезно для учебного плана :-)
Автор: Alan Ward
free-templates.ru