Возникла необходимость перенести 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
1) У меня был новый 2.5' HDD 60gb, в системе отбился как ad1
Создаем GPT разметку:
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:
7) делаем снимок старой системы:
(ключ -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.