LINUX.ORG.RU
решено ФорумAdmin

zfs on linux, рейд из обычного пула и ashift (Подземный стук) - cannot attach /dev/sdxX to /dev/sdyY: can only attach to mirrors and top-level disks

 ashift, ,


0

2

Подскажите, пожалуйста - где косяк?

Поставил Debian Bookworm, 3T раздел с данными сделал на zfs (навскидку дало одной командой превратить обычный пул в рейд.)

#zpool status zer0-safe
pool: zer0-safe
state: ONLINE
config:

NAME STATE READ WRITE CKSUM
zer0-safe ONLINE 0 0 0
sda3 ONLINE 0 0 0

errors: No known data errors

Долго чистил 3T диск для рейда.
Подготовил, сказал:
# zpool attach zer0-safe /dev/sda3 /dev/sdc2
Оно мне ответило:
cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks

Выпал в осадок, гуглить... Нагуглил только заклинание: -o ashift=9
Исполнил:
#zpool attach -o ashift=9 zer0-safe /dev/sda3 /dev/sdc2
Отработало.
# zpool status zer0-safe
pool: zer0-safe
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Wed Apr 3 00:13:24 2024
133G scanned at 214M/s, 700K issued at 1.10K/s, 2.51T total
0B resilvered, 0.00% done, no estimated completion time
config:

NAME STATE READ WRITE CKSUM
zer0-safe ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda3 ONLINE 0 0 0
sdc2 ONLINE 0 0 0 block size: 512B configured, 4096B native

errors: No known data errors

Размер блока 512Б (ashift=9), а родной у диска 4096.
Посчитал, задетачил и:
# zpool attach -o ashift=12 zer0-safe /dev/sda3 /dev/sdc2 -f
cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks

Та же ошибка... Почему с ashift=9 всё стартует, а с нативным нет?

Есть какие то мысли?

P.S. Пробовал ashift=11,10 - Не взлетело, с 9 опять взлетело и серебрится...



P.P.S. Обновлю старт топика. Такой вот косяк у zfs. При создании пула - каким то образом выбирается определенный ashift (В зависимости от накопителя) и при добавлении другого накопителя в пул - используется ashift другого накопителя. Если они не совпадают - zfs выдаёт совершенно бредовую диагностику: «cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks» не имеющую ни чего общего с сутью проблемы.
Я пока вижу два решения... Или писать меньшими блоками на устройство с большими блоками или писать большими блоками на устройство с меньшими блоками.


Решение пока не ясно. На устройство с меньшими блоками (ashift=9) писать большими блоками? (ashift=12?)
Но это тогда ещё тот геморрой... Создать на устройстве с ashift=12 - новый пул, рсинкнуть туда 3T данных, удалить старый пул (на современном 4T 7200RPM диске с блоком 512Б) и подключить его с размером блока 4к.

Интересно посмотреть с каким ashift создастся новый зеркальный пул из устройств с разными размерами блоков? ashift 9? 12? Но я этого уже не осилю... Переразбивать, рсинкать, перезаливать....

★★★

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

Ответ на: комментарий от n0mad

Внимание: прочитайте описание разметки Markdown.

А конкретно к чему претензии?

Ну если только pre поставить в начале? Не хуже получилось?

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

Параметр ashift глобальный для всего пула, и задаётся только при создании

Вы не верите написанному?
Сделал пул zer0-safe на разделе sda3, естественно по дефолту у него ashift=12
Подключаю раздел sdc2 (У диска тоже сектор 4к) - шлёт с диагностикой: «cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks»
Тупо при подключении ставлю ashift=9 и всё работает.... Но ругается на: «block size: 512B configured, 4096B native»

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

Пересоздай пул с ashift=12.

В пуле 3Т данных... Это разве что создать пул на новом диске, всё туда рсинкнуть и добавлять первый...
С ashift тоже не всё понятно...

# zpool get ashift zer0-safe
NAME PROPERTY VALUE SOURCE
zer0-safe ashift 0 default

default это сколько? Где узнать? Разве что новый 4Т диск (тот на котором я создал пул) с другим, нежели 4к размером кластера (У старого 3T диска - дефолтный размер: 4к).
И непонятно... Почему шлёт с диагностикой: «cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks» ?

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

С подземным стуком стало немного понятнее... Всё зависит от диска.
На новом 4Т диске, родной ashift=9 (512B)
Узнал это командой
#zdb

zer0-safe:
...
ashift: 9
...

На старом 3T диске - ashift=12 (4096B)
Вот теперь и думать... Или старый диск подключать с ashift=9 или делать новый пул на старом диске (с ashift=12) и потом подключать к нему новый с ashift=12...
Или новый 4T: Toshiba 3.5" MG03ACAxxx(Y) Enterprise HDD - писать блоками по 4096b
Или старый 3T: Toshiba 3.5" DT01ACA... Desktop HDD - писать блоками по 512b

Остаётся непонятным зачем/почему zfs в диагностике писал это:

cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks

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

Или новый 4T: Toshiba 3.5" MG03ACAxxx(Y) Enterprise HDD - писать блоками по 4096b Или старый 3T: Toshiba 3.5" DT01ACA… Desktop HDD - писать блоками по 512b

Ну дык, ынтерпризе вродь 512б на сектор, вот по нему и выставляется ашыфт. А у столверхного диска уже давно 4к, и ставится ашыфт по нему соответственно. Ставь ашыфт=12 при создании пулга и всё.

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

Ну дык, ынтерпризе вродь 512б на сектор, вот по нему и выставляется ашыфт.

Кто бы ещё знал что: «cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks
» это про разницу ashift у тома и вновь подключаемого диска.

А у столверхного диска уже давно 4к, и ставится ашыфт по нему соответственно. Ставь ашыфт=12 при создании пулга и всё.

Пусть Десктоп помучается с 512... Не хочу пересоздавать, тудасюдапереливать полный 3Т пул.

А этот топик надеюсь будет попадаться в поиске тем кто попал на эту диагностику и не знает что делать.

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

» это про разницу ashift у тома и вновь подключаемого диска.

ZFS определяет оптимальное значение ashift при создании пула. И да, в некоторых случаях ошибка может быть связана с различием в размере блока между дисками.

Здесь важно знать характеристики дисков перед установкой значения ashift.

Если использовать ashift=12 для диска, который поддерживает только 512-байтовые блоки, это может привести к ненужному расходу места на диске.

ashift=9 может привести к снижению производительности. Поэтому важно, чтобы значение ashift соответствовало наибольшему размеру блока, поддерживаемому дисками.

Пусть Десктоп помучается с 512… Не хочу пересоздавать, тудасюдапереливать полный 3Т пул.

# zpool attach -o ashift=12 zer0-safe /dev/sda3 /dev/sdc2

Это не изменит ashift для существующих дисков в пуле, но будет использоваться для нового диска.

Но это может привести к несовместимости размеров блоков между дисками в пуле. Если возможно, лучше всего использовать диски с одинаковым размером блока в одном пуле.

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

это про разницу ashift у тома и вновь подключаемого диска.

ZFS определяет оптимальное значение ashift при создании пула. И да, в некоторых случаях ошибка может быть связана с различием в размере блока между дисками.

Однако в: https://habr.com/ru/articles/504692/ есть строки: «Свойство ashift устанавливается для каждого виртуального устройства vdev, а не для пула, как многие ошибочно думают — и не изменяется после установки.»
Так кто прав?

Здесь важно знать характеристики дисков перед установкой значения ashift.

Я вообще не понимаю логики если там же написано: «Если вы случайно сбили ashift при добавлении нового vdev в пул, то вы безвозвратно загрязнили этот пул устройством с низкой производительностью и, как правило, нет другого выхода, кроме как уничтожить пул и начать всё сначала. Даже удаление vdev не спасёт от сбитой настройки ashift!»

Если использовать ashift=12 для диска, который поддерживает только 512-байтовые блоки, это может привести к ненужному расходу места на диске.

При этом там же утверждается: «Для сравнения, за слишком большой размер ashift нет практически никакого штрафа. Реального снижения производительности нет, а увеличение неиспользуемого пространства бесконечно мало (или равно нулю при включённом сжатии). Поэтому мы настоятельно рекомендуем даже тем дискам, которые действительно используют 512-байтовые секторы, установить ashift=12 или даже ashift=13, чтобы уверенно смотреть в будущее.»

ashift=9 может привести к снижению производительности. Поэтому важно, чтобы значение ashift соответствовало наибольшему размеру блока, поддерживаемому дисками.

Но для этого надо создать временный пул, рсинкнуть всё на него, затем пересоздать основной пул и вернуть всё взад...

Пусть Десктоп помучается с 512… Не хочу пересоздавать, тудасюдапереливать полный 3Т пул.

# zpool attach -o ashift=12 zer0-safe /dev/sda3 /dev/sdc2
Это не изменит ashift для существующих дисков в пуле, но будет использоваться для нового диска.

Вы уверены? У меня же в топикстарте:

# zpool attach -o ashift=12 zer0-safe /dev/sda3 /dev/sdc2 -f
cannot attach /dev/sdc2 to /dev/sda3: can only attach to mirrors and top-level disks
Та же ошибка... Почему с ashift=9 всё стартует, а с нативным нет?

Но это может привести к несовместимости размеров блоков между дисками в пуле. Если возможно, лучше всего использовать диски с одинаковым размером блока в одном пуле.

Кто бы ещё об этом знал «до того как»?
Кстати какой командой можно посмотреть размер блока у диска?

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

Кстати какой командой можно посмотреть размер блока у диска?

# smartctl -i /dev/sda
......
=== START OF INFORMATION SECTION ===
Model Family: Toshiba 3.5" MG03ACAxxx(Y) Enterprise HDD
Device Model: TOSHIBA MG03ACA400
Serial Number: Z4FEK62FF
LU WWN Device Id: 5 000039 5fbd822f6
Firmware Version: FL1A
User Capacity: 4 000 785 948 160 bytes [4,00 TB]

Sector Size: 512 bytes logical/physical

Rotation Rate: 7200 rpm
Form Factor: 3.5 inches
Device is: In smartctl database 7.3/5319
ATA Version is: ATA8-ACS (minor revision not indicated)
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Sat Apr 6 17:08:04 2024 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

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