Как стать автором
Обновить

Комментарии 22

Создадим RAID-50 на 12-ти дисках: и можно создать RAID-10

Самая распространенная ошибка. Команда типа

zpool create -o ashift=12 diskpool raidz /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde2 /dev/sdf2 raidz /dev/sdh2 /dev/sdi2 /dev/sdj2 /dev/sdk2 /dev/sdl2 /dev/sdm2


Создает RAID-05. За подробностями, если не верите — в официальный гайд.

PS. Да, RAID10 она тоже не умеет. Только RAID01
Подробности тут: docs.oracle.com/cd/E23823_01/html/819-5461/gaypw.html Скопирую сюда


zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
The second mirror keyword indicates that a new top-level virtual device is being specified. Data is dynamically striped across both mirrors, with data being redundant between each disk appropriately.

Выделение — мое
Как я понимаю по производительности будет лучше и без потери надежности
Ну с производительностью все сложнее. Все зависит от того, какую именно надо. IOPS вроде должны подрасти, а линейная — упасть. Но я таких тестов не делал. Я сторонник RAIDZ3 на максимум возможного.
Это именно RAID-10. А не 0+1 в варианте 3-х дисков. И не в варианте 0+1, где два страйпа зазеркалены (производительность и надёжность в этом варианте еквиваленты RAID10).

Преимущество RAID10 над RAID0+1 второго варианта в том, что в RAID 0+1 Вы уже никогда не сможете добавить устройств в онлайн режиме. Я не видел вариантов второго типа RAID 0+1, в которые можно добавить пару дисков, каждый к своему страйпу, что-бы они легко и просто отзеркалились. В RAID10, Вы просто добавляете зеркало из двух дисков к общему страйпу, и всё это доступно в онлайн режиме.
Вы немного неправы. Что бы не разводить дискуссию с перепечатками, поищите zfs internals — там описано, как с помощью zdb узнать 100%, где и как какие данные хранятся.
Data is dynamically striped across both mirrors, with data being redundant between each disk appropriately.

Выделение — мое


Да, именно эту часть Вы перевели неверно. См. мой коментарий ниже.
Опять же ниже ответил. Если кратко, то как раз в этой фразе и скрыто краткое описание того, почему zfs не тормозит в случае потери одного из дисков.

Просто примите, что в случае более чем одного vdev в пуле, данные между ними объединяются аналогично raid0 (и только им). Или говоря языком перевода, данные размазываются по всем vdev в пуле равномерно (более-менее, если варианты, когда будет перекос). А из чего состоит каждый vdev — это уже дело админа. И данные между vdev никак не мигрируют.

На пальцах и грубо (очень грубо). Если я решил записать на пул из 4 дисков в «зеркале» два байта 00 и ff.

В случае с zfs на первых двух дисках будет записано 00, на вторых — ff.
В случае c raid10, на первых двух дисках будет записано 00ff, и на вторых — 00ff.

В этом и состоит принципиальная разница между raid01 и raid10.
В случае c raid10, на первых двух дисках будет записано 00ff, и на вторых — 00ff.


Вы описали зеркало зеркал N+N, что не имеет никакого отношения к RAID-10.

RAID 10 — массив RAID 0, построенный из массивов RAID 1;

RAID 50 — массив RAID 0, построенный из массивов RAID 5;

RAID 05 — массив RAID 5, построенный из массивов RAID 0;

Для построения RAID 05, Вам потребуется как минимум 3 страйпа (concat). Эта конфигурация в ZFS никогда не поддерживалась.

В ZFS on Linux, это можно иcxитриться сделать, создав 3 пула в каждом по 2 диска в страйп конфигурации, и далее создав на в каждом пуле zvol, а уже после этого, из этих zvol состряпать пул raidz. Вот это будет RAID 05. Но этого даже врагу не пожеласешь.
Кажется, мы говорим друг другу об одном и том же, только используя пересекающуюся терминологию, которая по сути не совпадает.

В смысле если использовать только ту терминологию (да, она более правильная, более распространенная и теде), то да. Я снимаю свои возражения. Да, ТЕ команды делают RAID10 и RAID50.

PS Я учился давно, когда «RAID50 означало массив RAID5, собранный из как минимум трех RAID0»
По всей видимости Вы учились не только давно, но и плохо. RAID50 всю жизнь был массив RAID 0, собранный из массивов RAID 5;
Самая распространенная ошибка. Команда типа


Позволю себе с Вами не согласиться, приведя в качестве аргумента ссылку на документацию, а заодно и цитату.
Creating a Mirrored Storage Pool

The second mirror keyword indicates that a new top-level virtual device is being specified. Data is dynamically striped across both mirrors, with data being redundant between each disk appropriately.


Перевод: Второе ключевое слово mirror, означает, что указано новое вируальное устройство верхнего уровня. Данные динамически «страйпятся» на оба зеркала, при этом данные отказоустойчивы между соответствующими дисками.



Прошу прощения за «страйпятся», не смог перевести это адекватно (к примеру как «полосатятся»), термин в СХД устоявийся.

Итак, если это крякает как утка, выглядит как утка, — то это и есть утка. В данном случае RAID10 (страйп зеркал).

Абсолютно тоже самое произойдёт и со страпингом vdev типа raidz (RAID5), raidz2(RAID6), raidz3 (RAID с тройной чётностью).

И есть один немаловажный момент, который мог ввести Вас в заблуждение: В документации сказано о том, что Solaris не поддерживает страйп-конфигурации пулов для корневой ФС.
Пойду с конца. Про страйп для корневой. Давно поддерживает.

  pool: rpool
 state: ONLINE
  scan: resilvered 120G in 2h5m with 0 errors on Mon Dec 29 13:37:16 2014
config:

        NAME                         STATE     READ WRITE CKSUM
        rpool                        ONLINE       0     0     0
          mirror-0                   ONLINE       0     0     0
            c1t5000C5003BAFCFF3d0s0  ONLINE       0     0     0
            c1t5000C5003BA4C02Bd0s0  ONLINE       0     0     0


Живая солярка грузится с зеркала. И omniOS тоже умеет.

Про raid 10/01. Да, я немного педант. Ибо данные все-таки ходят немного по другому.

Опять же, что согласно Вашей логике должно получиться после команды create pool mirror disk1 disk2 raidz1 disk3 disk4 disk5? :) Да, извращение но ведь сработает и сделает raid0(1/5), а не raid(5/1)0

Что касается перевода, то он полностью соответствует тому, что я раньше написал. Говоря другими словами, данные страйпятся между vdev, в каждом из которых данные защищены реданданси (да, тяжело с англицизмами)

Именно сама технология страйпинга между vdev и является основной фишкой zfs, благодаря которой она не впадает в дикие тормоза при выходе одного из дисков.
Простите, но Вы неправы. Прошу смотреть мои другие комментарии, выше.
RAID-10 — страйп одного или нескольких зеркал (пар дисков)
RAID-50 — страйп одного или нескольких RAID5 массивов
И.т.д.

RAID-0+1 — имеет два варианта:
а) 3-х дисковый вариант, где блоки страйпятся на два диска из трёх в раунд робине
б) Одно зеркало двух страйпов, — о недостатках было в комментарии выше.
Правильно, не верьте мне. Но родной утилите-то поверите? zdb -d{ddd — по вкусу, но чем больше, тем точнее и дольше, на живых разделах будет ОЧЕНЬ долго}. Она покажет, как и что и где хранится.
Пойду с конца. Про страйп для корневой. Давно поддерживает.

pool: rpool
state: ONLINE
scan: resilvered 120G in 2h5m with 0 errors on Mon Dec 29 13:37:16 2014
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t5000C5003BAFCFF3d0s0 ONLINE 0 0 0
c1t5000C5003BA4C02Bd0s0 ONLINE 0 0 0


Это не страйп, это зеркало (RAID-1), оно поддерживалось всегда.
Прошу пардону. В пылу не то скопипастил. Солярки официальной нет. Есть омни

rpool               ONLINE       0     0     0
          raidz2-0                 ONLINE       0     0     0
            c1t5000C50033D82E43d0  ONLINE       0     0     0
            c1t5000C50033D88717d0  ONLINE       0     0     0
            c1t5000C50033FB94E3d0  ONLINE       0     0     0
            c1t5000C5003404A3A7d0  ONLINE       0     0     0
            c1t5000C5003404B613d0  ONLINE       0     0     0
            c1t5000C5003404D837d0  ONLINE       0     0     0


Скажу сразу: зачем так было сделано, я не понимаю пока. Ибо было сделано до меня и давно и вообще неправда.
Я за Solaris, года два как следить перестал. Поэтому всё может быть. Ветки ZFS тоже сильно разошлись у сообщества и Oracle. В Oracle версии ZFS например даже зачатки поддержки кластеризации, ~полтора года назад добавили.
Да, разошлись сильно. Но меня пока спасает, что zfs send/receive не поломали и благодаря этому я потихоньку мигрирую на линуксы
После года борьбы с ZOL при boot и root на zfs никому не посоветую пользоваться этим на Linux. Периодическое нежелание грузиться в целом или, скажем, импортировать pool с рутовым разделом при старте отбило всякое желание. Причём судя по багтрекеру, как минимум одной проблеме далеко не первый год. И постоянно переживать «а поднимется ли при очередном рестарте/после очередного upgrade сервер сам или нужно будет лезть в консоль, чтобы сделать всё руками» — зачем оно?

Допилят btrfs — можно будет пользоваться. А хотите zfs — используйте солярку/FreeBSD, как, например, делаю я :)
Да порт ZFS on Linux, пока ещё рановато запускать в суровый «enterprise».

«а поднимется ли при очередном рестарте/после очередного upgrade сервер сам или нужно будет лезть в консоль, чтобы сделать всё руками»


Но по моим наблюдениям, большинство проблем с ZFS on Linux, — сводится к ошибкам администратора.

Причинами тех пробем, что Вы описали, могли быть следующие из списка:

1. Версия пула не поддерживается загрузчиком GRUB2. Ошибка администратора, — обновление версии пула без чтеня changelogs и проверки зависимостей;
2. Несоответствие параметров ядра, рекомендованным для работы с ZFS;
3. Не прописанная или прописанная неверно опция bootfs пула (При этом GRUB грузит ОС либо через раз, либо раз из 10, либо ручного импорта пула);
4. До определённых версий ZFS, GRUB2 не поддерживал её загрузку с не GPT партиций;
5. Недостаточно памяти, либо zfs_arc_max выставлен в слишком маленькое значение;
6. Также была ошибка, при которой трудно было загрузиться, в версии 0.6.3 (починили в 6.4), я всё время про эту ошибку забывал: Попытка удаления ФС или zvol приводила к дедлоку в одном из демонов zfs, после, чего он дампился. Комп продолжал работать, однако административные функции zfs, переставали работать. После перезагрузки пул не мог быть импортирован. Потерь или порчи данных не было.

Шестая проблема лечилась так:

1. Загрузка с LiveCD FreeBSD
2. zpool import
3. zpool export
4. Грузимся с самого пула
5. Откатываемся на 0.6.2 (если позволяют фичи), если нет, то не удаляем никакие ФС, до тех пор пока не забываем.

А btrfs, по моему, ещё дальше от продуктивного использования, чем zfs. И эта оценка, абсолютно субъективна.

В целом, я портом ZFS on Linux, очень доволен. Он очень сильно облегчает жизнь.

Привет, что-то пост ваш как-то мимо меня прошел, прошу прощения.
Вполне справедливое дополнение к моей статье, спасибо, добавил ссылку на ваш пост

Но вот только один момент:
Заметив в руководстве к свершению подвига несколько ошибок…
1. Устанавливать ZFS поверх mdadm массива — это излишнее расточительство ресурсов ЦПУ и излишний дисковый ввод-вывод. ZFS сама прекрасно создаст RAID-0/1/5/6(z2)/z3.

Я не описывал установку zfs на mdadm массив, массив создавался только для /boot раздела и работал он отдельно от zfs. Для всего остального я использовал raidz.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации