Возникла необходимость перенести ZFS систему на другой диск, теории начитался, но ни одного «боевого» решения не нашел.
За оказанную помощь при решении вопроса большой салам засылается taurus'у c iXBT.
Попытаюсь расписать подробнее, чтобы было меньше вопросов у народа.
Имеем рабочий диск:
# uname -a FreeBSD 8.2-RELEASE FreeBSD 8.2-RELEASE #0 r219081M: Wed Mar 2 08:29:52 CET 2011 root@www4:/usr/obj/usr/src/sys/GENERIC amd64
# gpart show => 34 976773101 ada0 GPT (466G) 34 128 1 freebsd-boot (64K) 162 8388608 2 freebsd-swap (4.0G) 8388770 104857600 3 freebsd-zfs (50G) 113246370 863526765 - free - (412G)
системный пул myboot находится на 3-ей партиции
# zfs list myboot 4.33G 44.6G 21K none myboot/root 4.33G 44.6G 3.93G / myboot/root/tmp 228K 44.6G 228K /tmp myboot/root/var 344M 44.6G 301M /var
У меня был новый 2.5' HDD 60gb, в системе отбился как ad1
Создаем GPT разметку:
# gpart create -s GPT ad1 ad1 created
создаем загрузочный партишн:
# gpart add -s 128k -t freebsd-boot -l boot ad1 ad1p1 added
4Gb партишн для swap:
# gpart add -b 290 -s 4g -t freebsd-swap -l swap ad1 ad1p2 added
и партишн для системы:
# gpart add -t freebsd-zfs -l data ad1 ad1p3 added
#
gpart show => 34 117208060 ad1 GPT (56G) 34 256 1 freebsd-boot (128K) 290 8388608 2 freebsd-swap (4.0G) 8388898 108815100 3 freebsd-zfs (52G)
в boot записал gptzfsboot-загрузчик и protective MBR:
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad1 boot added ad1
создал пул zroot для системы на новом HDD:
# zpool create -m /mnt zroot /dev/gpt/data
делаем снимок старой системы:
# zfs snapshot -r myboot@2013-01-14
(ключ -r — рекурсивный снимок всех дочерних FS)
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT myboot@2013-01-14 0 - 21K - myboot/root@2013-01-14 59,1M - 3,93G - myboot/root/tmp@2013-01-14 53K - 228K - myboot/root/var@2013-01-14 42,8M - 297M -
передаем данные со старого пула в новый на этой же машине:
# zfs send -vR myboot@2013-01-14 | zfs receive -vFd zroot
либо подключаем новый HDD на другой машине,
предварительно загрузившись с LiveCD и на старой системе выполняем:
# zfs send -vR myboot@2013-01-14 | ssh 192.168.x.x zfs receive -vFd zroot
где 192.168.x.x — IP 2-ой машины
теперь, либо выключаем 1-ый комп и меняем старый HDD на новый, либо
продолжаем на 2-ой машине.
Грузимся с LiveCD, затем
монтируем пул в /mnt и прописываем кэш файл:
# zpool import -o cachefile=/tmp/zpool.cache -o altroot=/mnt zroot # cp /tmp/zpool.cache /mnt/boot/zfs
# zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 4.33G 44.6G 21K none zroot/root 4.33G 44.6G 3.93G /mnt zroot/root/tmp 228K 44.6G 228K /mnt/tmp zroot/root/var 344M 44.6G 301M /mnt/var
# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf # echo 'zfs_load="YES"' >> /mnt/boot/loader.conf # echo 'vfs.root.mountfrom="zfs:/zroot/root"' >> /mnt/boot/loader.conf
либо проверяем их наличие
# cat /mnt/boot/loader.conf | more # cat /mnt/etc/rc.conf | more
перемонтируем FS
# zfs unmount -a # zpool set cachefile='' zroot # zfs set mountpoint=legacy zroot/root # zfs set mountpoint=/var zroot/root/var # zfs set mountpoint=/tmp zroot/root/tmp # zpool set bootfs=zroot/root zroot # reboot
Все, после ребута система нормально прогрузилась с нового HDD.