Перенос FreeBSD сервера с ZFS root файловой системой на новый пул

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

Взял тут, немного поправил. Автору респект.

Один комментарий

Оставьте ответ

Ваш адрес email не будет опубликован.