В статье будет рассмотрен вопрос переноса зоны с одного сервера на другой. Причём перенос будет осуществлён с сервера с более старой версией на более новую, то есть затронется вопрос обновление зоны на новом сервере.
Тестовый стенд:
старый сервер: SunOS 5.10 Generic_141445-09 i86pc i386 i86pc
новый сервер: SunOS 5.10 Generic_147441-01 i86pc i386 i86pc
Перенос зоны будет состоять из таких этапов: отсоединение зоны, перенос файлов зоны, конфигурация зоны на новом сервере и присоединение (вместе с обновлением)
0) Введение
Посмотрим сначала версию зоны:
# zlogin test
[Connected to zone 'test' pts/3]
Last login: Mon Nov 21 12:45:21 on console
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
# uname -a
SunOS zonetest 5.10 Generic_141445-09 i86pc i386 i86pc
Примечание.
На старом сервере зона называлась test, на новом old_zone
Внимание!
Перед переносом зоны, рекомендуется проверить на возможность включить зону на новом сервере. Это можно сделать одной командой:
# zoneadm -z my-zone detach -n | ssh remotehost zoneadm attach -n -
Результаты проверки правильности выводятся на экран исходного узла, т.е. на stdout.
1) Отсоединение (detach)
Останавливаем зону и отсоединяем:
#zoneadm -z test halt
#zoneadm -z test detach
Теперь зона готова к переносу.
2) Перенос
Крайне советую делать перенос файлов зоны через перенос zfs. Почему так:
– быстрее, чем делать tar/gzin/gunzip/untar
– проще (запуск 1-ой команды вместо 3)
– без потери файлов
– можно делать наживую (без остановки зоны)
Примечание.
Лучше и правильнее это делать через архив, так как, например, если поменяется расположение домашних каталогов, то зону зааттачить нельзя будет.
И так, для переноса потребуется следующее:
– сделать снапшот:
#zfs snapshot rpool/log@backup
– копирование снапшота с последующим разворотом на zfs на новом сервере:
#zfs send -v rpool/log@backup | ssh skeletor@XX.XX.XX.XX "sudo /usr/sbin/zfs receive -Fd rpool"
При этом пользователь skeletor должен иметь право без пароля выполнять команды от root’a (это может быть либо sudo, либо pfexec)
Если же вы не можете использовать метод zfs, то используйте другой метод, описанный ниже
Перенос зоны – это фактически перенос всех файлов внутри каталога зоны. Заархивируем файлы зоны:
#tar cf /test | gzip > test.tar.gz
Теперь перенесём созданный архив на новый сервер. Это можно сделать с помощью scp. И распакуем зону в каталог /old_zone на новом сервере
# scp test.tar.bz2 1.1.1.1:/tmp/
#(new server) gzcat filename.tar.gz | tar -xpf - test.tar.bz2
3) Конфигурация зоны на новом сервере
Прежде всего создадим отдельную файловую систему:
#zfs create rpool/old_zone
#zfs set mountpoint=/old_zone rpool/old_zone
А теперь перейдём непосредственно к настройке самой зоны
# zonecfg -z old_zone
old_zone: No such zone configured
Use 'create' to begin configuring a new zone.
Для указания того, что наша зона содержит все необходимые файлы и это по сути не новая зона, при создании укажем параметр -a и полный путь к зоне
zonecfg:old_zone> create -a /old_zone/test
Посмотрим информацию о зоне:
zonecfg:old_zone> info
zonename: old_zone
zonepath: /old_zone/test
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
[max-shm-memory: 512]
net:
address: 22.22.22.133/24
physical: e1000g1
defrouter not specified
device
match: /dev/dsk/*
rctl:
name: zone.max-shm-memory
value: (priv=privileged,limit=512,action=deny)
Как видим, остались старые данные (параметры сети, примонтированные девайсы). Перенастроим сеть:
zonecfg:old_zone> remove net
zonecfg:old_zone> add net
zonecfg:old_zone:net> set physical=e1000g0
zonecfg:old_zone:net> set address=33.33.33.135
zonecfg:old_zone:net> end
zonecfg:old_zone> info
zonename: old_zone
zonepath: /old_zone/test
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
[max-shm-memory: 512]
net:
address: 33.33.33.135
physical: e1000g0
defrouter not specified
device
match: /dev/dsk/*
rctl:
name: zone.max-shm-memory
value: (priv=privileged,limit=512,action=deny)
zonecfg:old_zone> verify
zonecfg:old_zone> commit
zonecfg:old_zone> exit
4) Подсоединение зоны
Теперь всё готово для подключение новой зоны. Выполним такую команду (параметр -u указан для того, что бы зона автоматически обновилась до нужного релиза):
# zoneadm -z old_zone attach -u
Getting the list of files to remove
Removing 65 files
Remove 6 of 6 packages
Installing 7068 files
Add 218 of 218 packages
Updating editable files
The file within the zone contains a log of the zone update.
Примечание.
Параметр -F (для опции attach) позволяет принудительно выполнить операцию attach без проверки допустимости. Это удобно в ряде случаев, например в кластерной среде или при операциях резервного копирования и восстановления, однако важна правильная настройка системы для поддержки зоны. Неправильная настройка может впоследствии привести к непредвиденному поведению.
Смотрим состояния зон:
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
6 test running /test native shared
- old_zone installed /old_zone/test native shared
Запускаем зону old_zone
# zoneadm -z old_zone boot
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
6 test running /test native shared
10 old_zone running /old_zone/test native shared
# zlogin old_zone
[Connected to zone 'old_zone' pts/3]
Last login: Mon Nov 21 16:21:19 on console
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
# uname -a
SunOS zonetest 5.10 Generic_147441-01 i86pc i386 i86pc
Как видим, версия зоны изменилась.