Имеем рабочий диск:
# 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
1) У меня был новый 2.5′ HDD 60gb, в системе отбился как ad1
Создаем GPT разметку:
# gpart create -s GPT ad1
ad1 created
2) создаем загрузочный партишн:
# gpart add -s 128k -t freebsd-boot -l boot ad1
ad1p1 added
3) 4Gb партишн для swap:
# gpart add -b 290 -s 4g -t freebsd-swap -l swap ad1
ad1p2 added
4) и партишн для системы:
# 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)
5) в boot записал gptzfsboot-загрузчик и protective MBR:
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad1
boot added ad1
6) создал пул zroot для системы на новом HDD:
# zpool create -m /mnt zroot /dev/gpt/data
7) делаем снимок старой системы:
# 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 -
8 ) передаем данные со старого пула в новый на этой же машине:
# 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-ой машины
9) теперь, либо выключаем 1-ый комп и меняем старый HDD на новый, либо
продолжаем на 2-ой машине.
Грузимся с LiveCD, затем
10) монтируем пул в /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
11) перемонтируем 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.