Восстановление системы с ZFS
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
Здравствуйте!
У кого-нибудь получилось произвести процедуру резервного восстановления с системой zfs по инструкции указанной на сайте Лиссяры?
Тут возникла у меня необходимость сделать это. Переменные в скрипте поменял на свои, но восстановление не проходит. Скрипт спотыкается на пункте "# Работаем над обеспечением геометрии с 4K" zpool create. Пишет, что не возможно создать. И загрузка с фтп не начинается (фтп доступен, т.к. gptzfsboot и pmbr скачиваются нормально). Щас скрин ошибок выложить не могу, сделаю завтра его.
Но может быть что-то изменилось в скрипте, что не поменяли на сайте?
Бэкап прошел успешно, необходимые файлы лежат в папке на фтп.
Прошу помочь разобраться! Нужно сделать восстановление. Случайно удалилась сама папка /usr/local/etc
Релиз 10.3 amd64
У кого-нибудь получилось произвести процедуру резервного восстановления с системой zfs по инструкции указанной на сайте Лиссяры?
Тут возникла у меня необходимость сделать это. Переменные в скрипте поменял на свои, но восстановление не проходит. Скрипт спотыкается на пункте "# Работаем над обеспечением геометрии с 4K" zpool create. Пишет, что не возможно создать. И загрузка с фтп не начинается (фтп доступен, т.к. gptzfsboot и pmbr скачиваются нормально). Щас скрин ошибок выложить не могу, сделаю завтра его.
Но может быть что-то изменилось в скрипте, что не поменяли на сайте?
Бэкап прошел успешно, необходимые файлы лежат в папке на фтп.
Прошу помочь разобраться! Нужно сделать восстановление. Случайно удалилась сама папка /usr/local/etc
Релиз 10.3 amd64
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- подполковник
- Сообщения: 3927
- Зарегистрирован: 2008-09-04 11:51:25
- Откуда: Санкт-Петербург
Восстановление системы с ZFS
Приведите ссылку на лиса, а то скриптов множество имеется. Кстати, а что стояло то? если 10.2 то ее и надо мучать
версии zfs могут быть разные...
версии zfs могут быть разные...
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
http://www.lissyara.su/?id=2224#null
Стоит 10.3 (бэкап свежий).
А возможно ли на свеже-установленную систему и с созданым zfs пулом (через bsdinstall), просто залить этот файл бэкапа для восстановления? Железо не менялось.
Стоит 10.3 (бэкап свежий).
А возможно ли на свеже-установленную систему и с созданым zfs пулом (через bsdinstall), просто залить этот файл бэкапа для восстановления? Железо не менялось.
-
- подполковник
- Сообщения: 3927
- Зарегистрирован: 2008-09-04 11:51:25
- Откуда: Санкт-Петербург
Восстановление системы с ZFS
Наверное ругается на тему, что ваш zpool уже имеется, в скрипте восстановления в начале до применения gpart добавьте строчку
т.е. затерите всю информацию zfs на диске
Код: Выделить всё
dd if=/dev/zero of=/dev/ada0 bs=1M count=2048
-
- рядовой
- Сообщения: 38
- Зарегистрирован: 2008-06-07 17:50:21
- Контактная информация:
Восстановление системы с ZFS
После затирания информации нужно еще раз перезагрузить ПК (так как ошибка все равно будет выскакивать).
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
В общем все затер - перезагрузился.
Запустил скрипт. Восстановление спотыкается в нескольких местах.
Полный вывод лога (сори внутри кода ошибки выделить цветом не получается):
Они тут=>
cannot mount '/mnt/tank': failed to create mountpoint
cp: /tmp/tank/tmp/root/boot/zfs/zpool.cache: No such file or directory
Ну и как следствие этих ошибок, при рестарте получаю:
Выбор boot:/tank/ROOT/default вешает консоль
Запустил скрипт. Восстановление спотыкается в нескольких местах.
Полный вывод лога (сори внутри кода ошибки выделить цветом не получается):
Они тут=>
cannot mount '/mnt/tank': failed to create mountpoint
cp: /tmp/tank/tmp/root/boot/zfs/zpool.cache: No such file or directory
Код: Выделить всё
# sh /tmp/bsdrestor.sh
script: Create GPT, add partitions...
ada1 created
script: add freebsd-boot partition boot0
ada1p1 added
script: add freebsd-swap partition swap0
ada1p2 added
script: blk_begin=34
script: blk_end=234441581
script: blk_swop_begin=2048
script: blk_swop_end=8388608
script: blk_zfs_begin=8390656
script: blk_long=226050952
script: add freebsd-zfs partition data0, long is 226050952 blocks
ada1p3 added
script: GPT on ada1 created, partitions added.
add net default: gateway 192.168.22.1
script: Download backup boot records from ftp start....
Connected to 192.168.22.1.
220 Welcome to ASUS RT-AC68U FTP service.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
250 Directory successfully changed.
250 Directory successfully changed.
local: /tmp/gptzfsboot remote: fb103.tank.2016.05.08_2213.gptzfsboot
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for /tmp/mnt/FreeAgent_Drive/FreeBSD/Fre
eBSD_Backup_08.05.2016/fb103.tank.2016.05.08_2213.gptzfsboot (42143 bytes).
100% |***********************************| 42143 12.55 MiB/s 00:00 ETA
226 File send OK.
42143 bytes received in 00:00 (11.29 MiB/s)
221 Goodbye.
Connected to 192.168.22.1.
220 Welcome to ASUS RT-AC68U FTP service.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
250 Directory successfully changed.
250 Directory successfully changed.
local: /tmp/pmbr remote: fb103.tank.2016.05.08_2213.pmbr
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for /tmp/mnt/FreeAgent_Drive/FreeBSD/Fre
eBSD_Backup_08.05.2016/fb103.tank.2016.05.08_2213.pmbr (512 bytes).
100% |***********************************| 512 15.75 MiB/s 00:00 ETA
226 File send OK.
512 bytes received in 00:00 (910.74 KiB/s)
221 Goodbye.
bootcode written to ada1
=> 34 234441581 ada1 GPT (112G)
34 6 - free - (3.0K)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 8388608 2 freebsd-swap (4.0G)
8390656 226050952 3 freebsd-zfs (108G)
234441608 7 - free - (3.5K)
=> 34 234441581 ada1 GPT (112G)
34 6 - free - (3.0K)
40 1024 1 boot0 (512K)
1064 984 - free - (492K)
2048 8388608 2 swap0 (4.0G)
8390656 226050952 3 data0 (108G)
234441608 7 - free - (3.5K)
script: Create ZFS pool...
GEOM_NOP: Device gpt/data0.nop created.
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
cannot mount '/mnt/tank': failed to create mountpoint
GEOM_NOP: Device gpt/data0.nop removed.
script: Create filesystem...
script: Receive system from ftp start....
receiving full stream of tank@2016.05.08_2213 into tank@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/ROOT@2016.05.08_2213 into tank/ROOT@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/ROOT/default@2016.05.08_2213 into tank/ROOT/default@2016.05.08_2213
received 5.59GB stream in 72 seconds (79.5MB/sec)
receiving full stream of tank/usr@2016.05.08_2213 into tank/usr@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/usr/src@2016.05.08_2213 into tank/usr/src@2016.05.08_2213
received 968MB stream in 7 seconds (138MB/sec)
receiving full stream of tank/usr/home@2016.05.08_2213 into tank/usr/home@2016.05.08_2213
received 732MB stream in 20 seconds (36.6MB/sec)
receiving full stream of tank/usr/ports@2016.05.08_2213 into tank/usr/ports@2016.05.08_2213
received 2.51GB stream in 77 seconds (33.3MB/sec)
receiving full stream of tank/var@2016.05.08_2213 into tank/var@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/var/tmp@2016.05.08_2213 into tank/var/tmp@2016.05.08_2213
received 43.0KB stream in 1 seconds (43.0KB/sec)
receiving full stream of tank/var/mail@2016.05.08_2213 into tank/var/mail@2016.05.08_2213
received 53.6KB stream in 1 seconds (53.6KB/sec)
receiving full stream of tank/var/log@2016.05.08_2213 into tank/var/log@2016.05.08_2213
received 24.7MB stream in 1 seconds (24.7MB/sec)
receiving full stream of tank/var/audit@2016.05.08_2213 into tank/var/audit@2016.05.08_2213
received 44.2KB stream in 1 seconds (44.2KB/sec)
receiving full stream of tank/var/crash@2016.05.08_2213 into tank/var/crash@2016.05.08_2213
received 43.0KB stream in 1 seconds (43.0KB/sec)
receiving full stream of tank/tmp@2016.05.08_2213 into tank/tmp@2016.05.08_2213
received 398KB stream in 1 seconds (398KB/sec)
script: Receive system from ftp finish
script: Copy zpool cache...
cp: /tmp/tank/tmp/root/boot/zfs/zpool.cache: No such file or directory
script: done!
enter please command 'reboot'
Код: Выделить всё
/
Can't find /boot/zfsloader
FreeBSD/x86 boot
Default: tank:/boot/kernel/kernel
boot:
-
Can't find /boot/kernel/kernel
-
- подполковник
- Сообщения: 3927
- Зарегистрирован: 2008-09-04 11:51:25
- Откуда: Санкт-Петербург
Восстановление системы с ZFS
Попробуй вместо
записать это
ты ведь стартуешь с сд или флешки, которая только на чтение...
Код: Выделить всё
zpool create -f -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache ${tank} \
/dev/gpt/data0.nop
Код: Выделить всё
zpool create -f -o altroot=/tmp -o cachefile=/var/tmp/zpool.cache ${tank} \
/dev/gpt/data0.nop
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
Первая ошибка ушла. С фтп все затянулось.
Выдало вторую.. Прописал оставшееся руками, все команды без ошибок..
Но.. результат после рестарта тотже. boot не находит, указываю принудительно tank/ROOT/default не стартует, запрашивает снова путь.
Выдало вторую.. Прописал оставшееся руками, все команды без ошибок..
Но.. результат после рестарта тотже. boot не находит, указываю принудительно tank/ROOT/default не стартует, запрашивает снова путь.
-
- сержант
- Сообщения: 254
- Зарегистрирован: 2013-08-10 14:28:38
- Контактная информация:
Восстановление системы с ZFS
По теме: альтрут вообще не нужен, забудьте про него, и будет вам щасстье.
А вообще - автор статьи по ссылке... я даже не знаю, что он курил. А все туда же - выкладывает непроверенные скрипты, зная,что их будут не глядя копипастить хомячки.
Читайте официальную документацию, и будет вам, опять-таки, щасстье.
А если хочется автоматизации, пользуйтесь хотя бы проверенными инструментами - например тынц и тынц.
А вообще - автор статьи по ссылке... я даже не знаю, что он курил. А все туда же - выкладывает непроверенные скрипты, зная,что их будут не глядя копипастить хомячки.
Читайте официальную документацию, и будет вам, опять-таки, щасстье.
А если хочется автоматизации, пользуйтесь хотя бы проверенными инструментами - например тынц и тынц.
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
По поводу ваших ссылок => ушел на подробное изучение!
По поводу курилки автора статьи => по поискову гугл она всплывает на чуть ли не первой (на первой странице точно)! Ведешься на то, что бэкап проходит как по рельсам.. ну а как часто приходится делать восстановление? В моем случае - это первое.. после первой неудачи много читал по zfs в справке оракла, где по описанию очень легко и просто имея snapshot системы А по факту Нууу очень сложно для понимания новичку восстанавливать из файла img.gz (как и видно по вопросу в соответствующем разделе форума).
По поводу копипаста хомячками => хоть я и новичок, но не делаю ctrC+ctrV. Я этот скрипт старался на элементарные разобрать прежде чем использовать, но согласен что не все в нем понял. Читал также используемые статьи... а вот как раз в части создания zfs-пула и залива на него бэкап образа в статье оочееень скудно описано...
Отправлено спустя 1 минуту 53 секунды:
Спасибо за ваш комментарий!
По поводу курилки автора статьи => по поискову гугл она всплывает на чуть ли не первой (на первой странице точно)! Ведешься на то, что бэкап проходит как по рельсам.. ну а как часто приходится делать восстановление? В моем случае - это первое.. после первой неудачи много читал по zfs в справке оракла, где по описанию очень легко и просто имея snapshot системы А по факту Нууу очень сложно для понимания новичку восстанавливать из файла img.gz (как и видно по вопросу в соответствующем разделе форума).
По поводу копипаста хомячками => хоть я и новичок, но не делаю ctrC+ctrV. Я этот скрипт старался на элементарные разобрать прежде чем использовать, но согласен что не все в нем понял. Читал также используемые статьи... а вот как раз в части создания zfs-пула и залива на него бэкап образа в статье оочееень скудно описано...
Отправлено спустя 1 минуту 53 секунды:
Спасибо за ваш комментарий!
-
- подполковник
- Сообщения: 3927
- Зарегистрирован: 2008-09-04 11:51:25
- Откуда: Санкт-Петербург
Восстановление системы с ZFS
Я лично пользуюсь этой ссылкой для системы https://www.dan.me.uk/blog/2012/08/05/f ... using-zfs/, правда там носитель жесткий диск, а не ftp...
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
У кого есть конструктивные предложения по моему случаю?
Отправлено спустя 33 секунды:
Желательно: что куда зачем
Отправлено спустя 33 секунды:
Желательно: что куда зачем
-
- сержант
- Сообщения: 254
- Зарегистрирован: 2013-08-10 14:28:38
- Контактная информация:
Восстановление системы с ZFS
1. Грузитесь с флешки и заходите в режим командной строки (Fixit, кажется)
2. Выводите список сетевых интерфейсов:
3. На нужном интерфейсе настраиваете сеть. Например, так (данные подставьте свои):
4. Загружаете модули поддержки zfs (в 10-ке, возможно, уже не надо, в этом случае система ругнется, что модули уже загружены):
5. Размечаете gpt (имена подставьте свои):
6. Проверяете, доступны ли какие-либо пулы zfs, и, если доступны, удаляете их (имена подставьте свои):
7. Скачиваете файл бэкапа, где бы он у вас ни находился (ssh, ftp, http).
8. Создаете новый пул, заливаете на него бэкап, копируете кэш (имена подставьте свои):
Если снэпшот сжат gzip'ом, можно заливать так:
9.
2. Выводите список сетевых интерфейсов:
Код: Выделить всё
ifconfig
Код: Выделить всё
ifconfig rl0 192.168.0.10 netmask 255.255.255.0
route add default 192.168.0.1
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
Код: Выделить всё
kldload opensolaris.ko
kldload zfs.ko
Код: Выделить всё
gpart destroy -F ada0
gpart create -s GPT ada0
gpart add -t freebsd-boot -l boot0 -s 128k ada0
gpart add -t freebsd-swap -l swap -s 2G ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Код: Выделить всё
zpool list
zpool destroy -f zroot
8. Создаете новый пул, заливаете на него бэкап, копируете кэш (имена подставьте свои):
Код: Выделить всё
zpool create zroot /dev/gpt/disk0
zfs receive -vdF zroot < snapshot_file
zfs set mountpoint=/mnt zroot
zpool export zroot
zpool import zroot
cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache
Код: Выделить всё
gunzip snapshot_file.gz | zfs receive -vdF zroot
Код: Выделить всё
zfs unmount -a
zfs set mountpoint=legacy zroot
init 6
-
- рядовой
- Сообщения: 38
- Зарегистрирован: 2008-06-07 17:50:21
- Контактная информация:
Восстановление системы с ZFS
Я сам пользуюсь скриптом который по ссылке на сайте Лиса з небольшими переделками (переделки заключаются в разбиение на партиции при бекапе так и востановлении).
1. Ошибка она совсем не критична. Если посмотреть по скрипту то дальше создается папка с названием пула и в него как раз импортируется пул. Лично у меня все работает.
2. lazhu, ошибка загрузки все равно будет так как надо установить корневую файловую систему. У меня zfs set mountpoint=/ ${tank}
судя по логам
1. Ошибка
Код: Выделить всё
cannot mount '/mnt/tank': failed to create mountpoint
2. lazhu, ошибка загрузки все равно будет так как надо установить корневую файловую систему. У меня zfs set mountpoint=/ ${tank}
судя по логам
или
Я не селен в установке по умолчаниюFreeBSD у меня все делает скрипт. Могу ошибаться так что извиняйте
-
- проходил мимо
- Сообщения: 7
- Зарегистрирован: 2016-05-11 21:58:30
Восстановление системы с ZFS
dimidrol80, если не трудно, выложите свой скрипт восствновления. Хочу сравнить.
-
- сержант
- Сообщения: 254
- Зарегистрирован: 2013-08-10 14:28:38
- Контактная информация:
Восстановление системы с ZFS
dimidrol80, не надо ничего монтировать в /
Загружаться не будет только, если забыли кэш положить в /boot/zfs.
Код: Выделить всё
~ zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 73.5G 155G 1.15G legacy
zroot/tmp 316K 155G 316K /tmp
zroot/usr 70.2G 155G 3.87G /usr
zroot/usr/home 64.8G 155G 64.8G /usr/home
zroot/usr/ports 1.53G 155G 262M /usr/ports
zroot/usr/ports/distfiles 1.21G 155G 1.21G /usr/ports/distfiles
zroot/usr/ports/packages 70.5M 155G 70.5M /usr/ports/packages
zroot/var 2.16G 155G 199M /var
zroot/var/crash 31.5K 155G 31.5K /var/crash
zroot/var/db 1.95G 155G 1.94G /var/db
zroot/var/db/pkg 11.1M 155G 11.1M /var/db/pkg
zroot/var/empty 31K 155G 31K /var/empty
zroot/var/log 13.3M 155G 13.3M /var/log
zroot/var/mail 488K 155G 488K /var/mail
zroot/var/run 76.5K 155G 76.5K /var/run
zroot/var/tmp 33.5K 155G 33.5K /var/tmp
-
- рядовой
- Сообщения: 38
- Зарегистрирован: 2008-06-07 17:50:21
- Контактная информация:
Восстановление системы с ZFS
vintbsd,
Ок
Скрипт востановления
Только внимание этот скрипт тебе не подойдет потому что у тебя вся система в одном файле у меня разбито по партициям
Для справки скрипт резервного копирования
Отправлено спустя 20 минут 2 секунды:
lazhu,
Я сужу по логам которые выкладывал vintbsd,
Зделать вывод команды
После того как вручную скопировали выполнить команды которые остались.
lazhu,
Я сужу по логам которые выкладывал vintbsd,
Зделать вывод команды
После того как вручную скопировали выполнить команды которые остались.
Ок
Скрипт востановления
Код: Выделить всё
#!/bin/sh
# Переменные
# Перед выполнением проверить и отредактировать!
# Имя диска (устройства)
dev=ada0
# Имя создаваемого пула
tank="tank0"
# Имя востанавливаемого Сервера (uname -n)
Uname="exemple.com"
# имя сетевого интерфейса
if_lan=em0
# адрес хоста на момент восстановления
ip_host="192.168.0.116"
# адрес шлюза
ip_gw="192.168.0.1"
# адрес ftp сервера c файлами восстановления
ip_ftp="192.168.0.11"
# порт ftp сервера c файлами восстановления
port_ftp="21"
# логин и пароль ftp сервера c файлами восстановления
usr="backup"
pass="mysuperpass"
awk="/usr/bin/awk"
# Строка даты и времени резервной копии
backup_data="25-04-2016"
# ================= Расcчитываемыt занчения, для, справки ======================
# имя файла-архива с запакованным пулом
#backup_f="$Uname.tank0.${backup_data}.img.gz"
# имя резервных копий файлов загрузчиков
backup_gptzfsboot="$Uname.${tank}.${backup_data}.gptzfsboot"
backup_pmbr="$Uname.${tank}.${backup_data}.pmbr"
backup_snapshot="$Uname.snapshot.${backup_data}.txt"
### =============== Разбивка диска, для, справки ===============================
# =========== Тело скрипта ===================================================
echo "script: Create GPT, add partitions..."
gpart create -s gpt $dev
echo "script: add freebsd-boot partition boot0"
gpart add -b 34 -s 64k -t freebsd-boot -l boot0 ${dev}
echo "script: add freebsd-swap partition swap0"
gpart add -s 4G -t freebsd-swap -l swap0 ${dev}
echo "script: add freebsd-zfs partition disk0"
gpart add -t freebsd-zfs -l disk0 ${dev}
echo " "
echo "script: GPT on $dev created, partitions added."
echo " "
sleep 5
# Настраиваем сеть
ifconfig ${if_lan} inet ${ip_host} netmask 255.255.255.0
# Пропишем шлюз по умолчанию команда route:
route add default ${ip_gw}
#Обязательно задержка, а то сразу сеть не поднимается!
sleep 10
#Загружаем с FTP серевера резервные копии загрузчиков
# /boot/pmbr и /boot/gptzfsboot
echo "script: Download backup boot records from ftp start...."
ftp -i -A -P ${port_ftp} -o /tmp/gptzfsboot ftp://${usr}:${pass}@${ip_ftp}/${backup_gptzfsboot}
ftp -i -A -P ${port_ftp} -o /tmp/pmbr ftp://${usr}:${pass}@${ip_ftp}/${backup_pmbr}
ftp -i -A -P ${port_ftp} -o /tmp/snapshot ftp://${usr}:${pass}@${ip_ftp}/${backup_snapshot}
#Имя Пула который востанавливаем
Snapshot=`cat /tmp/snapshot | awk -F@ 'FNR==1 {print $1}'`
# Записываем загрузчик в загрузочную область.
# Корректно делать резервную копию /boot/pmbr и /boot/gptzfsboot
# с последующим восстановлением из нее, а не а не с того,
# что подвернется на загрузочной флешке.
# Это нужно, чтобы загрузчик совпадал с загрузчиком исходной системы
# Поэтому вместо
#gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ${dev}
# пишем:
gpart bootcode -b /tmp/pmbr -p /tmp/gptzfsboot -i 1 ${dev}
gpart show ${dev}
sleep 3
gpart show -l ${dev}
sleep 5
# Create ZFS pool
echo "script: Create ZFS pool..."
# Работаем над обеспечением геометрии с 4K
gnop create -S 4096 /dev/gpt/disk0
zpool create -f -o altroot=/mnt -o version=28 -o cachefile=/var/tmp/zpool.cache ${tank} /dev/gpt/disk0.nop
zpool export ${tank}
gnop destroy /dev/gpt/disk0.nop
mkdir /tmp/${tank}
zpool import -o altroot=/tmp/${tank} -o cachefile=/var/tmp/zpool.cache ${tank}
# указываем, что пул загрузочный
zpool set bootfs=${tank} ${tank}
sleep 3
# Create ZFS-filesystem
echo "script: Create filesystem..."
# ну зачем же? для быстродействия синтетического теста? За уши?
zfs set atime=off ${tank}
# Включаем контрольные суммы посерьезнее.
zfs set checksum=fletcher4 $tank
########################
# А так получаем нужный нам поток:
# ftp -i -A -P 8022 -o - ftp://proxy3:proxy3@192.168.16.19/$Uname.tank.2012.11.01_1735.img.gz
# С распаковкой и передачей на вход zfs:
# ftp -i -A -P 8022 -o - ftp://proxy3:proxy3@192.168.16.19/$Uname.tank.2012.11.01_1735.img.gz | gzip -d -с | zfs receive -vF -d tank
# итого с учетом переменных для возможности настройки:
echo "script: Receive system from ftp start...."
cat /tmp/snapshot | $awk '/'${tank}'/ {print $1}' | while read line
do
echo $line
pool=`echo $line | $awk '/'${tank}'/ {gsub("\/",".") ; print $1}'`
echo $pool
ftp -i -A -P ${port_ftp} -o - ftp://${usr}:${pass}@${ip_ftp}/$Uname.${pool}.img.gz | gzip -d -c | zfs receive -vF -d ${tank}
done
echo "script: Receive system from ftp finish"
sleep 5
# вообще это лишнее, но не мешает
#mkdir /tmp/root
# что бы добраться до результирующего "/boot/zfs/zpool.cache"
# приходится стучать в бубен
zfs set mountpoint=/tmp/root ${tank}
# то же лишнее
cd /tmp
zpool export ${tank}
zpool import -o altroot=/tmp/${tank} -o cachefile=/var/tmp/zpool.cache ${tank}
echo "script: Copy zpool cache..."
# Копируем zpool.cache на своё место. Только не пропустите этот шаг, были случаи )
# Сей чудовый путь забавен, но логически верен. Проверено.
# И запись выше "mkdir /tmp/root" вообще лишняя
cp /var/tmp/zpool.cache /tmp/${tank}/tmp/root/boot/zfs/zpool.cache
# отмотируем все это безобразие
zfs unmount -af
# вернем пул в корень
zfs set mountpoint=/ ${tank}
echo "script: done!"
echo "enter please command 'reboot'"
# reboot systemm
#reboot
Для справки скрипт резервного копирования
Код: Выделить всё
#!/bin/sh
# резервное копирование
#имя пула
poolname='tank0'
#дата и время
DATE=`date +%d-%m-%Y`
cd /tmp/
pwd
Uname=`uname -n`
#Делаем рекурсивный снапшот пула с корня
zfs snapshot -r ${poolname}@${DATE}
#рисуем результат
zfs list -t snapshot |awk 'FNR>1 {print}' > /tmp/$Uname.snapshot.${DATE}.txt
ftpkeys="-i -a -A -P 21"
usr="backup"
pass="mysuperpass"
ftpsrv="192.168.0.11"
#отправляем на сервер
uname -n > /tmp/$Uname.txt
ftp -i -A -P 21 -u ftp://${usr}:${pass}@${ftpsrv}/ $Uname.txt
rm /tmp/$Uname.txt
#отправляем загрузчик и загрузочную область на сервер
gpart show > /tmp/$Uname.gpart.${DATE}.txt
cp /boot/pmbr /tmp/$Uname.${poolname}.${DATE}.pmbr
cp /boot/gptzfsboot /tmp/$Uname.${poolname}.${DATE}.gptzfsboot
ftp -i -A -P 21 -u ftp://${usr}:${pass}@${ftpsrv}/ $Uname.gpart.${DATE}.txt
ftp -i -A -P 21 -u ftp://${usr}:${pass}@${ftpsrv}/ $Uname.snapshot.${DATE}.txt
ftp -i -A -P 21 -u ftp://${usr}:${pass}@${ftpsrv}/ $Uname.${poolname}.${DATE}.pmbr
ftp -i -A -P 21 -u ftp://${usr}:${pass}@${ftpsrv}/ $Uname.${poolname}.${DATE}.gptzfsboot
#Вариант полный, с запаковкой, медленный
#1160334296 bytes sent in 18:26 (1.00 MiB/s)
#Тут узкое место по времени - процесс сжатия,
#можно попробовать сжимать с меньшей эффективностью,
#но не вижу пока необходимости.
cat $Uname.snapshot.${DATE}.txt | awk '/'${poolname}'/ {print $1}' | while read line
do
#echo $line
pool=`echo $line | awk '/'${poolname}'/ {gsub("\/","."); print $1}'`
#echo $pool
zfs send $line | gzip -7 | ftp ${ftpkeys} -u ftp://${usr}:${pass}@${ftpsrv}/$Uname.$pool.img.gz -
done
###zfs send -R ${poolname}@${DATE} | gzip -4 | ftp ${ftpkeys} -u ftp://${usr}:${pass}@${ftpsrv}/$Uname.${poolname}.${DATE}.img.gz -
###echo "------- end send snapshot '${poolname}.${DATE}', sleep 4c ----"
#Вариант полный, без запаковки, быстрый
#4814869016 bytes sent in 01:07 (68.14 MiB/s)
#zfs send -R ${poolname}@${DATE} | ftp ${ftpkeys} -u \
#ftp://${usr}:${pass}@${ftpsrv}/$Uname.${poolname}.${DATE}.img -
#echo "------- end send snapshot '${poolname}.${DATE}', sleep 4c ----"
sleep 4
echo 'Backup Complete'
#удаляем снапшот
zfs destroy -r ${poolname}@${DATE}
rm /tmp/$Uname.${poolname}.${DATE}.pmbr
rm /tmp/$Uname.${poolname}.${DATE}.gptzfsboot
rm /tmp/$Uname.snapshot.${DATE}.txt
rm /tmp/$Uname.gpart.${DATE}.txt
lazhu,
Да все верно.Загружаться не будет только, если забыли кэш положить в /boot/zfs.
Я сужу по логам которые выкладывал vintbsd,
У него какой то из этих разделов смонтирован в корень. Из этого следует чтоб нормально заработало нужно правильно смонтировать корневой раздел.receiving full stream of tank/ROOT@2016.05.08_2213 into tank/ROOT@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/ROOT/default@2016.05.08_2213 into tank/ROOT/default@2016.05.08_2213
В этом месте вместо tank должен быть tank/ROOT или tank/ROOT/default
Зделать вывод команды
Мой совет после копирования zpool cache закоментировать все что осталось до конца и вручную посмотреть по какому пути находиться кеш пула и вручнуб его скопировать.
После того как вручную скопировали выполнить команды которые остались.
Отправлено спустя 17 секунд:
lazhu,
Да все верно.Загружаться не будет только, если забыли кэш положить в /boot/zfs.
Я сужу по логам которые выкладывал vintbsd,
У него какой то из этих разделов смонтирован в корень. Из этого следует чтоб нормально заработало нужно правильно смонтировать корневой раздел.receiving full stream of tank/ROOT@2016.05.08_2213 into tank/ROOT@2016.05.08_2213
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving full stream of tank/ROOT/default@2016.05.08_2213 into tank/ROOT/default@2016.05.08_2213
В этом месте вместо tank должен быть tank/ROOT или tank/ROOT/default
Зделать вывод команды
Мой совет после копирования zpool cache закоментировать все что осталось до конца и вручную посмотреть по какому пути находиться кеш пула и вручнуб его скопировать.
После того как вручную скопировали выполнить команды которые остались.
-
- проходил мимо
Восстановление системы с ZFS
Добрый день!
Уже несколько дней разбираюсь со скриптом на восстановление системы, проверил каждый кусок работы скрипта отдельно, кроме последней части.
Скрип отрабатывает нормально кроме последних нескольких строк.
Скрипт backup:
Скрипт restore:
Вот на эту команду выдает сообщение:
И соответственно при загрузке:
Кучу материала уже перечитал но не как не могу разобраться чтобы заработало.
Уже несколько дней разбираюсь со скриптом на восстановление системы, проверил каждый кусок работы скрипта отдельно, кроме последней части.
Скрип отрабатывает нормально кроме последних нескольких строк.
Скрипт backup:
Код: Выделить всё
#!/bin/sh
poolname='zroot'
DATE="`date +%Y.%m.%d_%H%M`"
echo "script start in `date +%Y.%m.%d_%H:%M`"
zfs snapshot -r ${poolname}@${DATE}
zfs list -t snapshot
echo "backup start in `date +%Y.%m.%d_%H:%M`"
/usr/sbin/mount_smbfs -I 19x.54.xx.xx //xxxxxxxxxx@storage/lso/ /mnt/
rm -f /mnt/backup/bfg/bfg.*
cp /boot/pmbr /mnt/backup/bfg/bfg.${poolname}.${DATE}.pmbr
cp /boot/gptzfsboot /mnt/backup/bfg/bfg.${poolname}.${DATE}.gptzfsboot
zfs send -R ${poolname}@${DATE} | gzip -9 > /mnt/backup/bfg/bfg.${poolname}.${DATE}.gz
/sbin/umount /mnt/
echo "backup end in `date +%Y.%m.%d_%H:%M`"
zfs destroy -r ${poolname}@${DATE}
Код: Выделить всё
#!/bin/sh
# The name of the disk.
dev=da0
# Name of the created pool.
tank=zroot
# Host network address.
ip_host="19x.54.xx.xx"
# Address of NC server.
ip_ftp="19x.54.xx.xx"
# Port NC server.
port_nc="xxxx"
# Login and password of the NC server.
usr="fsbackup"
pass=${usr}
path="/mnt/drake/lso/backup/bfg"
# Date and time of the backup.
backup_data="2017.07.13_0916"
# Archive name with a packed pool.
backup_f="bfg.zroot.${backup_data}.gz"
# The names of files downloaders.
backup_gptzfsboot="bfg.zroot.${backup_data}.gptzfsboot"
backup_pmbr="bfg.zroot.${backup_data}.pmbr"
# Removing all partitions.
gpart destroy -F ${dev}
# Mashing the beginning of the disc.
dd if=/dev/zero of=/dev/${dev} bs=1M count=2048
# Partitioning the disk and creating partitions.
echo "script: Create GPT, add partitions..."
gpart create -s gpt $dev
echo "script: add freebsd-boot partition boot0"
gpart add -b 40 -s 1024 -t freebsd-boot -l boot0 ${dev}
echo "script: add freebsd-swap partition swap0"
gpart add -b 2048 -s 4G -t freebsd-swap -l swap0 ${dev}
# Calculating long 3, primary partition, ZFS.
# Starting block and long blocks in the entire device (disk).
blk_begin=`gpart show ${dev} | grep '=>' | awk '{a = $2; print a}'`
echo "script: blk_begin=${blk_begin}"
blk_end=`gpart show ${dev} | grep '=>' | awk '{a = $3; print a}'`
echo "script: blk_end=${blk_end}"
# Initial and long block in the blocks section (freebsd-swap).
blk_swop_begin=`gpart show ${dev} | grep 'freebsd-swap' | awk '{a = $1; print a}'`
echo "script: blk_swop_begin=${blk_swop_begin}"
blk_swop_end=`gpart show ${dev} | grep 'freebsd-swap' | awk '{a = $2; print a}'`
echo "script: blk_swop_end=${blk_swop_end}"
# The initial block partition ZFS.
blk_zfs_begin=$((${blk_swop_begin} + ${blk_swop_end}))
echo "script: blk_zfs_begin=${blk_zfs_begin}"
# Long desired in the blocks ZFS partition taking into account the multiplicity 8 blocks (4K).
blk_long=$(( (((${blk_begin}+${blk_end})-${blk_zfs_begin})/8)*8 ))
echo "script: blk_long=${blk_long}"
echo "script: add freebsd-zfs partition data0, long is ${blk_long} blocks"
gpart add -s ${blk_long} -t freebsd-zfs -l data0 ${dev}
echo " "
echo "script: GPT on $dev created, partitions added."
echo " "
sleep 10
/usr/sbin/mount_smbfs -I 19x.54.xx.xx //xxxxxxxxxx@storage/lso/ /mnt/
# Download from FTP server backup loaders (/boot/pmbr и /boot/gptzfsboot)
echo "script: Download backup boot records from ftp start...."
cp /mnt/backup/bfg/${backup_gptzfsboot} /tmp/gptzfsboot
cp /mnt/backup/bfg/${backup_pmbr} /tmp/pmbr
/sbin/umount /mnt/
# Record loader in the boot sector.
gpart bootcode -b /tmp/pmbr -p /tmp/gptzfsboot -i 1 ${dev}
gpart show ${dev}
sleep 3
gpart show -l ${dev}
sleep 5
# Create ZFS pool
echo "script: Create ZFS pool..."
sysctl vfs.zfs.prefetch_disable=1
gnop create -S 4096 /dev/gpt/data0
zpool create -f -o altroot=/tmp -o cachefile=/var/tmp/zpool.cache ${tank} /dev/gpt/data0.nop
zpool export ${tank}
gnop destroy /dev/gpt/data0.nop
mkdir /tmp/${tank}
zpool import -o altroot=/tmp/${tank} -o cachefile=/var/tmp/zpool.cache ${tank}
zpool set bootfs=${tank} ${tank}
sleep 3
echo "script: Create filesystem..."
zfs set checksum=fletcher4 $tank
echo "script: Receive system from nc start...."
echo "Please enter following command on storage: \"cat ${path}/${backup_f} | nc ${ip_host} ${port_nc}\""
nc -l ${port_nc} | gzip -d -c | zfs receive -vF -d ${tank}
echo "script: Receive system from nc finish"
sleep 5
mkdir /tmp/root
zfs set mountpoint=/tmp/root ${tank}
cd /tmp
zpool export ${tank}
zpool import -o altroot=/tmp/${tank} -o cachefile=/var/tmp/zpool.cache ${tank}
echo "script: Copy zpool cache..."
cp /var/tmp/zpool.cache /tmp/${tank}/tmp/root/boot/zfs/zpool.cache
zfs unmount -af
zfs set mountpoint=legacy ${tank}
echo "script: done!"
echo "enter please command 'reboot'"
Код: Выделить всё
cp /var/tmp/zpool.cache /tmp/${tank}/tmp/root/boot/zfs/zpool.cache: No such file or directory
Код: Выделить всё
/
Can't find /boot/zfsloader
FreeBSD/x86 boot
Default: zroot:/boot/kernel/kernel
boot:
-
Can't find /boot/kernel/kernel