Перенос trueos zfs partition to smaller hard drive

Перенос trueos zfs partition to smaller hard drive

В основе лежит:

  1. https://blog.grem.de/sysadmin/Shrinking-ZFS-Pool-2014-05-29-21-00.html
  2. https://lists.freebsd.org/pipermail/freebsd-questions/2016-May/271651.html

Кроме того можно выполнить grep tank и найти файла sys_install.log, в котором залогированы команды при помощи которых выполнялось создание разделов.

С описанием различий:

  1. Создание таблицы разделов:
gpart destroy ada1
gpart create -s GPT ada1
gpart add -t efi -s 110M ada1
gpart add -t freebsd-zfs -s 30G -l newdisk ada1
gpart add -t freebsd-zfs -s 4G -l newdswap ada1
  1. Создаем новый zpool:
zpool create -o cachefile=/tmp/zpool.cache newpool gpt/newdisk
  1. Выполняем перенос копируем данные диска и данные efi раздела:
zfs snapshot -r tank@shrink
zfs send -vR tank@shrink | zfs receive -vFd newpool
zfs destroy -r tank@shrink
zfs destroy -r newpool@shrink
dd if=/dev/ada0p1 of=/dev/ada1p1 bs=1024
  1. ? Делаем загрузочным:

    zpool set bootfs=newpool/ROOT/initial newpool

  2. Экспортируем и повторный импорт кеша:

    cp /tmp/zpool.cache /tmp/newpool.cache
    zpool export newpool
    zpool import -N -c /tmp/newpool.cache -R /mnt newpool
    zfs set mountpoint=/ newpool/ROOT/initial
    cp /tmp/newpool.cache /mnt/boot/zfs/zpool.cache
    

    Обратите внимание на -N в третьей команде, без нее при перезагрузке у меня pool пропадал.

    Если 4 и 5 команды не сработают можно выполнить:

    mount -t zfs newpool/ROOT/initial /mnt
    cp /tmp/newpool.cache /mnt/boot/zfs/zpool.cache
    
  3. Правим точки монтирования почти как в оригинальной статье:

    1. Удалить все лишнее из /mnt/etc/fstab

    2. Проверить что установлен флаг zfs_enable="YES" в /mnt/etc/rc.conf

    3. Проверить что точки монтирования наследуются:

      zfs inherit mountpoint newpool/tmp zfs inherit mountpoint newpool/var zfs inherit mountpoint newpool/usr

      В устанавливаемой в TrueOS версии не установка выполняется на в root, в tank/ROOT/initial

  4. Настройка swap в /mnt/etc/fstab:

    заменяем старый swap на новый:

    /dev/gpt/newswap.eli none swap sw 0 0

  5. Изменяем загрузочную конфигурацию:

    Изменяем vfs.root.mountfrom в /mnt/boot/loader.conf на верный раздел:

    zfs_load="YES"
    vfs.root.mountfrom="zfs:newpool/ROOT/initial"
    

При этом после загрузки будет выполнена загрузка в начальный образ системы. После чего используя sysadm можно переключиться на другой образ.

увеличить раздел можно потом с использованием: gpart modify и zpool online -e pool device.