Переименование пула

Материал из OpenWiki
Перейти к: навигация, поиск

Переименование пула с данными выполняется достаточно тривиально:

# zpool import -h | tab
invalid option 'h'
usage:
        import [-d dir] [-D]
        import [-o mntopts] [-o property=value] ...
            [-d dir | -c cachefile] [-D] [-f] [-R root] -a
         import [-o mntopts] [-o property=value] ...
            [-d dir | -c cachefile] [-D] [-f] [-R root] <pool | id> [newpool]

Т.е. нужно просто экспортировать его и импортировать под другим именем. В случае, когда на этом пуле находится корневая файловая система, нужно выполнить ещё ряд действий. Для примера я переименую свой пул "amd64" в "z". Для этого я загружусь с USB flash и импортирую пул:

# zpool import
  pool: amd64
    id: 1287517875050811283
 state: ONLINE
status: The pool was last accessed by another system.
action: The pool can be imported using its name or numeric identifier and
       the '-f' flag.
   see: http://www.sun.com/msg/ZFS-8000-EY
config:

       amd64       ONLINE
         ad4p3     ONLINE
# zpool import -f -R /mnt amd64 z

После импорта я имею переименованный пул и смонтированные файловые системы в altroot=/mnt.

# zpool list
NAME   SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
z     59,5G  13,8G  45,7G    23%  ONLINE  /mnt
# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
z            13,8G  43,2G   520M  none
z/distfiles  1,54G  43,2G  1,54G  /mnt/usr/ports/distfiles
z/home       7,47G  43,2G  7,47G  /mnt/usr/home
z/local      1,30G  43,2G  1,30G  /mnt/usr/local
z/obj        1,77G  43,2G  1,77G  /mnt/usr/obj
z/ports       176M  43,2G   176M  /mnt/usr/ports
z/src         407M  43,2G   407M  /mnt/usr/src
z/tmp         226M  43,2G   226M  /mnt/tmp
z/usr         264M  43,2G   264M  /mnt/usr
z/var         161M  43,2G  1,10M  /mnt/var
z/var/crash  51,8M  43,2G  51,8M  /mnt/var/crash
z/var/db      107M  43,2G   107M  /mnt/var/db
z/var/tmp    1,28M  43,2G  1,28M  /mnt/var/tmp

Посмотрим на свойства пула:

# zpool get all z
NAME  PROPERTY       VALUE       SOURCE
z     size           59,5G       -
z     used           13,8G       -
z     available      45,7G       -
z     capacity       23%         -
z     altroot        /mnt        local
z     health         ONLINE      -
z     guid           1287517875050811283  -
z     version        13          default
z     bootfs         z           local
z     delegation     on          default
z     autoreplace    off         default
z     cachefile      none        local
z     failmode       wait        default
z     listsnapshots  off         default

Свойство cachefile у этого пула установлено в none. Это результат использования опции -R при импорте. Для успешной загрузки с этого пула нам необходимо обновить файл /boot/zfs/zpool.cache, который находится в корневой файловой системе пула - z. Но эта файловая система не смонтирована (у неё свойство mountpoint=none), поэтому нужно изменить её точку монтирования и обновить устаревший zpool.cache (в нём ещё содержится информация о старом пуле amd64).

# zfs umount -a
# zfs set mountpoint=/ z
# mount
/dev/da0s1a on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
z on /mnt (zfs, local, noatime)

Теперь обновим содержимое файла zpool.cache выполнив команду:

# zpool set cachefile=/mnt/boot/zfs/zpool.cache z

И в файле /mnt/boot/loader.conf нужно обновить строку vfs.root.mountfrom в соответствие с новым именем пула:

# echo 'vfs.root.mountfrom="zfs:z"' >> /mnt/boot/loader.conf

Теперь возвращаем значение свойства mountpoint корневой файловой системы обратно в none и перезагружаемся:

# zfs set mountpoint=none z