четверг, 19 февраля 2009 г.

VxVM Создание диска Clone



Бывают случаи, когда необходимо загрузить систему с целью восстановления после сбоя и при этом иметь возможность управлять объектами Volume Manager. Имеется несколько способов добиться этого, наиболее универсальный - создание диска Clone.
Диск Clone содержит копию операционной системы Solaris, которая записана на диск, не включенный в конфигурацию Volume Manager.
Функция диска Clone - создать полнофункциоальную копию операционной системы, не зависящую от объектов Volume Manager, сохраняющую способность использовать утилиты и драйвера Volume Manager.
Размер диска Clone должен быть не менее корневого диска, другие физические параметры, например количество секторов в цилиндре, могут отличаться.

Скрипт выполняет следующие операции:

1. Инициализация диска clone;
2. Создание на диске clone нового зеркала загрузочного диска;
3. Удаление созданных половинок зеркала, принадлежащих диску clone;
4. Исправление ошибок на файловых системах оторванных половинок зеркал (fsck);
5. Создание subdisk DO_NOT_USE на всем диске clone для резервирования места;
6. Корректировка файлов /etc/system и /etc/vfstab диска clone для обеспечения возможности загрузки с данного диска.

Резервирование диска Clone
/etc/vx/bin/vxdisksetup -i SENA0_3
vxdg -g rootdg adddisk clone=SENA0_3
vxmake sd DO_NOT_USE dmname=clone dmoffset=0 len=`vxdg -g rootdg free clone|awk '$1 == "clone" {print $5}'` comment="Do not delete or relocate this subdisk."
Настройка скрипта
Настройка обычно выполняется один раз при установке скрипта на сервер. Изменение параметров настроенного скрипта может потребоваться в случае изменения структуры загрузочного диска.
При текущих настройках скрипт выполняет создание диска clone для загрузочного диска, содержащего слайсы: swap, root, var, ora817.
Далее перечисляются секции, которые могут потребовать изменения при настройке скрипта под конкретный сервер.

секция: number of slices
указываются порядковые номера слайсов
rootslice=0
swapslice=1
varslice=5
oraslice=6

секция: Mirroring data
выполняет создание зеркал для слайсов загрузочного диска.
Должны быть отзеркалены все слайсы загрузочного диска.
/etc/vx/bin/vxrootmir clone
sizeSWAP=`vxprint -v -q -g rootdg swapvol|awk '{print $5}'`
vxassist -g rootdg make _swap_vol_tmp `expr $sizeSWAP / 2`K clone
vxassist -g rootdg mirror var clone
vxassist -g rootdg mirror ora817 clone

секция: Creating the underlying partitions
выполняет отображение томов Volume Manager на слайсы
# swap
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-02 $swapslice 0x03 0x01
# /var
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-03 $varslice 0x07 0x00
# /ora817
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-04 $oraslice 0x08 0x00

секция fsck
выполняет исправление ошибок на файловых системах
fsck -y /dev/dsk/${TargetDisk}s${rootslice}
fsck -y /dev/dsk/${TargetDisk}s${varslice}
fsck -y /dev/dsk/${TargetDisk}s${oraslice}

секция: Tweak system config files
корректирует системные файлы /etc/system и /etc/vfstab.
строчки, относящиеся к /etc/system, править не требуется.
Корректировку /etc/vfstab нужно выполнять в соответствии со своим сервером.

## /etc/system
mv /tmp/_clone/root/etc/system /tmp/_clone/root/etc/system.pre_clone
sed -e '/vol_rootdev_is_volume/d' -e '/rootdev:/d' /tmp/_clone/root/etc/system.pre_clone > /tmp/_clone/root/etc/system
## /etc/vfstab
mv /tmp/_clone/root/etc/vfstab /tmp/_clone/root/etc/vfstab.pre_clone

cat > /tmp/_clone/root/etc/vfstab << EOVFSTAB

/dev/dsk/${TargetDisk}s${rootslice} /dev/rdsk/${TargetDisk}s${rootslice} / ufs 1 no -
/dev/dsk/${TargetDisk}s${swapslice} - - swap - no -
/dev/dsk/${TargetDisk}s${varslice} /dev/rdsk/${TargetDisk}s${varslice} /var ufs 1 no -
swap - /tmp tmpfs - no -
/proc - /proc proc - no -
/dev/vx/dsk/oradata/oracle /dev/vx/rdsk/oradata/oracle /oracle ufs 2 yes logging
/dev/vx/dsk/archive/arch /dev/vx/rdsk/archive/arch /archive ufs 2 yes logging
/dev/vx/dsk/archive/arch02 /dev/vx/rdsk/archive/arch02 /arch02 ufs 2 yes logging
EOVFSTAB
Остальные секции настройки не требуют.
Настройка запуска по расписанию
Скопировать скрипт в директорию /var/adm/clone, в той же директории будут находиться его логи.
Настроить запуск скрипта script_clone.sh раз в неделю, например в ночь с субботы на воскресенье.
Для этого в расписании пользователя root добавить пункт:
15 22 * * 6 /var/adm/clone/script_clone_ntc.sh >>/var/adm/clone/script_clone_ntc.log 2>&1

Скрипт для cоздания диска Clone
#!/bin/sh
##
## clone
##
## Takes on-line copy of the running OS to a spare "clone" disk.
## Data is copied via mirroring volumes by Volume Manager
##
## Central assumptions:
## 1) A disk in rootdg is called "clone" (case sensitive match)
## 2) No volumes are defined on "clone"
##
#
# Slices for copy to clone by this script: /, /var, /ora817
#
#
##### number of slices #####
rootslice=0
swapslice=1
varslice=5
oraslice=6
############################


echo `date '+%m/%d/%y %H:%M:%S'` --- Start create disk clone
TargetDiskEnclosure=`vxprint -g rootdg -F"%device_tag" clone`
if [ -z "$TargetDiskEnclosure" ] ; then
echo "WARNING: No disk found matching the name \"clone\"."
echo "Unable to continue."
exit 2
fi
vols=`vxprint -Q -g rootdg -e"pl_sd.sd_dm_name == \"clone\"" -F"%vol"`
if [ -n "$vols" ] ; then
echo "WARNING: Volumes found on \"clone\" disk."
echo "Unable to continue."
exit 2
fi

vxdisk list ${TargetDiskEnclosure}>/tmp/disk_clone_num$
TargetDisks=`nawk '$2 == "state=enabled" {print substr($1,1,length($1)-2)}' /tmp/disk_clone_num$`
TargetDisk=`echo "$TargetDisks" | while read DISK_LINE
do echo $DISK_LINE;break;done`

PATH=/usr/sbin:/usr/bin:$PATH
echo Name of clone disk: $TargetDiskEnclosure : $TargetDisk

### Removing sundisk DO_NOT_USE
vxedit rm DO_NOT_USE

### Initialize disk
vxdg rmdisk clone
/usr/lib/vxvm/bin/vxdisksetup -i $TargetDiskEnclosure
vxdg adddisk clone=$TargetDiskEnclosure

##### Mirroring data #####
date '+%m/%d/%y %H:%M:%S'
echo Mirroring root...
/etc/vx/bin/vxrootmir clone
date '+%m/%d/%y %H:%M:%S'
echo Creating swap...
sizeSWAP=`vxprint -v -q -g rootdg swapvol|awk '{print $5}'`
vxassist -g rootdg make _swap_vol_tmp `expr $sizeSWAP / 2`K clone
date '+%m/%d/%y %H:%M:%S'
echo Mirroring /var...
vxassist -g rootdg mirror var clone
date '+%m/%d/%y %H:%M:%S'
echo Mirroring /ora817...
vxassist -g rootdg mirror ora817 clone
date '+%m/%d/%y %H:%M:%S'

##### Creating the underlying partitions #####
# swap
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-02 $swapslice 0x03 0x01
# /var
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-03 $varslice 0x07 0x00
# /ora817
/usr/lib/vxvm/bin/vxmksdpart -g rootdg clone-04 $oraslice 0x08 0x00

##### Deleting clone slices #####
vxplex -o rm dis rootvol-03 var-03 ora817-03
vxplex -f -o rm dis _swap_vol_tmp-01
vxedit -f rm _swap_vol_tmp

### fsck
fsck -y /dev/dsk/${TargetDisk}s${rootslice}
fsck -y /dev/dsk/${TargetDisk}s${varslice}
fsck -y /dev/dsk/${TargetDisk}s${oraslice}

### Mount on tmp mount point
mkdir -p /tmp/_clone/root
mount /dev/dsk/${TargetDisk}s${rootslice} /tmp/_clone/root

##### Tweak system config files #####
## /etc/system
mv /tmp/_clone/root/etc/system /tmp/_clone/root/etc/system.pre_clone
sed -e '/vol_rootdev_is_volume/d' -e '/rootdev:/d' /tmp/_clone/root/etc/system.pre_clone > /tmp/_clone/root/etc/system
## /etc/vfstab
mv /tmp/_clone/root/etc/vfstab /tmp/_clone/root/etc/vfstab.pre_clone
cat > /tmp/_clone/root/etc/vfstab >>EOVFSTAB
/dev/dsk/${TargetDisk}s${rootslice} /dev/rdsk/${TargetDisk}s${rootslice} / ufs 1 no -
/dev/dsk/${TargetDisk}s${swapslice} - - swap - no -
/dev/dsk/${TargetDisk}s${varslice} /dev/rdsk/${TargetDisk}s${varslice} /var ufs 1 no -
swap - /tmp tmpfs - no -
/proc - /proc proc - no -
/dev/dsk/${TargetDisk}s${oraslice} /dev/rdsk/${TargetDisk}s${oraslice} /ora817 ufs 1 yes -
/dev/vx/dsk/intdg/arch01 /dev/vx/rdsk/intdg/arch01 /ora817 ufs 1 yes -
EOVFSTAB
### umount tmp space
umount /tmp/_clone/root

### Reserve clone disk by creating subdisk DO_NOT_USE
vxmake sd DO_NOT_USE dmname=clone dmoffset=0 len=`vxdg -g rootdg free clone|awk '$1 == "clone" {print $5}'` comment="Do not delete or relocate this subdisk."

echo `date '+%m/%d/%y %H:%M:%S'` --- Create disk clone complete
exit 0

Комментариев нет:

Отправить комментарий