null

Сделай мне root dataset красиво

 

При установке 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.

Являюсь инженером компании Tune-IT. Проявляю интерес к:

  • вопросам производительности ВС
  • VoIP и Asterisk
  • железу SUN
  • Solaris