Free
Верю, но на всякий случай проверить
Ну вот в zdb, например, единственный vdev: Configuration for import: vdev_children: 1 version: 5000 pool_guid: 11849281166603609048 name: 's15' state: 0 hostid: 452935015 hostname: 'S04' vdev_tree: type: 'root' id: 0 guid: 11849281166603609048 children[0]: type: 'disk' id: 0 guid: 14520465666009004793 whole_disk: 1 metaslab_array: 132 metaslab_shift: 34 ashift: 12 asize: 20000573751296 is_log: 0 DTL: 2223 create_txg: 4 path: '/dev/sdc1' devid: 'usb-ST20000N_M007D-3DJ103_000000000069-0:0-part1' phys_path: 'pci-0000:00:1a.0-usb-0:1.2:1.0-scsi-0:0:0:0' load-policy: load-request-txg: 18446744073709551615 load-rewind-policy: 2 PS А на основном сервере zpool import уже 40+ минут тарахтит 😳 PPS Закончилось ожидаемо также one or more devices is currently unavailable
Free
Подключил обратно в ноутбук. Ничего, кроме этого пула, не видно. root@LiveDebian:~/ > zpool import -d /dev/disk/by-id/ pool: s15 id: 11849281166603609048 state: ONLINE status: The pool was last accessed by another system. action: The pool can be imported using its name or numeric identifier and the '-f' flag. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY config: s15 ONLINE usb-ST20000N_M007D-3DJ103_000000000069-0:0 ONLINE Насчет возможности import - f врет: попробовал еще раз - снова зависание с паникой 😞 PS Странно, почему в выводе пул указан ONLINE, когда он не импортирован
Free
TL;DR: cannot import [pool]: one or more devices is currently unavailable при этом устройство доступно и ошибок i/o не видно === История: Пару недель назад на сервере с несколькими десятками пулов на одиночных дисках некоторые пулы стали уходить в SUSPENDED из-за i/o ошибок (видны были в dmesg). Причина до конца не изучена, но через несколько дней это безобразие прекратилось. В SMART ни на одном из дисков ничего не появилось, все чистые. Лечил тривиальным zpool clear. Как правило, мгновенно очищалось и диск становился ONLINE, но несколько раз команда зависала, и любая другая команда zpool или zfs тоже - приходилось принудительно перегружать сервер. После одного из ребутов зарузка зависала - оказалось, из-за зависающего импорта одного из пулов. После отключения этого пула и успешной перезагрузки без него начались работы по восстановлению пула. 1. Просто импорт пула - приводит к зависанию zpool import и далее всех последующих команд zpool/zfs Сопровождается это паникой zfs в dmesg вида Thu May 1 01:38:14 2025] VERIFY0(dmu_buf_hold_array(os, object, offset, size, FALSE, FTAG, &numbufs, &dbp)) failed (0 == 5) [Thu May 1 01:38:14 2025] PANIC at dmu.c:1176:dmu_write() ... 2. Помог zpool import -fFX -o readonly=on Однако при этом в одном из датасетов пропала одна из директорий с основным объемом данных. zfs list показывал размер несколько TB, а du этого раздела - несколько МБ. Несколько других датасетов выжили, их данные спас и решил воскресить пропавшие. 3. По запросу могу рассказать, что из нагугленного оказалось бесполезно 😉, - остановился на возможности восстановиться до одной из TXG, полученной из zdb -u. 4. И вот сейчас - такое состояние: root@LiveDebian:~/ > zpool import -fFX -o readonly=on -T 6439777 -d /dev/disk/by-id s15 cannot import 's15': one or more devices is currently unavailable Причем до появления сообщений команда выполняется несколько десятков минут. Диск при этом на самом деле доступен (lsblk показывает, zdb на нем выполняется). Сообщений об ошибках в dmesg не появляется, никаких событий zpool также не обнаруживает: root@LiveDebian:~/ > zpool events s15 TIME CLASS 5. Есть нюанс: чтобы избежать частых ребутов основного сервера - лечение провожу через ноутбук, подключив к нему диск через USB (не вынимая диск из основного сервера, так как это довольно сложно). Попробую возобновить на основном сервере, благо в последних попытках зависания с паникой и вынужденным ребутом вроде бы прекратились - но, может, у кого-то есть мысли по возможным причинам unavailable, не связанным с USB? ❓ Приложение. Исходный сервер: Hewlett-Packard HP Z420 Workstation/1589 Debian 12 6.12.9+bpo-amd64 zfs-2.2.7-1~bpo12+1 zfs-kmod-2.2.7-1~bpo12+1 Ноутбук: zfs-2.3.1-1~bpo12+1 zfs-kmod-2.3.1-1~bpo12+1
На всякий случай вопрос: Помимо попытки импорта с более старым TGX ведь уже никак не исправить invalid exchange ❓ root@LiveDebian:~/ > du -sh /s15/289 du: cannot read directory '/s15/289/storage/storage': Invalid exchange 3.9M /s15/289
Free
А условный fio read на нём корректно работает? hexdump -C /dev/sdX | less заголовки показывает?
Всё показывает. Более того: Ведь zpool import -fFX -o readonly=on -d /dev/disk/by-id s15 отрабатывает без ошибок и несколько датасетов при этом в отличном состоянии. Только в одной директории одного датасета invalid exchange
Free
Тогда я бы глянул через UFS Explorer Быстрее будет чем ручками пытаться найти что не так
А есть опыт работы с ней с ZFS? Что-то он в Properties показывает её как No valid/supported file system/ Даже когда я больной пул в readonly импортировал.
Free
А если сканировать - то тупо посекторно начинает по диску идти. Очевидно, при этом никакие метаданные восстановить не сможет, поскольку даже не пытается информацию о них прочитать
Free
usb переходник не подрезает геометрию диска ?
Нет: и по параметрам, и по результатам импорта (одинаково на сервере и через USB).
Fedor
usb переходник не подрезает геометрию диска ?
Не, не подрезает. Подрезает автоопределение.
Free
Так-то он видит там ZFS
Как будто просто по сигнатуре раздела. Так ведь и lsblk видит, и fdisk
Free
Отмонтируй пул
Вначале как раз без импорта запускал. Он ничего не увидел - тогда уж решил ему помочь построить файловую систему с помощью импорта, в надежде, что с ней уж он начнет повреждения метаданных искать.
Vladislav
Vladislav
@FreeKopcap я про эту часть
Vladislav
Кстати сделай expand details
Vladislav
Мне интересно, что он говорит Component of stripe
Free
Кстати сделай expand details
По ней открыает страницу сайта (без VPN непонятно какую - но, наверное, справку какую-то)
𝚜𝚎𝚗𝚜𝚎𝚖𝚊𝚍
𝚜𝚎𝚗𝚜𝚎𝚖𝚊𝚍
https://blog.victormendonca.com/2020/11/03/zfs-for-dummies/
Vladislav
По ней открыает страницу сайта (без VPN непонятно какую - но, наверное, справку какую-то)
Интересно, но судя по всему zfs считает, что у тебя только часть диска Но при этом zdb говорит, что он как бэ один Везёт тебе на баги
exit_node🙂‍↕️
В lvm можно добавить диски разного размера и в любой момент выделять тома произвольного размера и по желанию часть из них пихнуть в raid0, raid1 Можно ли так же в zfs? Объединить два диска в zpool и уже затем одну файловую систему создать с зеркалированием, а другую без?
exit_node🙂‍↕️
И почему не рекомендуется ставить zfs на lvm том? Допустим, если использовать lvm просто для создания разделов и не пользоваться снапшотами и другими фишками lvm
exit_node🙂‍↕️
Зачем?)
В сообщении выше описал У меня диски разного размера и под часть данных нужен raid1, а для файлопомойки raid0. Я заранее не знаю какой объём для каких данных мне будет нужен. И в lvm удобно выделять и увеличивать под эту задачу вольюмы
exit_node🙂‍↕️
Вы как себе это представляете? Смысл рейда в защите от сбоя физического диска. А вы пытаетесь таким подходом от этого избавиться, т.е. подставить самого себя
На диске a выделить вольюм через lvm и на диске b выделить второй вольюм. Затем добавить их в zfs pool в режиме mirror
Denver
На диске a выделить вольюм через lvm и на диске b выделить второй вольюм. Затем добавить их в zfs pool в режиме mirror
Ещё раз хорошо подумайте. Если один физический диск у вас крашится то, что происходит с данными?
Denver
Вы потом данные не восстановите
exit_node🙂‍↕️
Вы как себе это представляете? Смысл рейда в защите от сбоя физического диска. А вы пытаетесь таким подходом от этого избавиться, т.е. подставить самого себя
А, если вопрос был только про lvm, то там указывается с каких физических дисков будут браться тома объединённые в raid 1
exit_node🙂‍↕️
В lvm просто не будет доступен крашнутый физический диск и можно будет подмонтировать уцелевший
George
На диске a выделить вольюм через lvm и на диске b выделить второй вольюм. Затем добавить их в zfs pool в режиме mirror
аналогичное можно получить просто добавляя в пулы новые партиции когда поняли надобность. Но схема в принципе не идеальная, даже с lvm, там под капотом будет похожая нарезка по кускам и сбор в одну партицию. не рекомендуют смешивать zfs с lvm банально по причине дублирования функционала, плюс лишний слой скажется на производительности и надёжности.
George
ну и можно партиции мирроров доращивать, убивая следом идущую партицию страйпа, так чуть лучше
exit_node🙂‍↕️
аналогичное можно получить просто добавляя в пулы новые партиции когда поняли надобность. Но схема в принципе не идеальная, даже с lvm, там под капотом будет похожая нарезка по кускам и сбор в одну партицию. не рекомендуют смешивать zfs с lvm банально по причине дублирования функционала, плюс лишний слой скажется на производительности и надёжности.
Допустим, использую только zfs У меня sda1 и sdb1 в raid1 Далее создал sda2 и sdb2 и объединил их без зеркалирования Затем оказалось, что мне мало места в sda1+sdb1. Я создал sda3 и sdb3. Как мне теперь присоединить их к первым партициям? В lvm я могу просто увеличить размер логического вольюма. Можно ли аналогичное сделать в zfs?
George
exit_node🙂‍↕️
Мыслите пулами zfs, почитайте что такое zvol. В один пул может входить много zvols что примерно равно партиции
Если я целиком оба физических диска объединю в пул zfs, то это будет либо mirror, либо объединение без избыточности? И соответственно zvols либо все будут mirrored, либо все без избыточности? Или что-то упускаю?
Станислав
или наоборот - все силами lvm 😁
Тоже верно) с таким подходом вообще можно без лвм, зфс, рейд, а просто один раздел на все и бекап делать по расписанию))
exit_node🙂‍↕️
Только тут мысль не понял
Выделил на обоих дисках небольшой раздел, добавил их в zpool в mirrored Далее выделил на этих же двух дисках по разделу на файлопомойку и объединил их в zpool в страйп Потом мне оказалось, что первых mirrored разделов мне мало. Создал третий раздел на двух дисках. Как их теперь подключить к первому mirrored пулу?
Станислав
Выделил на обоих дисках небольшой раздел, добавил их в zpool в mirrored Далее выделил на этих же двух дисках по разделу на файлопомойку и объединил их в zpool в страйп Потом мне оказалось, что первых mirrored разделов мне мало. Создал третий раздел на двух дисках. Как их теперь подключить к первому mirrored пулу?
В инете элементарно находится, прямо на официальном ресурсе openzfs. zpool add testpool -o ashift=12 mirror /tmp/sda3.img /tmp/sdb3.img Это я на файликах тренеруюсь, так можно с zfs. Создайте несколько файлов и проверяйте. Если всё ок, повторяете на реальном пуле
Станислав
Выделил на обоих дисках небольшой раздел, добавил их в zpool в mirrored Далее выделил на этих же двух дисках по разделу на файлопомойку и объединил их в zpool в страйп Потом мне оказалось, что первых mirrored разделов мне мало. Создал третий раздел на двух дисках. Как их теперь подключить к первому mirrored пулу?
Ещё можете включить у пула autoexpand и увеличить разделы при помощи parted (если есть свободное пространство сразу после раздела). ZFS сам увидит, что места прибавилось, а autoexpand разрешит это место автоматом занять.
Станислав
Т.е. можете оставить на всякий случай свободное место в середине диска. А потом, по надобности, увеличить первые разделы, которые используются в зеркале, или присоединить как страйп к файлопомойке
Станислав
Я же написал, что можете на файликах тренироваться. Так проверьте.
Nik
сейчас попробовал, без данных
Nik
Nik
впринципе видится как единое пространство
Станислав
Вначале но новом присоединенном зеркале вообще ничего не будет, кроме разметки ZFS. А новые данные будут поочередно записываться на первое и второе зеркало. НО можно добиться копирования данные с первого на второе, если первое удалить из пула. Тогда данные будут перенесены (если есть столько места) на второе зеркало, а первое удалено
Станислав
впринципе видится как единое пространство
Только sdd не имеет зеркального диска. Можете присоединить к нему: zpool attach testpool sdd sdX - "X" замените на свой диск/раздел/файл.
Станислав
пробовал два диска присоединять выдавало
sdd уже должен был быть в пуле, таким образом мы сообщаем к чему присоединить. Я же рекомендацию дал для пула, который увидел на предыдущем скрине
Станислав
чтобы добавить в существующий пул новый vdev, нужно использовать команду add и указать какого типа он должен быть (mirror в данном случае)
Khajiit
Однако, это очень странная схема. Лучше собрать отдельный из зеркальных vdev пул, отдельный — из одиночных дисков Для расширения использовать zpool add, как вам уже написали
Vladislav
Разделы - существуют. НЕТ, НУЖЕН LVM!
exit_node🙂‍↕️
А зачем спрашивать тут в чате и прислушиваться к Искусственному Идиоту?)
И не зря спросил тут в чате. Кожаный мешок мне помог в отличие от искусственного идиота и беглого гуглежа)
Free
TL;DR: cannot import [pool]: one or more devices is currently unavailable при этом устройство доступно и ошибок i/o не видно === История: Пару недель назад на сервере с несколькими десятками пулов на одиночных дисках некоторые пулы стали уходить в SUSPENDED из-за i/o ошибок (видны были в dmesg). Причина до конца не изучена, но через несколько дней это безобразие прекратилось. В SMART ни на одном из дисков ничего не появилось, все чистые. Лечил тривиальным zpool clear. Как правило, мгновенно очищалось и диск становился ONLINE, но несколько раз команда зависала, и любая другая команда zpool или zfs тоже - приходилось принудительно перегружать сервер. После одного из ребутов зарузка зависала - оказалось, из-за зависающего импорта одного из пулов. После отключения этого пула и успешной перезагрузки без него начались работы по восстановлению пула. 1. Просто импорт пула - приводит к зависанию zpool import и далее всех последующих команд zpool/zfs Сопровождается это паникой zfs в dmesg вида Thu May 1 01:38:14 2025] VERIFY0(dmu_buf_hold_array(os, object, offset, size, FALSE, FTAG, &numbufs, &dbp)) failed (0 == 5) [Thu May 1 01:38:14 2025] PANIC at dmu.c:1176:dmu_write() ... 2. Помог zpool import -fFX -o readonly=on Однако при этом в одном из датасетов пропала одна из директорий с основным объемом данных. zfs list показывал размер несколько TB, а du этого раздела - несколько МБ. Несколько других датасетов выжили, их данные спас и решил воскресить пропавшие. 3. По запросу могу рассказать, что из нагугленного оказалось бесполезно 😉, - остановился на возможности восстановиться до одной из TXG, полученной из zdb -u. 4. И вот сейчас - такое состояние: root@LiveDebian:~/ > zpool import -fFX -o readonly=on -T 6439777 -d /dev/disk/by-id s15 cannot import 's15': one or more devices is currently unavailable Причем до появления сообщений команда выполняется несколько десятков минут. Диск при этом на самом деле доступен (lsblk показывает, zdb на нем выполняется). Сообщений об ошибках в dmesg не появляется, никаких событий zpool также не обнаруживает: root@LiveDebian:~/ > zpool events s15 TIME CLASS 5. Есть нюанс: чтобы избежать частых ребутов основного сервера - лечение провожу через ноутбук, подключив к нему диск через USB (не вынимая диск из основного сервера, так как это довольно сложно). Попробую возобновить на основном сервере, благо в последних попытках зависания с паникой и вынужденным ребутом вроде бы прекратились - но, может, у кого-то есть мысли по возможным причинам unavailable, не связанным с USB? ❓ Приложение. Исходный сервер: Hewlett-Packard HP Z420 Workstation/1589 Debian 12 6.12.9+bpo-amd64 zfs-2.2.7-1~bpo12+1 zfs-kmod-2.2.7-1~bpo12+1 Ноутбук: zfs-2.3.1-1~bpo12+1 zfs-kmod-2.3.1-1~bpo12+1
Разобрался с ошибкой импорта по старым TXG 💪. Сообщение у них не верное. Дело не в недоступности дейвайса, а в ошибках проверки данных/метаданных при импорте. Когда отключил /sys/module/zfs/parameters/spa_load_verify_data /sys/module/zfs/parameters/spa_load_verify_metadata - то импорт стал происходить мгновенно (ранее для разных TXG занимал от 50 минут до 2+ часов, прежде чем ошибку unavailable выдавал). Только это параметры НЕ динамические, нужно их в /etc/modprobe.d/zfs.conf прописывать и перегружаться. PS Однако основная проблема не решилась: со старыми TXG импортируется также, как с дефолтным и выдает на основную папку с данными ☠️ reading directory '/s15/289/storage/storage': Invalid exchange PPS Что интересно - та же самая команда БЕЗ опции -T не проверяет данные/метаданные, импортирует сразу (с дефолтным TXG)
Vladislav
Я как-то забыл про неё
Free
А, в таком случае стоило добавить -n
Пробовал. Без -T - показывал, что может импортировать, и действительно импортировал. C -T - тоже говорил про unavailable. Invalid exchange он в любом случае не разпознает, что с -n что без него
Free
Разве? Мне казалось, что это иммитация импорта БЕЗ реального импорта
Vladislav
👆.
-fFXn я имею ввиду
Vladislav
Да, он не пытается починить пул