Статья: Восстановление ZFS-пула с помощью подручных средств
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Статья: Восстановление ZFS-пула с помощью подручных средств
На самом деле это не статья, а просто история о том, как была восстановленна работоспособность развалившегося RAID-Z пула.
Текст: http://www.lissyara.su/articles/freebsd ... _recovery/
Вот думаю: стоит это вообще публиковать или лучше снести за бесполезностью? Что скажите?
Текст: http://www.lissyara.su/articles/freebsd ... _recovery/
Вот думаю: стоит это вообще публиковать или лучше снести за бесполезностью? Что скажите?
Услуги хостинговой компании 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/
- f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
- Контактная информация:
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Не понял, а почему было не вывести из pool сбойный диск, и не заменить на новый, после этого, в принципе пул должен был востановится, так как raidz
Код: Выделить всё
A raidz group with N disks of size X with P parity disks can hold approximately (N-P)*X
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Если диск просто сбоит, то пул переходит в состояние DEGRADE и доступ к данным сохраняется. В состоянии FAULT уже никакая терапия с заменой дисков не поможет, как и получилось, когда сбойный диск был заменён на рабочий.f_andrey писал(а):Не понял, а почему было не вывести из pool сбойный диск, и не заменить на новый, после этого, в принципе пул должен был востановится, так как raidz
- gloom
- лейтенант
- Сообщения: 738
- Зарегистрирован: 2008-03-13 16:29:12
- Откуда: UA
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
очень интересно! спасибо
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Судя по полному отстутствию комментариев или статейка не нашла своего читателя или в ней ничего не понятно.
В течении 24 часов я её переведу в публичный доступ (в разделе "Файловая система"), если не будет серьёзных замечаний.
В течении 24 часов я её переведу в публичный доступ (в разделе "Файловая система"), если не будет серьёзных замечаний.
- FreeBSP
- майор
- Сообщения: 2020
- Зарегистрирован: 2009-05-24 20:20:19
- Откуда: Москва
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
пока читаю полезно или нет - не знаю, но внимания статья заслуживает это однозначно
пока навскидку: arr2int()
{
b=`echo $1 | sed "s/^$r7$/0x\1/" | xargs printf "%d"`
res=$b
b=`echo $1 | sed "s/^$r6$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r5$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r4$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r3$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r2$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r1$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r0$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
echo $res
}
можно реализовать циклом, присвоения переменным $r? - тоже
читаю дальше
пока навскидку: arr2int()
{
b=`echo $1 | sed "s/^$r7$/0x\1/" | xargs printf "%d"`
res=$b
b=`echo $1 | sed "s/^$r6$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r5$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r4$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r3$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r2$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r1$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
b=`echo $1 | sed "s/^$r0$/0x\1/" | xargs printf "%d"`
res=`expr -e $res \* 256 + $b`
echo $res
}
можно реализовать циклом, присвоения переменным $r? - тоже
читаю дальше
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Слона то я и не приметил (с) Куприн.FreeBSP писал(а):можно реализовать циклом, присвоения переменным $r? - тоже
Сейчас сделаю адекватный вариант.
- FreeBSP
- майор
- Сообщения: 2020
- Зарегистрирован: 2009-05-24 20:20:19
- Откуда: Москва
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
однозначно к прочтению
как минимум - как "легкое чтение на ночь"
как максимум - как боевое руководство
как минимум - как "легкое чтение на ночь"
как максимум - как боевое руководство
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Новая версия скрипта, преобразует массив в число с использованием пары циклов (один - переставляет элементы, второй - рабочий):
В статье уже обновил. Спасибо FreeBSP за найденный недочёт.
Код: Выделить всё
#!/bin/sh
DISKS="ad2 ad4 ad6"
LABELS="0 1 2 3"
FIELD_OFF=16
FIELD_LEN=8
arr2int()
{
arr=""
res=0
# Invert octet order
for oct in $1; do
arr="$oct $arr"
done
# Convert
for oct in $arr; do
oct=`printf "%d" 0x$oct`
res=`expr -e $res \* 256 + $oct`
done
echo $res
}
fin=`expr 256 \* 1024`
prev=""
for DISK in $DISKS; do
for L in $LABELS; do
fdump="$DISK-label$L.dump"
# First block pos
off=`expr 128 \* 1024 + $FIELD_OFF`
n=0
while [ $off -lt $fin ]; do
# Get octets array
str=`od -t xC -A n -v -j $off -N $FIELD_LEN $fdump`
str=`echo $str | sed 's/^ *\([^ ].*[^ ]\) *$/\1/'`
# Convert to integer
txg=`arr2int "$str"`
printf "txg %10u disk %s label %s n %3u\n" $txg $DISK $L $n
off=`expr $off + 1024`
n=`expr $n + 1`
done
done
done
- iMoJo
- ефрейтор
- Сообщения: 66
- Зарегистрирован: 2010-03-23 7:24:48
- Откуда: KZ
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Однозначно - респект!
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Всё - разрешил публичный доступ.
-
- проходил мимо
- Сообщения: 2
- Зарегистрирован: 2010-01-29 17:56:21
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
решал такую проблему загрузкой пула в саляру
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Что работает по-другому, кроме вообще работающих ключей zdb(8)?Ti писал(а):решал такую проблему загрузкой пула в саляру
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Метод затирания uberblock'а последней транзакции, т.е., фактически, откат к предыдущей транзакции помог с восстановлением ещё одного пула (уже другого, но так-же с отказавшим диском) в состоянии FAULTED, до состояния DEGRADE. Иногда, этот способ всплывает в списках рассылки.
В свете данных событий возник вопрос: существует ли какой либо штатный способ отката на одну-две транзакции назад? Может быть я что-то упускаю из виду?
В свете данных событий возник вопрос: существует ли какой либо штатный способ отката на одну-две транзакции назад? Может быть я что-то упускаю из виду?
-
- проходил мимо
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Существует. Смотреть в сторону zpool import -F. Должен поддерживаться в последней версии (там где поддерживаемая версия пула - 28).В свете данных событий возник вопрос: существует ли какой либо штатный способ отката на одну-две транзакции назад? Может быть я что-то упускаю из виду?
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Флаг -F не откатывает транзакции и предназначен для отладки (игнорируются все ошибки импорта), поэтому он не документирован.Anon Y Mous писал(а):Существует. Смотреть в сторону zpool import -F. Должен поддерживаться в последней версии (там где поддерживаемая версия пула - 28).В свете данных событий возник вопрос: существует ли какой либо штатный способ отката на одну-две транзакции назад? Может быть я что-то упускаю из виду?
-
- проходил мимо
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Я не зря написал про последнюю версию. В ней старый недокументированный -F переименован в по-прежнему недокументированный -V, а -F документирован и имеет другое предназначение - восстановление поврежденного пула путем отмотки назад (см. также недокументированный -X).Флаг -F не откатывает транзакции и предназначен для отладки (игнорируются все ошибки импорта), поэтому он не документирован.
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Спасибо за то что поправили. Действительно, пару недель назад в HEAD добавили такую возможность и ещё много чего интересного. Сейчас начал просматривать исходники zpool(8), а там в коментариях к правке:Anon Y Mous писал(а):Я не зря написал про последнюю версию. В ней старый недокументированный -F переименован в по-прежнему недокументированный -V, а -F документирован и имеет другое предназначение - восстановление поврежденного пула путем отмотки назад (см. также недокументированный -X).
И ещё много чего интересного внутри исходника, только man ещё не подправили, но в справке самого zpool(8) уже есть необходимые коментарии.SVN rev 219089 писал(а):...
- zpool import -F. Allows to rewind corrupted pool to earlier
transaction group.
...
- BlackCat
- прапорщик
- Сообщения: 469
- Зарегистрирован: 2007-10-16 22:40:42
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Обновил статью, добавив упоминание о появлении параметра -F.
- nirnroot
- проходил мимо
- Сообщения: 6
- Зарегистрирован: 2009-03-17 18:38:03
- Откуда: Ю-С.
Re: Статья: Восстановление ZFS-пула с помощью подручных сред
Я, конечно, извиняюсь что втиснусь, просто тут специалисты
Угробил пул-зеркало. Вылетел один диск, я купил новый 4K, форматнул его в новый пул, перенес все со старого, загрузился с нового, ок.
Форматнул старый диск. Присоединил к новому как зеркало, дождался ресильва. Потом мне показалось, что новый диск некрасиво в пуле по gptid, я его отдеттачил, glabal label, zpool add. Прошел ресильв. Ребут. Ну и хана
Поэтому точно не знаю, из-за чего полетел пул.
Листинги, пулы 28 версии, freebsd 9.0rc (сам пул создавал через freebsd X) (из интересного - не совпадающая разметка дисков, ресилвер на втором диске и не совпадающие номера DTL):
Метки вроде все целые - на каждом диске по 4 штуки. Если что - лежат вот тут - http://pastebin.com/JuMrdczV
Ну и как обычно - запасной копии нет zpool import -fFXV -o ro не помогает.
Угробил пул-зеркало. Вылетел один диск, я купил новый 4K, форматнул его в новый пул, перенес все со старого, загрузился с нового, ок.
Форматнул старый диск. Присоединил к новому как зеркало, дождался ресильва. Потом мне показалось, что новый диск некрасиво в пуле по gptid, я его отдеттачил, glabal label, zpool add. Прошел ресильв. Ребут. Ну и хана
Поэтому точно не знаю, из-за чего полетел пул.
Листинги, пулы 28 версии, freebsd 9.0rc (сам пул создавал через freebsd X) (из интересного - не совпадающая разметка дисков, ресилвер на втором диске и не совпадающие номера DTL):
Код: Выделить всё
# gpart show
=> 34 2930277101 ada0 GPT (1.4T)
34 128 1 freebsd-boot (64k)
162 1886 - free - (943k)
2048 8388608 2 freebsd-swap (4.0G)
8390656 2921886479 3 freebsd-zfs (1.4T)
=> 34 2930277101 ada1 GPT (1.4T)
34 6 - free - (3.0k)
40 128 1 freebsd-boot (64k)
168 1880 - free - (940k)
2048 8388608 2 freebsd-swap (4.0G)
8390656 2921886472 3 freebsd-zfs (1.4T)
2930277128 7 - free - (3.5k)
# zdb -eX
Configuration for import:
vdev_children: 1
version: 28
pool_guid: 1487408506722295672
name: 'tank'
state: 0
vdev_tree:
type: 'root'
id: 0
guid: 1487408506722295672
children[0]:
type: 'mirror'
id: 0
guid: 14949755914536867893
whole_disk: 0
metaslab_array: 30
metaslab_shift: 33
ashift: 12
asize: 1496001019904
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 12181262761882874517
path: '/dev/gpt/disk0'
phys_path: '/dev/gpt/disk0'
whole_disk: 1
DTL: 209
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 10476129156643193055
phys_path: '/dev/gpt/disk1'
whole_disk: 1
DTL: 212
create_txg: 4
resilvering: 1
path: '/dev/dsk/gpt/disk1'
zdb: can't open 'tank': no such directory
# zpool import
pool: tank
id: 1487408506722295672
state: FAULTED
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
see: http://www.sun.com/msg/ZFS-8000-5E
config:
tank FAULTED corrupted data
mirror-0 ONLINE
12181262761882874517 UNAVAIL corrupted data
10476129156643193055 UNAVAIL corrupted data
Ну и как обычно - запасной копии нет zpool import -fFXV -o ro не помогает.