Перенести ZFS систему на другой диск
Возникла необходимость перенести 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.