Клонирование рабочих станций в Линукс
Автор: Alan Ward
Перевод: Юрий Прушинский


Думаю, что любой кому приходилось готовить парк компьютеров из 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 [количество читаемых и записываемых байт за один раз], что позволит вам "выжать" максимум из своих жёстких дисков. Прим.ред. )

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

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

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

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

        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.

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

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

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

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

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

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


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

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

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

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

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

Пример первого способа с использованием 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

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


Copyright (c) 2003, Alan Ward. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 89 of Linux Gazette, April 2003


Разбор полётов. Статья "Клонирование рабочих станций в Линукс". Вот, что пишет Михаил Шигорин (mike at osdn.org.ua):

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

Лучше указать "bs=1M" :-)

 ...skip...

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

 ..и вот тут я удивился отсутствию ссылки на Hard-Disk-Upgrade
(mini?) HOWTO :)  Оно аккурат по теме.
    

Точно. И есть перевод на русский язык этого mini-howto: "Мини-HOWTO: Переход на новый жёсткий диск", авторы Yves Bellefeuille и Konrad Hinsen, перевод Станислава Рогина. По поводу опции bs могу добавить, что имеет смысл выбирать размер одновременно копируемых данных кратный размеру буфера жёсткого диска.

Александр Куприн

Команда переводчиков:
Александр Куприн, Андрей Киселев, Александр Михайлов, Александр Саввин, Владимир Меренков, Иван Песин, Игорь Яровинский, Павел Соколов, Роман Шумихин, Сергей Скороходов, Юрий Прушинский

Со всеми предложениями, идеями и комментариями обращайтесь к Александру Куприну (ru_classic at mail.ru). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/lg89/ward.html
Архивы выпусков находятся здесь: http://gazette.linux.ru.net/archive/