LINUX.ORG.RU
ФорумAdmin

ZFS Proxmox отвалился 1 NVME

 , , ,


0

1

Доброго всем времени суток. Буквально трейтий день разбираюсь во всем этом беспорядке «для меня» так как с линукс системами крайне редко встречался, а тут такое случилось для меня лес.

в общем что имеем (как я понял, если ошибаюсь более опытные поправьте)

Обычный ПК на нем 2 шт. NVMe 512 + 2 HDD по 2TB, физический RAID не удалось сделать, видимо прибегли к очень странному способу развернуть proxmox и все объеденить в ZFS, я так понял это своего рода виртуальный RAID (RAID-Z) в режиме mirror-0

в общем система виснет при попытке импортировать rpool и вываливается в initramfs

уж не знаю даже что предпринять. пулы он вроде как находит но как их подцепить запустить или сделать «роллбэк»

в теории я думаю (или моя фантазия) купить другой чистый SSD (так как первый просто умер и никто не может подцепиться к нему) и должно же быть в этой системе, если она реплицирует данные, возможность откатиться, пусть и на достаточно длительное время назад (в разумных пределах)

Если надо что какую инфу буду пытаться оперативно скинуть) народ мне кажеться я просто не знаю как это сделать, но более чем уверен все решается не сложным набором команд и сутками восстановления той части storage

p.s. если темк создал не в том разделе, извиняюсь)



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

Все диски живые, там 1 nvme в коротыш ушел просто, с ним даже машина не запускалась, на boot’e висела по 2-3 минуты, его из системы вытаскиваешь все ОК, ну т.е. они читаемы итд. Проблема в отсутствии я так понимаю диска A1 но B1 это же его клон по идее? система то там есть но…. дальше моих знаний пока не хватает объяснить)

nsevene
() автор топика

Обычный ПК на нем 2 шт. NVMe 512 + 2 HDD по 2TB, физический RAID не удалось сделать,

Не неудалось, а приняли сознательное решение не использовать физический (недо)RAID. Я бы так же сделал.

видимо прибегли к очень странному способу развернуть proxmox и все объеденить в ZFS

Строго говоря, не всё объединить, а сделать два независимых массива - один из SSD, другой из HDD. Это абсолютно нормальный способ, я бы сделал так же.

я так понял это своего рода виртуальный RAID (RAID-Z)

Нет. «RAID-Z» (это аналог raid-5/6/7) здесь не используется, используется обычный mirror (аналог raid-1).

в режиме mirror-0

Это не режим, а название vdev в пуле. Если Вы в пул добавите ещё mirror’ов, то у Вас будут mirror-1, mirror-2 и т.д.

Итого, у вас там два пула (vm и sata2tb). Проблемы возникли с vm. С sata2tb всё хорошо.

Читаем, что пишет zfs про пул vm:

  • state: DEGRADED — пул деградировал (но не умер)
  • vm/mirror-0/81356… UNAVAIL — устройство отсутствует)
  • status: One or more devices contains corrupted data (перевод: одно или несколько устройств содержит повреждённые данные). Здесь имеется в виду, что либо устройство отсутствует или умерло (Ваш случай) или даёт ошибки i/o или отдаёт данные, не соответствующие сохранённым контрольным суммам.
  • action: The pool can be imported despite missing or damaged devices. The fault tolerance of the pool may be compromised if imported (перевод: пул может быть импортирован несмотря на отсутствующее или повреждённое устройство. Уровень отказоустойчивости в может перестать соответствовать вашим требованиям, если вы импортируете пул). Здесь ZFS Вам пишет, что пул всё равно можно использовать, но, поскольку уровень надёжности оказывается ниже заданного изначально, то Вы должны его импортировать руками.

Вполне логичное поведение ZFS, как мне кажется. Если уровень надёжности снижается ниже требуемого — администратор должен об этом знать.

Рекомендации:

  • проверьте, подключен ли второй SSD (может, у него кабель отошёл)
  • проверьте, жив ли второй SSD
  • замените мертвый SSD на новый и добавьте в пул (man zpool add)

Так же можно (но не рекомендуется, если данные и/или надёжность системы представляют ценность):

  • или удалить мёртвое устройство из vm/mirror-0 (man zpool remove) и жить без mirror’a.
  • или продолжить работать с дергадировавшим пулом
Harliff ★★★★★
()
Ответ на: комментарий от Harliff

Ох прям благодарю что вот разжевали детально все, я на ваши ответы в других темах натыкался. Буду дальше документацию изучать, но т.е. мои предположения верны не считая путаницы в терминологии.

т.е. прошу прям вот разъяснить) я иду сейчас покупаю аналогичный nvme подключаю его, далее отклчаю пул (offline) заменяю утройство в нем (replace)? мертвое на новое. и все должно заработать? или еще какие то действия в виде разметики нужно делать с устройством? всмысле подготовкой перед присоединению?

Да скорее всего, придется обслуживать. но там на самом деле такие задачи стоят что блин ну не целесообразно это :) там один SQL сервер и файлы для трех компов)

Блин а так респект вам)

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

т.е. прошу прям вот разъяснить) я иду сейчас покупаю аналогичный nvme

Да.

подключаю его

Да.

далее отклчаю пул (offline)

Нет, пул отключать не надо. Кстати, команда zpool offline переводит в offline не пул, а его части (диски). Но у вас мёртвый диск и так в offline (в UNAVAIL, точнее). Поэтому с ним replace отработает и так.

заменяю утройство в нем (replace)? мертвое на новое и все должно заработать? или еще какие то действия в виде разметики нужно делать с устройством? всмысле подготовкой перед присоединению?

Если бы у Вас был обычный диск с данными (например, один из HDD помер), то этого было бы достаточно. Но у Вас там не только данные, но ещё и загрузчик Proxmox. И нужно, что бы Proxmox мог грузится не только с первого SSD (который остался живой), но и со второго (который Вы купите и поставите). А то вдруг первый тоже помрёт…

Я в форуме Proxmox’a нашёл такое решение и адаптировал под Ваш случай.

Допустим, у Вас /dev/nvme0n1 — старый диск (который живой), /dev/nvme1n1 — новый диск.

Вначале рекомендую сохранить резервную копию диска (подключить USB диск со свободными 200Гб в /mnt/usb и сделать dd if=/dev/nvme0n1 of=/mnt/usb/nvme0n1.img)

1. Put in new disk
2. sgdisk /dev/nvme0n1 -R /dev/nvme1n1
3. sgdisk -G /dev/nvme1n1
4. zpool replace vm 81356... /dev/nvme1n1p4 # впишите ваши цифры из zpool status
5. pve-efiboot-tool format /dev/nvme1n1p2
6. pve-efiboot-tool init /dev/nvme1n1p2
7. pve-efiboot-tool refresh

Потом проверьте:

  • загружается ли система
  • загружается ли хоть что-то, если отключить питание у первого диска

Вам в помощь:

  • lsblk — показывает диски и разделы на них (как их видит система)
  • sgdisk -p — показывает разделы на диске (читает их с диска)
Harliff ★★★★★
()
Ответ на: комментарий от Harliff

Попробовал, видимо что то не так делаю или чего то не хватает

результат: sgdisk not found lsblk not found

dd can’t open… ну я думаю дальше и так понятно

ничего такого что всегда написано initramfs ?

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

А вы не толль? А то сначала нормально пишете:

при попытке импортировать rpool и вываливается в initramfs

А потом:

ничего такого что всегда написано initramfs ?

На образе initramfs, понятно, что нет большого набора команд, не знаю особенностей zfs, но, по идее, если делать dd раздела/диска с ФС, то она не должна быть смонтирована, следовательно, Harliff в своём совете подразумевал загрузку с внешнего носителя. Раз он дошёл до конкретных инструкций, пусть и имя LiveUSB-образа назовёт, который вы зальёте на флешку и загрузитесь...

И, самое главное там не перепутайте имена NVME накопителей, а то мало ли что, вдруг у вас будет nvme1n1 старый накопитель.

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

Harliff в своём совете подразумевал загрузку с внешнего носителя. Раз он дошёл до конкретных инструкций, пусть и имя LiveUSB-образа назовёт, который вы зальёте на флешку и загрузитесь…

  1. вообще-то нет, что бы выполнить pve-efiboot-tool нужно загрузиться в proxmox.

  2. @nsevene, Вы можете импортировать пул принудительно, задав ключ -f (zpool import -f vm) и загрузиться в linux. Для выхода из оболочки initramfs нужно написать exit.

PS: @mky, я всё-таки поискал LiveUSB с поддержкой ZFS. Нашёл проект hrmpf.

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

Я воспроизвёл ситуацию с Вашим ZFS на временных файлах. Взгляните:

Создаём пул из временных файлов и экспортируем его:

# truncate -s 1G /tmp/1.img
# truncate -s 1G /tmp/2.img
# zpool create testpool mirror /tmp/1.img /tmp/2.img
# zpool export testpool

Портим один файл и пробуем импортировать пул.

# rm /tmp/1.img
# zpool import -d /tmp/

Получаем сообщение об ошибке:

   pool: testpool
     id: 4938152510598567359
  state: DEGRADED
status: One or more devices are missing from the system.
 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-2Q
 config:

        testpool        DEGRADED
          mirror-0      DEGRADED
            /tmp/1.img  UNAVAIL  cannot open
            /tmp/2.img  ONLINE

Импортируем пул принудительно и проверяем его статус:

# zpool import -f testpool -d /tmp/
# zpool status
  pool: testpool
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-2Q
  scan: scrub repaired 0B in 00:00:00 with 0 errors on Thu Jul  6 18:47:59 2023
config:

        NAME                      STATE     READ WRITE CKSUM
        testpool                  DEGRADED     0     0     0
          mirror-0                DEGRADED     0     0     0
            16783994244145232001  UNAVAIL      0     0     0  was /tmp/1.img
            /tmp/2.img            ONLINE       0     0     0

errors: No known data errors

Создаём ещё временный файл и заменяем им отсутствующее устройство:

# truncate -s 1G /tmp/3.img
# zpool replace testpool 16783994244145232001 /tmp/3.img

Проверяем результат:

# zpool status
  pool: testpool
 state: ONLINE
  scan: resilvered 242K in 00:00:00 with 0 errors on Thu Jul  6 18:49:50 2023
config:

        NAME            STATE     READ WRITE CKSUM
        testpool        ONLINE       0     0     0
          mirror-0      ONLINE       0     0     0
            /tmp/3.img  ONLINE       0     0     0
            /tmp/2.img  ONLINE       0     0     0

errors: No known data errors

Примечание: я указывал -d /tmp/, потому что мои файлы, изображающие из себя дисковые устройства, находились в нестандартном месте. Вам этого делать будет не нужно.

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

И, самое главное там не перепутайте имена NVME накопителей, а то мало ли что, вдруг у вас будет nvme1n1 старый накопитель.

@nsevene это очень правильно сказано. А лучше — сделайте бэкап перед этим. Можно сделать прямо из живой системы, только витруальные машины перед этим лучше остановите.

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

До pve-efiboot-tool был такой совет:

Вначале рекомендую сохранить резервную ... сделать dd if=/dev/nvme0n1 of=/mnt/usb/nvme0n1.img)

Не очень понятно про 200 Гб, если NVME, вроде как, 512 Гб. Но, ИМХО, это в любом случае подразумевает загрузку с внешнего диска. А то фиг его знает, будем копировать со смонтированого носителя, получится немного битый бекап, потом по стечению обстоятельств как раз понадобится бекап, а с бекапа zfs будет ещё как-нибудь ругаться и ТС совсем в тупике окажется.

Вы можете импортировать

Я бы сказал: «Вам Нужно импортировать pool принудительно» и выйти из initramfs командой exit, тогда загрузка продолжится и будет полноценный линкус со всеми нужными командами.

2nsevene накопители, ИМХО, лучше различать по выводу smartctl, даже если модель будет непонятно как записана (китайские приколы), то счётчик часов и байтов хорошо отличаются у нового и старого.

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

Не очень понятно про 200 Гб, если NVME, вроде как, 512 Гб.

Перепутал — посмотрел на занятое пространство в пуле, а не на размер пула. Да, 200 Гб не хватит, нужно ~500 Гб для снятия образа через dd.

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

Доброе утро

Сделал все шаги

Вместо проблемного девайса в vm пуле теперь висит надпись nvme0n1 online (это новый диск)

Но proxmox по прежнему не грузится.

При попытке dd раздела пишет. No such directory

Я что то не так делаю опять.

Буду очень признателен если кто нибудь со мной свяжется и поможет в режиме реального времени.

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

Благодарю вам за подсказки) буду искать, правда там желающих не особо много, раскидал запросы на фрилансах, может кто откликнется.

Мало ли у вас вс же будет свободный час-два «спасти утопающего» :)))

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

Благодарю за максимальный отклик и помощь) В общем загрузился с минта подключился человек пооптынее меня )) сарказм) ну и 10 минут и данные на внешнике, буду все заного поднимать, заодно разбираться) интересно все же))

В общем все решилось, данные на базе) всем спасибо!

nsevene
() автор топика