среда, 3 декабря 2008 г.

Миграция UFS -> ZFS на Solaris 10 10/08 x86 - Часть 2

В новом номере нашего журнала мы приступаем к описанию процедуры посадки самолета. ;)

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

# lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
----------------- -------- ------ --------- ------ ----------
ufsBE yes no no no -
zfsBE yes yes yes no -

Оригинальный BE все еще нельзя удалять. Почему же?

Потому что в результате миграции на ZFS переброшены все слайсы UFS, кроме /export. Который на нашем сервере был смонтирован следующим образом (кусок содержимого /etc/vfstab):

/dev/dsk/c0d1s7 /dev/rdsk/c0d1s7 /export/home ufs 2 yes -

Нам нужно, таким образом, перенести содержимое точки монтирования /export на ZFS (на второй диск) и оторвать первый диск от zfsBE.

Как мы это сделаем?

Наиболее очевидным и напрашивающимся способом:

# mkdir /backup
# cd /export/home
# find . -print|cpio -pudm /backup
# cd /; umount /export/home
# cd /backup; mkdir -p /export/home; \
find . -print|cpio -pudm /export/home


Закомментируем ссылку на /export/home в файле /etc/vfstab. Содержимое /etc/vfstab:

#live-upgrade: updated boot environment
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
fd - /dev/fd fd - no -
/proc - /proc proc - no -
#live-upgrade::# /dev/dsk/c0d1s1 - - swap - no -
/dev/zvol/dsk/rpool/swap - - swap - no -
#live-upgrade::# /dev/dsk/c0d1s0 /dev/rdsk/c0d1s0 / ufs 1 no -
#live-upgrade::# /dev/dsk/c0d1s3 /dev/rdsk/c0d1s3 /usr ufs 1 no -
#live-upgrade::# /dev/dsk/c0d1s5 /dev/rdsk/c0d1s5 /var ufs 1 no -
#/dev/dsk/c0d1s7 /dev/rdsk/c0d1s7 /export/home ufs 2 yes -
#live-upgrade::# /dev/dsk/c0d1s4 /dev/rdsk/c0d1s4 /opt ufs 2 yes -
/devices - /devices devfs - no -
ctfs - /system/contract ctfs - no -
objfs - /system/object objfs - no -
swap - /tmp tmpfs - yes -
sharefs - /etc/dfs/sharetab sharefs - no -

Однако после перезапуска мы все еще не можем удалить первый диск:

# lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
----------------- -------- ------ --------- ------ ----------
ufsBE yes no no no -
zfsBE yes yes yes no -
Поиск в документации не дал способа удалить точку монтирования /export/home из zfsBE. Попробуем силовым способом и повторно активируем zfsBE:

# luactivate zfsBE

Не забыв снова поправить /rpool/boot/grub/menu.lst (активация его снова исковеркала до первоначального состояния), перезапускаемся и смотрим статус:

# lustatus
Boot Environment Is Active Active Can Copy
Name Complete Now On Reboot Delete Status
----------------- -------- ------ --------- ------ ----------
ufsBE yes no no yes -
zfsBE yes yes yes no -
Отлично, ufsBE освободилась, можно удалять ufsBE, отключать диск, реконфигурировать систему и очищать директории /dev и /devices от ссылок на первый диск.

Поздравляю, ваш самолет только что произвел посадку. ;)

PS. Немного неприятно, конечно, изобилие багов в такой, в общем-то, небезобидной процедуре. С другой стороны, понятно, что редко используемый функционал и будет содержать ошибки, поскольку их просто некому найти. :)