При установке Solaris с использованием zfs в качестве корневой файловой системы, рутовый датасет по умолчанию получает очень неприглядное имя вида rpool/ROOT/s10s_u6wos_07b. При этом, по прошествии некоторого времени, административные душевные порывы часто резонируют с этой последовательностью символов. Причиной может служить, к примеру, желание возыметь одинаковые имена датасетов на всех рабочих серверах.
Переименовать root dataset довольно легко, хотя быстро найти готовый how-to в документации или интернетах не удается.
Данная операция потребует одну или несколько перезагрузок. В зависимости от того, используется ли LiveUpgrade Boot Environment, последовательность действий для переименования будет различна. Если BE присутствует, то дальнейшие манипуляции необходимо проводить только средствами LiveUpgrade. В противном случае менять имя придется вручную. Факт наличия lu BE проверяется командой lustatus.
Если в системе имеется активный LiveUpgrade BE, то смена имени датасета вручную повлечет за собой невозможность работы с BE и, вероятно, проблемы с загрузкой системы.
Переименование c использованием LiveUpgrade
Данный способ можно использовать даже если в системе нет активного BE.
В случае использования LiveUpgrade, при создании нового BE автоматически создается рутовый dataset с именем, совпадающим с именем BE.
Создаем новый BE
bash-3.00# lucreate -n newname
Checking GRUB menu...
Analyzing system configuration.
No name for current boot environment.
INFORMATION: The current boot environment is not named - assigning name <oldname>.
Current boot environment is named <oldname>.
Creating initial configuration for primary boot environment <oldname>.
The device </dev/dsk/c0d0s0> is not a root device for any boot environment; cannot get BE ID.
PBE configuration successful: PBE name <oldname> PBE Boot Device </dev/dsk/c0d0s0>.
Comparing source boot environment <oldname> file systems with the file
system(s) you specified for the new boot environment. Determining which
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
Creating configuration for boot environment <newname>.
Source boot environment is <oldname>.
Creating boot environment <newname>.
Cloning file systems from boot environment <oldname> to create boot environment <newname>.
Creating snapshot for <rpool/ROOT/oldname> on <rpool/ROOT/oldname@newname>.
Creating clone for <rpool/ROOT/oldname@newname> on <rpool/ROOT/newname>.
Setting canmount=noauto for </> in zone <global> on <rpool/ROOT/newname>.
Saving existing file </boot/grub/menu.lst> in top level dataset for BE <newname> as <mount-point>//boot/grub/menu.lst.prev.
File </boot/grub/menu.lst> propagation successful
Copied GRUB menu from PBE to ABE
No entry for BE <newname> in GRUB menu
Population of boot environment <newname> successful.
Creation of boot environment <newname> successful.
Просматриваем изменения:
bash-3.00# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 5.53G 2.29G 35.5K /rpool
rpool/ROOT 3.93G 2.29G 21K legacy
rpool/ROOT/newname 102K 2.29G 3.93G /
rpool/ROOT/oldname 3.93G 2.29G 3.93G /
rpool/ROOT/oldname@newname 70.5K - 3.93G -
rpool/dump 1.00G 2.29G 1.00G -
rpool/export 230K 2.29G 25K /export
rpool/export/home 206K 2.29G 206K /export/home
rpool/swap 610M 2.88G 16K -
Меняем активный BE:
bash-3.00# luactivate newname
Generating boot-sign, partition and slice information for PBE <oldname>
....
....
File </etc/lu/stage1.latest> deletion successful
File </etc/lu/stage2.latest> deletion successful
Activation of boot environment <newname> successful.
Перезагружаемся и проверяем настройки:
bash-3.00# shutdown -y -s0 -i6
bash-3.00# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 5.60G 2.22G 36K /rpool
rpool/ROOT 4.00G 2.22G 21K legacy
rpool/ROOT/newname 3.99G 2.22G 3.93G /
rpool/ROOT/newname@newname 63.0M - 3.93G -
rpool/ROOT/oldname 11.1M 2.22G 3.93G /
rpool/dump 1.00G 2.22G 1.00G -
rpool/export 230K 2.22G 25K /export
rpool/export/home 206K 2.22G 206K /export/home
rpool/swap 610M 2.81G 16K -
Удаляем старый BE:
bash-3.00# ludelete oldname
System has findroot enabled GRUB
....
....
Boot environment <oldname> deleted.
Смотрим изменения:
bash-3.00# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 5.53G 2.29G 36K /rpool
rpool/ROOT 3.93G 2.29G 21K legacy
rpool/ROOT/newname 3.93G 2.29G 3.93G /
rpool/dump 1.00G 2.29G 1.00G -
rpool/export 230K 2.29G 25K /export
rpool/export/home 206K 2.29G 206K /export/home
rpool/swap 610M 2.88G 16K -
Ручное переименование (LiveUpgrade BE должен отсутствовать)
В данном варианте необходимо будет загрузить Solaris с CD или по сети.
Проверяем, что luBE отсутствует:
bash-3.00# lustatus
ERROR: No boot environments are configured on this system
ERROR: cannot determine list of all boot environment names
После этого грузимся с install CD или по сети.
При загрузке с cd в single user shell будет предложено смонтировать найденный rpool в /a. Следует воспользоваться данной возможностью, дабы не импортировать пул вручную (если прошляпили, то воспользуйтесть командой, похожей на эту #zpool import -R /a rpool). Первое, что надо сделать, это размонтировать файловую систему:
#zfs umount -f rpool/ROOT/oldname
Переименовываем dataset:
#zfs rename rpool/ROOT/oldname rpool/ROOT/newname
Далее необходимо проверить, сменилось ли соответствующее свойство zfs:
# zpool get bootfs rpool
Если не сменилось, поправить вручную:
# zpool get bootfs rpool
NAME PROPERTY VALUE SOURCE
rpool bootfs rpool/ROOT/oldname local
# zpool set bootfs=rpool/ROOT/newname rpool
Подмонтируем dataset:
#zfs mount rpool/ROOT/newname
Меняем запись о рутовой файловой системе в vfstab, заменяя старое имя на новое:
#vi /a/etc/vfstab
После перезагрузки система поднимается с новым именем у root dataset.