ZFS — просто замечательная и великолепная ФС.
Имеется у меня один сервер. Стоят там 2 винта старых, на них зеркало ZFS. Устанавливалось всё по умолчанию:
[root@mav ~]# zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 5.89G 28.8G 144K none zroot/ROOT 1.67G 28.8G 144K none zroot/ROOT/default 1.67G 28.8G 1.67G / zroot/tmp 368K 28.8G 368K /tmp zroot/usr 2.76G 28.8G 144K /usr zroot/usr/home 22.5M 28.8G 22.5M /usr/home zroot/usr/ports 2.25G 28.8G 2.25G /usr/ports zroot/usr/src 507M 28.8G 507M /usr/src zroot/var 1.45G 28.8G 1.45G /var zroot/var/crash 148K 28.8G 148K /var/crash zroot/var/log 672K 28.8G 672K /var/log zroot/var/mail 156K 28.8G 156K /var/mail zroot/var/tmp 160K 28.8G 160K /var/tmp
Попались мне под руку пара винтов побольше и еще один компьютер. Наслышан я о чудесах и простоте переноса ZFS и решил попробовать. Итак, задача. Перенести все то, что у меня уже работает на новый сервер только на mirror размер которого больше 🙂 Ну и так сказать своеобразный бекап.
Бекап это сомнительно. Потому как на исходном тоже стоит всё на «мирроре»
[root@mav ~]# zpool list -v NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT zroot 35.2G 5.89G 29.4G 16% 1.00x ONLINE - mirror 35.2G 5.89G 29.4G - gptid/a18e1cf4-9fbb-11e4-ab6d-000d61b48624 - - - - gptid/a31a31eb-9fbb-11e4-ab6d-000d61b48624 - - - -
Тем не менее — приступим. Грузимся с CD и работаем в Live-режиме.
На компьютере приёмнике я влепил 2 винта. Чтобы посмотреть как они определились в системе:
camcontrol devlist
У меня увиделись как ada0 и ada1.
Теперь нужно поднять sshd сервер на приёмнике:
mkdir /tmp/etc mount_unionfs /tmp/etc /etc vi /etc/ssh/sshd_config
В конфиге разрешаем root-у логиниться. Я ещё отключаю DNS проверку, чтобы побыстрее было немного.
PermitRootLogin yes UseDNS no
Задаём пароль для пользователя root:
passwd root
Указываем интерфейсу нужный IP адрес
ifconfig em0 add 172.16.50.249/24
запускаем sshd:
/etc/rc.d/sshd onestart
и пробуем зайти на пул. PuTTY рулит…
Далее создаём разделы…
gpart create -s gpt ada0 gpart create -s gpt ada1 gpart add -b 40 -s 512k -t freebsd-boot ada0 gpart add -b 40 -s 512k -t freebsd-boot ada1 gpart add -s 2g -t freebsd-swap ada0 gpart add -s 2g -t freebsd-swap ada1 gpart add -t freebsd-zfs ada0 gpart add -t freebsd-zfs ada1 [root@mav ~]# gpart show => 34 156299308 ada0 GPT (74G) 34 1024 1 freebsd-boot (512k) 1058 4194304 2 freebsd-swap (2.0G) 4195362 152103980 3 freebsd-zfs (72G) => 34 156301421 ada1 GPT (74G) 34 1024 1 freebsd-boot (512k) 1058 4194304 2 freebsd-swap (2.0G) 4195362 152106093 3 freebsd-zfs (72G)
Создаём пул:
zpool create -f zr mirror /dev/ada0p3 /dev/ada1p3
Пул готов к приёму данных.
Переходим на сервер-источник. Создаем рекурсивный снапшот, который и будем передавать:
zfs snapshot -r zroot@bkp1
Передаём его на сервер приёмник:
zfs send -vR zroot@bkp1 | ssh 172.16.50.249 -l root zfs recv -F zr
Ждём окончания передачи. У меня примерно 29 гб передавалось около 50-ти минут.
Переходим опять на сервер-приёмник.
mkdir /tmp/zr mount -t zfs zr/ROOT/default /tmp/zr gpart bootcode -b /tmp/zr/boot/pmbr -p /tmp/zr/boot/gptzfsboot -i 1 ada0 gpart bootcode -b /tmp/zr/boot/pmbr -p /tmp/zr/boot/gptzfsboot -i 1 ada1
Ввиду того, что с сервера-источника нам передалось всё, то поправим немного /etc/fstab. Дело в том, что своп на источнике подключен в fstab по меткам gpt. Я меток не давал, поэтому просто указал нужный раздел.
[root@mav ~]# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# ### /dev/gpt/swap0 none swap sw 0 0 ### /dev/gpt/swap1 none swap sw 0 0 /dev/ada0p2 none swap sw 0 0 /dev/ada1p2 none swap sw 0 0
[root@mav ~]# zfs umount -a
Скажем кто у нас bootfs и сделаем экспорт:
zpool set bootfs=zr/ROOT/default zr zpool export zr
shutdown -r now
На источнике можно удалить ненужный снапшот:
zfs destroy -r zroot@bkp1
Взял тут, немного поправил. Автору респект.
Статья -супер!!!
Давно искал такую……
Желаю удачи !!!