LINUX.ORG.RU
ФорумAdmin

Нужна помощь zfs экстрасенсов. Тираню zfs рейд, рассыпался пул.

 , ,


0

3

Тираню извращённо, забыл какие то шаги.
Какие шаги предпринять чтобы починить?

Изначально вставил одну флешку, 32Gb.
Сделал на ней раздел.
Создал пул.
Записал данные.
Затем вставил 64Gb флешку.
На ней не стал создавать раздел, а подключил как:
#zfs attach raid-1 /dev/sdc1 /dev/sdd (Это вариант команды из головы, точно не могу процитировать)
В итоге забавная ситуация. Один диск это sdc1, а на другом zfs создала 2 раздела:

# fdisk -l /dev/sdd
Disk /dev/sdd: 58,26 GiB, 62552276992 bytes, 122172416 sectors
Disk model: STORAGE DEVICE
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 43208ED2-0546-FE4E-95FA-851D53AEB01A

Device Start End Sectors Size Type
/dev/sdd1 2048 122155007 122152960 58,2G Solaris /usr & Apple ZFS
/dev/sdd9 122155008 122171391 16384 8M Solaris reserved 1


Пул ресинкнулся. Работал, я его экспортировал, импортировал, а вот контрольный экспорт забыл сделать.
Флешки занимали последние свободные USB порты, я поставил хаб, включил флешки в него и оно не взлетело после перезагрузки... Вставил флешки как было и теперь:
#zpool import
pool: raid-1
id: 3603826776807686061
state: DEGRADED
status: One or more devices were being resilvered.
action: The pool can be imported despite missing or damaged devices. The
fault tolerance of the pool may be compromised if imported.
config:

raid-1 DEGRADED
mirror-0 DEGRADED
sdc1 ONLINE
sdc1 FAULTED corrupted data

Теоретически можно было заменить FAULTED на него же, но под другим именем - но оба девайса стоят под одним именем. Я даже не могу заменить скажем sdd на sde или на него же, предварительно удалив zfs метки.

Можно ли как то поднять DEGRADED пул? -f не помогает.

# zpool import raid-1 -f
cannot import 'raid-1': one or more devices is currently unavailable

И какие мысли есть по замене одного из sdc? Какими командами можно посмотреть статус не импортированного пула?

P.S. Время прошло, мучаю zfs дальше. Создал ещё один пул, включал уже по UUID. Перенес на другой компьютер одну флешку из 2х в рейде. Пул благополучно импортировался в DEGRADED режиме.Что то с этим пулом не в порядке. Пусть живёт на флешке пока не найдётся решения.

Пока же озадачен тем как правильно включать устройства в пул? Ведь в Linux можно включить и диск, и раздел, и UUID раздела и тупо LVM том по имени. Что из них выбрать для боевого рейда?
★★★

Последнее исправление: n0mad (всего исправлений: 1)

оба девайса стоят под одним именем

Вот поэтому правильно использовать либо лейблы (для партишнов), либо идентификаторы устройств (если диски целиком).

А теперь смотри GUID (у ZFS свои GUID) устройства (zpool status -g) и детач по нему, а не по имени устройства.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

оба девайса стоят под одним именем

Вот поэтому правильно использовать либо лейблы (для партишнов), либо идентификаторы устройств (если диски целиком).

Спасибо, буду иметь ввиду.

А теперь смотри GUID (у ZFS свои GUID) устройства (zpool status -g) и детач по нему, а не по имени устройства.

Вся проблема в том что статусы (как я понял) можно посмотреть только у активных пулов. У меня же он неактивный. Импортировать не могу: «cannot import 'raid-1': one or more devices is currently unavailable»
А zpool status -g показывает лишь один активный пул.

Вообще как можно импортировать degraded пул? Ведь теоретически - raid должен работать даже если одно устройство отказало, а тут такое...

С устройствами вообще засада. Надо что то извлечь из этой ситуации и продолжить эксперименты.
Ведь как я понял, устройство можно подключить и как раздел и как полное устройство.

Изначально я создал устройство как раздел. Затем приаттачил вторую, в2 раза большую флешку - целиком. В процессе экспериментов несколько раз перезагружался. Пул жил. Сейчас помер.

Теперь вставляю первую флешку с пулом на разделе. zpool import пул видит а импортировать не даёт.

Вставляю вторую флешку, подключенную как зеракало целиком устройством.

fdisk -l /dev/sde
Disk /dev/sde: 58,26 GiB, 62552276992 bytes, 122172416 sectors
Disk model: STORAGE DEVICE
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 43208ED2-0546-FE4E-95FA-851D53AEB01A

Device Start End Sectors Size Type
/dev/sde1 2048 122155007 122152960 58,2G Solaris /usr & Apple ZFS
/dev/sde9 122155008 122171391 16384 8M Solaris reserved 1

zfs сама создала разделы, но zpool import не показывает пулов для импорта.
С чего бы это? Здесь тоже должен быть пул.

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

«cannot import ‘raid-1’: one or more devices is currently unavailable»

Даже с флагом -f?

теоретически - raid должен работать даже если одно устройство отказало

Его заменять следует когда ещё пул в работе, а не уже после ребута/экспорта.

Ведь как я понял, устройство можно подключить и как раздел и как полное устройство.

Если в ZFS отдать диск полностью, оно создаст Solaris-специфичные разделы, потому я предпочитаю размечать в GPT и отдавать разделы как мне надо. Эти соляровские разделы маленькие, так что не принципиально, но если размечать вручную, можно туда и ESP разместить, и pMBR.

С чего бы это? Здесь тоже должен быть пул.

На removable media не используется cachefile, потому надо импортировать с ключом -d, явно указывая диск, с которого нужно импортировать пул.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

На removable media не используется cachefile, потому надо импортировать с ключом -d, явно указывая диск, с которого нужно импортировать пул.

О! Спасибо!

# zpool import -d /dev/sde
pool: raid-1
id: 3603826776807686061
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-5E
config:

raid-1 UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
sde1 UNAVAIL invalid label
sde UNAVAIL

Это тот пул с которого не виделось.
И для устройства с пулом в разделе:

# zpool import -d /dev/sdc
pool: raid-1
id: 3603826776807686061
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-5E
config:

raid-1 UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
sdc UNAVAIL invalid label
sdc1 UNAVAIL

Кстати тут видно. sdc и sdc1 - разные девайсы.
Может в zfs есть команда для принудительной сборки пула? Типа zpool assemble raid-recover /dev/sdc1 /dev/sde надо sdc1 sdc поменять на sdc1, sde.

P.S. Хотя чо эт я? Туплю...

# zpool import -d /dev/sdc1
pool: raid-1
id: 3603826776807686061
state: DEGRADED
status: One or more devices were being resilvered.
action: The pool can be imported despite missing or damaged devices. The
fault tolerance of the pool may be compromised if imported.
config:

raid-1 DEGRADED
mirror-0 DEGRADED
sdc1 ONLINE
sdc1 FAULTED corrupted data

У меня же sdc был задан как sdc1.
Но УВЫ!

# zpool import raid-1 -d /dev/sdc1 -f
cannot import 'raid-1': one or more devices is currently unavailable

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Используй нормально разметку, читать невозможно же!

У меня же sdc был задан как sdc1.

GUID!!!11

FAULTED corrupted data

Детачишь девайс, форматируешь, аттачишь заново (но по лейблу или идентификатору!, чтобы самому потом не путаться), ресильверишь.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

GUID!!!11

Жуть... Под впечатлением Ваших строк начал импровизацию...
Сделал sdc1 и sdd1 затем:
# blkid /dev/sdc1
/dev/sdc1: PARTUUID=«72cf2c0b-fe32-4649-9aa6-45d1314d1139»
# blkid /dev/sdd1
/dev/sdd1: PARTUUID=«27300dce-6a76-6a49-a10c-905100118633»
И:
zpool create zfs-raid-1 mirror 72cf2c0b-fe32-4649-9aa6-45d1314d1139 27300dce-6a76-6a49-a10c-905100118633 -f

Проглотило.

# zpool status zfs-raid-1
pool: zfs-raid-1
state: ONLINE
config:

NAME STATE READ WRITE CKSUM
zfs-raid-1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
72cf2c0b-fe32-4649-9aa6-45d1314d1139 ONLINE 0 0 0
27300dce-6a76-6a49-a10c-905100118633 ONLINE 0 0 0

Посмотрим как этот будет себя вести...

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Проглотило.

Потому что резольвит устройства ядро.

А разметку рекомендую уже освоить, за четырнадцать-то лет на техническом форуме. Выхлоп я даже не пытался читать, это больно.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

А разметку рекомендую уже освоить, за четырнадцать-то лет на техническом форуме. Выхлоп я даже не пытался читать, это больно.

Увы, в том и моя проблема. Туплю на ровном месте, это следствие тяжелого ушиба ствола мозга и недели мозговой комы. Но мне повезло гораздо больше чем Шумахеру... Я вот даже с Вами могу что то обсуждать и пытаться воспринять и запомнить сказанное. Пока я не понимаю что в вашем случае «не больно».
Могу лишь попросить осилить тот «выхлоп» который больно читать и прямо в комментарии оформить его так как надо оформлять. Так я может пойму и запомню, в крайнем случае будет где «подглядеть».
И кстати о 14 годах, это как раз уже через год после травмы я сюда попал, начал более-менее соображать и даже смог акк завести, а возможно и от «прошлой жизни» какой нибудь акк есть, но я его забыл.. Интернет то у меня ещё в 90х годах прошлого века появился, и ещё с тех пор я был «сисадмином», со времен OS/2 и FIDO.

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 1)
Ответ на: комментарий от n0mad

Сочувствую.

Пока я не понимаю что в вашем случае «не больно».

На примере вывода zpool status: отступы позволяют читать гораздо легче:

	NAME           STATE     READ WRITE CKSUM
	data           ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/data0  ONLINE       0     0     0
	    gpt/data1  ONLINE       0     0     0
	  mirror-1     ONLINE       0     0     0
	    gpt/data2  ONLINE       0     0     0
	    gpt/data3  ONLINE       0     0     0

Против такого:

NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/data0 ONLINE 0 0 0
gpt/data1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
gpt/data2 ONLINE 0 0 0
gpt/data3 ONLINE 0 0 0

В первом случае сразу видно структуру пула (в моём случае это RAID-10), состояние его компонентов (все ONLINE) и ошибки (0/0/0), не требуется "искать" интересующие данные, глаз сразу "цепляется" за какие-либо "аномалии". Во втором случае, особенно не моноширинным шрифтом, приходится вчитываться для поиска нужной информации.

Даже в виде таблицы читабельность падает:

NAMESTATEREADWRITECKSUM
dataONLINE000
mirror-0ONLINE000
gpt/data0ONLINE000
gpt/data1ONLINE000
mirror-1ONLINE000
gpt/data2ONLINE000
gpt/data3ONLINE000

Потому что отступов в начале строк нет, и структура уже потеряна.

https://imgur.com/a/I5RVSox

mord0d ★★★★★
()

Но вопрос так и остался. Как смонтировать рассыпавшийся zfs raid? Раздел на одной из флешек читается

	raid-1      DEGRADED
	  mirror-0  DEGRADED
	    sdc1    ONLINE
	    sdc1    FAULTED  corrupted data

И для того чтобы прочитать данные - его надо подмонтировать, но не монтируется, и -f не помогает.

По результатам обсуждения возникли и другие вопросы:

1. Монтировать по PARTUUID или может лучше LVM2?
Идентификаторы типа Data_2 гораздо лучше читаются чем 72cf2c0b-fe32-4649-9aa6-45d1314d1139
При просмотре глазами - первый вариант логичен (/dev/raid_8/Data_8), а второй ID надо искать во всей иерархии разделов.

# zpool status zfs-solo-2
  pool: zfs-solo-2
 state: ONLINE
config:

	NAME                                    STATE     READ WRITE CKSUM
	zfs-solo-2                              ONLINE       0     0     0
	  9f4e87fe-3d0f-cc45-891f-1dbbafdfbe22  ONLINE       0     0     0

errors: No known data errors

# zpool status zfs-solo
  pool: zfs-solo
 state: ONLINE
config:

	NAME        STATE     READ WRITE CKSUM
	zfs-solo    ONLINE       0     0     0
	  Data_7    ONLINE       0     0     0

errors: No known data errors

Это пулы на разных флешках, один просто на разделе и подключен по UUID, а второй в LVM2 и подключен как LVM раздел.

Другое дело что в варианте с LVM получается масло масляное. Для каждого тома надо указать отдельный VG и отдельный LV
При этом они переносимые. На другой машине он так же будет /dev/raid_8/Data_8, причём вообще не надо ни чего настраивать на том же Bookworm, только добавляется отдельный геморрой по деактивации pv перед вытаскиванием носителя.

Вот сейчас сижу перед винтом с Power_On_hours=0, забитым нулями и думаю как инициализировать? zfs на устройство? zfs на gpt раздел? zfs на LVM? Или вообще побить на 3+1? Чтобы если что - можно было 3Т винт в рейд воткнуть...
(Первый винт уже побит потому что у него в паре 3Т, а новый или так же разбивать и 2 рейда делать 3Т+1Т или делать 4Т и всё рсинкать.)

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 1)
Ответ на: комментарий от n0mad

Но вопрос так и остался. Как смонтировать рассыпавшийся zfs raid? Раздел на одной из флешек читается

Становится всё чудесатее и чудесатее.

root@zer0:~# zpool import
   pool: raid-1
     id: 3603826776807686061
  state: DEGRADED
status: One or more devices were being resilvered.
 action: The pool can be imported despite missing or damaged devices.  The
	fault tolerance of the pool may be compromised if imported.
 config:

	raid-1      DEGRADED
	  mirror-0  DEGRADED
	    sdd1    ONLINE
	    sdc1    UNAVAIL  corrupted data

Старый пул, который не могу импортировать.
# zpool import -f raid-1
cannot import 'raid-1': one or more devices is currently unavailable


Теперь добавляем одну флешку из нового пула:
root@zer0:~# zpool import
   pool: zfs-solo-2
     id: 12970693172804218342
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

	zfs-solo-2                              ONLINE
	  9f4e87fe-3d0f-cc45-891f-1dbbafdfbe22  ONLINE

   pool: raid-1
     id: 3603826776807686061
  state: DEGRADED
status: One or more devices were being resilvered.
 action: The pool can be imported despite missing or damaged devices.  The
	fault tolerance of the pool may be compromised if imported.
 config:

	raid-1      DEGRADED
	  mirror-0  DEGRADED
	    sdd1    ONLINE
	    sdc1    UNAVAIL  corrupted data

   pool: zfs-raid-1
     id: 11702920276725354413
  state: DEGRADED
status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
	fault tolerance of the pool may be compromised if imported.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
 config:

	zfs-raid-1                                DEGRADED
	  mirror-0                                DEGRADED
	    1358037695955188531                   UNAVAIL
	    27300dce-6a76-6a49-a10c-905100118633  ONLINE

Импортируем:
# zpool import zfs-raid-1

ВУАЛЯ! Пул зашел!

Что копать? Почему один DEGRADED пул импортируется,а другой нет?

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Что копать? Почему один DEGRADED пул импортируется,а другой нет?

Чувак грациозно прпатчиля ядро FreeBSD и импортировал пул который не хотел импортироваться. :)
https://forums.freebsd.org/threads/cannot-import-one-or-more-devices-is-curre...
Но у него ситуация сложнее, пул был зашифрован.

n0mad ★★★
() автор топика