Как клонировать диск с ZFS?
Добавлено: 2018-04-28 13:25:04
Можете немного конкретнее написать? Я бьюсь головой уже не первый день, с этим кэшем вообще скоро с ума сойду. Как посмотреть где находится пул при импортировании?
Если не знаешь что делать – делай шаг вперёд
https://forum.lissyara.su/
Код: Выделить всё
Восстанавливаем пул со всеми дочерними датасетами:
# gunzip -c -d /var/snapshots/snapshot/main-pool.snapshot.gz | zfs receive -vFd main-pool
Выгружаем пул:
# zpool export main-pool
Подгружаем pool:
# zpool import -f -o cachefile=/tmp/zpool.cache -o altroot=/mnt main-pool
Копируем:
# cp /tmp/zpool.cache /mnt/boot/zfs
Прописываем загрузку пула:
# zpool set bootfs=main-pool/ROOT/default main-pool
Выгружаем пул:
# zfs unmount -a
Указываем mountpoint для пула main-pool:
# zfs set mountpoint=/main-pool main-pool
Перегружаемся:
# reboot
Код: Выделить всё
zfs list
Код: Выделить всё
# ifconfig em0 add 172.20.10.11/28
# route add default 172.20.10.1
# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
# ee /etc/ssh/sshd_config
Строка "PermitRootLogin yes"
# passwd
# service sshd onestart
# gpart destroy -F da0
# gpart create -s GPT ada0
# gpart add -t freebsd-boot -s 512 ada0
# gpart add -t freebsd-swap -s 2G ada0
# gpart add -t freebsd-zfs /dev/ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# kldload /boot/kernel/opensolaris.ko
Код: Выделить всё
cannot mount '/main-pool': failed to create mountpoint
Код: Выделить всё
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
main-pool 49.8G 98.5K 49.7G - 0% 0% 1.00x ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
main-pool 76K 48.2G 19K /main-pool
Код: Выделить всё
# zpool create -m /mnt main-pool ada0
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
main-pool 49.8G 124K 49.7G - 0% 0% 1.00x ONLINE -
root@:~ # zfs list
NAME USED AVAIL REFER MOUNTPOINT
main-pool 85K 48.2G 19K /mnt
# mkdir /var/snapshots
# mount_smbfs -I 172.20.10.5 -E koi8-r:cp866 //guest@WINXP/share/ /var/snapshots
# gunzip -c -d /var/snapshots/main-pool.zfs.gz | zfs receive -vFd main-pool
# zpool export main-pool
Код: Выделить всё
# zpool import -f main-pool
Код: Выделить всё
[b]# zpool list
internal error: failed to initialize ZFS library
root@:~ # zfs list
internal error: failed to initialize ZFS library[/b]
Код: Выделить всё
# zpool import
pool: main-pool
id: 13663271659995344837
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
main-pool ONLINE
ada0 ONLINE
# zpool import -f -o cachefile=/tmp/zpool.cache -o altroot=/mnt main-pool
# cp /tmp/zpool.cache /mnt/boot/zfs
# zpool set bootfs=main-pool/ROOT/default main-pool
Код: Выделить всё
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
main-pool 966M 47.3G 19K /mnt/mnt
main-pool/ROOT 410M 47.3G 19K none
main-pool/ROOT/default 410M 47.3G 410M /mnt
main-pool/tmp 19K 47.3G 19K /mnt/tmp
main-pool/usr 555M 47.3G 19K /mnt/usr
main-pool/usr/home 19K 47.3G 19K /mnt/usr/home
main-pool/usr/ports 166M 47.3G 166M /mnt/usr/ports
main-pool/usr/src 389M 47.3G 389M /mnt/usr/src
main-pool/var 172K 47.3G 19K /mnt/var
main-pool/var/audit 19K 47.3G 19K /mnt/var/audit
main-pool/var/crash 19K 47.3G 19K /mnt/var/crash
main-pool/var/log 75K 47.3G 62K /mnt/var/log
main-pool/var/mail 21K 47.3G 21K /mnt/var/mail
main-pool/var/tmp 19K 47.3G 19K /mnt/var/tmp
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
main-pool 49.8G 966M 48.8G - 1% 1% 1.00x ONLINE /mnt
Код: Выделить всё
# zfs unmount -a
# zfs set mountpoint=/main-pool main-pool
# reboot
Код: Выделить всё
root@:~ # zpool import -f -o cachefile=/tmp/zpool.cache -o altroot=/mnt main-pool
root@:~ # cp /tmp/zpool.cache /mnt/boot/zfs
root@:~ # zpool set bootfs=main-pool/ROOT/default main-pool
root@:~ # zfs unmount -a
root@:~ # zfs list
NAME USED AVAIL REFER MOUNTPOINT
main-pool 966M 47.3G 19K /mnt/main-pool
main-pool/ROOT 410M 47.3G 19K none
main-pool/ROOT/default 410M 47.3G 410M /mnt
main-pool/tmp 19K 47.3G 19K /mnt/tmp
main-pool/usr 555M 47.3G 19K /mnt/usr
main-pool/usr/home 19K 47.3G 19K /mnt/usr/home
main-pool/usr/ports 166M 47.3G 166M /mnt/usr/ports
main-pool/usr/src 389M 47.3G 389M /mnt/usr/src
main-pool/var 172K 47.3G 19K /mnt/var
main-pool/var/audit 19K 47.3G 19K /mnt/var/audit
main-pool/var/crash 19K 47.3G 19K /mnt/var/crash
main-pool/var/log 75K 47.3G 62K /mnt/var/log
main-pool/var/mail 21K 47.3G 21K /mnt/var/mail
main-pool/var/tmp 19K 47.3G 19K /mnt/var/tmp
Код: Выделить всё
На боевом сервере:
# zfs snapshot -r main-pool@snap
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
main-pool@snap 0 - 96K -
main-pool/ROOT@snap 0 - 96K -
main-pool/ROOT/default@snap 0 - 455M -
main-pool/tmp@snap 0 - 96K -
main-pool/usr@snap 0 - 96K -
main-pool/usr/home@snap 0 - 96K -
main-pool/usr/ports@snap 0 - 634M -
main-pool/usr/src@snap 0 - 547M -
main-pool/var@snap 0 - 96K -
main-pool/var/audit@snap 0 - 96K -
main-pool/var/crash@snap 0 - 96K -
main-pool/var/log@snap 0 - 164K -
main-pool/var/mail@snap 0 - 100K -
main-pool/var/tmp@snap 0 - 96K -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
main-pool 1.60G 44.7G 96K /main-pool
main-pool/ROOT 455M 44.7G 96K none
main-pool/ROOT/default 455M 44.7G 455M /
main-pool/tmp 96K 44.7G 96K /tmp
main-pool/usr 1.15G 44.7G 96K /usr
main-pool/usr/home 96K 44.7G 96K /usr/home
main-pool/usr/ports 634M 44.7G 634M /usr/ports
main-pool/usr/src 547M 44.7G 547M /usr/src
main-pool/var 648K 44.7G 96K /var
main-pool/var/audit 96K 44.7G 96K /var/audit
main-pool/var/crash 96K 44.7G 96K /var/crash
main-pool/var/log 164K 44.7G 164K /var/log
main-pool/var/mail 100K 44.7G 100K /var/mail
main-pool/var/tmp 96K 44.7G 96K /var/tmp
На новом сервере:
# ifconfig em0 add 172.20.10.11/28
# route add default 172.20.10.1
# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
# ee /etc/ssh/sshd_config
Строка "PermitRootLogin yes"
# passwd
# service sshd onestart
# sysctl -a | grep disk
# gpart show
# gpart destroy -F ada0
# gpart create -s GPT ada0
# gpart add -t freebsd-boot -s 512 ada0
# gpart add -t freebsd-swap -s 2G ada0
# gpart add -t freebsd-zfs ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# zpool create -f -m /mnt main-pool /dev/ada0p3
На боевом сервере:
# zfs send -R main-pool@snap | ssh 172.20.10.11 zfs receive -vFd main-pool
На новом сервере:
# zpool set bootfs=main-pool/ROOT/default main-pool
# reboot
# zpool import -f -o altroot=/mnt main-pool
Проверяю пул после импорта:
# zfs list
# zpool list
# zpool get bootfs main-pool
Меняю точку монтирования:
# zfs set mountpoint=/main-pool main-pool
# reboot
Код: Выделить всё
На боевом сервере.
# mkdir /var/snapshots
# mount_smbfs -I 172.20.10.5 -E koi8-r:cp866 //guest@WINXP/share/ /var/snapshots
# zfs snapshot -r main-pool@snap
# df -h
Filesystem Size Used Avail Capacity Mounted on
main-pool/ROOT/default 45G 455M 45G 1% /
devfs 1.0K 1.0K 0B 100% /dev
main-pool 45G 96K 45G 0% /main-pool
main-pool/tmp 45G 96K 45G 0% /tmp
main-pool/usr/home 45G 96K 45G 0% /usr/home
main-pool/usr/ports 45G 634M 45G 1% /usr/ports
main-pool/usr/src 45G 547M 45G 1% /usr/src
main-pool/var/audit 45G 96K 45G 0% /var/audit
main-pool/var/crash 45G 96K 45G 0% /var/crash
main-pool/var/log 45G 164K 45G 0% /var/log
main-pool/var/mail 45G 100K 45G 0% /var/mail
main-pool/var/tmp 45G 96K 45G 0% /var/tmp
//GUEST@WINXP/SHARE 50G 2.9G 47G 6% /var/backups
# zfs send -Rv main-pool@snap | gzip -1 > /var/snapshots/main-pool.zfs.gz
На новом сервере:
# ifconfig em0 add 172.20.10.11/28
# route add default 172.20.10.1
# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
# ee /etc/ssh/sshd_config
Строка "PermitRootLogin yes"
# passwd
# service sshd onestart
# sysctl -a | grep disk
# gpart show
# gpart destroy -F ada0
# gpart create -s GPT ada0
# gpart add -t freebsd-boot -s 512 ada0
# gpart add -t freebsd-swap -s 2G ada0
# gpart add -t freebsd-zfs ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
# zpool create -f -m /mnt main-pool /dev/ada0p3
# mkdir /var/snapshots
# mount_smbfs -I 172.20.10.5 -E koi8-r:cp866 //guest@WINXP/share/ /var/snapshots
# gunzip -c -d /var/snapshots/main-pool.zfs.gz | zfs receive -vFd main-pool
# zpool set bootfs=main-pool/ROOT/default main-pool
# reboot
# zpool import -f -o altroot=/mnt main-pool
Проверяю пул после импорта:
# zfs list
# zpool list
# zpool get bootfs main-pool
Меняю точку монтирования:
# zfs set mountpoint=/main-pool main-pool
# reboot
Код: Выделить всё
root@global-card:~ # gpart show
=> 34 1887436733 da0 GPT (900G)
34 512 1 freebsd-boot (256K)
546 4194304 2 freebsd-swap (2.0G)
4194850 1883241917 3 freebsd-zfs (898G)
root@global-card:~ # swapon -a
swapon: /dev/ada0p2: No such file or directory
swapon: /dev/ada1p2: No such file or directory
root@global-card:~ # top -b 0
last pid: 32290; load averages: 0.22, 0.15, 0.23 up 3+22:46:05 15:48:02
43 processes: 1 running, 41 sleeping, 1 stopped
Mem: 471M Active, 174M Inact, 1347M Wired, 292K Cache, 7933M Free
ARC: 805M Total, 170M MFU, 356M MRU, 912K Anon, 10M Header, 268M Other
Swap:
К сожалению остановка сервисов не приемлема, поэтому снэпшоты я снимаю на горячую с боевого сервера.
я создал пул с нуля
Код: Выделить всё
# gpart create -s GPT da1
# gpart add -t freebsd-boot -s 512 da1
# gpart add -t freebsd-swap -s 4G da1
# gpart add -t freebsd-zfs da1
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
# zpool create main-pool /dev/da1p3
Код: Выделить всё
# zfs send -Rv zroot@full | zfs receive -vFd main-pool
Код: Выделить всё
zpool create
Да, передача пула main-pool из сервера A на сервер B и в любой момент на сервере B переключиться с zroot на main-pool.
Примонтирован только для того, чтобы в случае рестарта рестарта сервера B он был доступен и снэпшоты продолжали дальше по расписанию передаваться в main-pool.
Я так и делаю после первого получения снэпшота.
Код: Выделить всё
# zpool import -f -o altroot=/mnt zroot
# zpool import -f -o altroot=/mnt main-pool
# zpool set bootfs=main-pool/ROOT/default main-pool
# zfs set mountpoint=/main-pool main-pool
Неужели репликацию нельзя реализовать штатно в zfs?snorlov писал(а): ↑2019-01-28 10:11:35Если вы хотите иметь и то и другое, то самый простой способ, это сделать костылечек, т.е. скриптик, который монтировал бы main-pool в нужную точку при старте с zroot... Такое было сделано, правда на боевом, и там перед монтированием проверялось, если вообще нужный пул и диск...
loader.conf тут не поможет.4. вы без телодвижений хотите грузиться то с одного, то с другого пула, при этом и тот и другой пул должны быть видны.
Можно конечно в качестве эксперимента попробовать указать с какого пула грузиться в loader.conf,
Кстати, а чем простая перезагрузка отличается от перезагрузки с ковырянием в биосе...))))
сложно - это когда кто-то хочет БЫСТРО, не задумываясь об архитектуре, объемах и реализации.Хорошо, если не усложнять все на столько с двумя пулами, то как самое простое держать всегда в онлайн бэкап сервер для репликации и в случае чего с него быстро запуститься? Мне не важна супер сложная реализация.
Мне нужно из Сервера "A" точная копия всего пула zfs send/receive ssh на сервер "B" без использования gzip и архива.
Код: Выделить всё
~ /usr/ports/sysutils/beadm
~ make install clean
и тут все и встало. Я сделал все как было указано во всех пунктах. Вынул диск на который все переносил и поставил в новую машину, но то одно то другое и не выходит сделать 10 пункт. То кеша нет...То просто не монтируется. А если смонтирован уже, то в корень и все равно файла кеша нет
Код: Выделить всё
Разметка диска используя gpart
gpart create -s GPT da0
gpart add -a 4k -s 128k -t freebsd-boot da0
# ufs-ные разделы надо форматировать
gpart add -a 4k -s размер -t freebsd-ufs -l <метка> da0
newfs -U -L _label_ da0p2
# zfs-ные разделы форматировать не надо
gpart add -s размер -t freebsd-zfs da0
gpart add -s размер -t freebsd-swap da0
# присвоение метки
gpart modify -l <метка> -i <номер раздела> da0
#загрузчик GPT+UFS
grapt bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
#загрузчик GPT+ZFS
grapt bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0