Прежде, чем заявить «Пффф, да всё легко, шо вы тут мне втираете», ответьте мысленно на простенький вопрос — какой объём (в количестве дисков) будет у raid10 в mdadm, если в массиве 3 диска? Ответили? Правда же вы ответили, что-то вроде «либо полтора диска, либо один диск»? Нет? Присаживайтесь — я, конечно, не коммитил в raid10.c, но кое что когда-то нагуглил про него, да и хорошие люди показали-рассказали.
Погнали.
Если постараться свести всю статью в одно предложение, то можно выразиться примерно так — «raid10 в mdadm — это не raid1+0 или raid0+1, хотя и может ими быть, если повезёт, посмотрите в man mdadm | grep raid10».
Для начала подготовим стенд, 5 луп… эээ… loop devices по 1 гигабайту размером:
Сделаем блочные устройства из файлов:
/dev/loop9
/dev/loop10
/dev/loop11
/dev/loop12
/dev/loop13
Чудненько, теперь у нас есть блочные устройства /dev/loop{9..13}, из которых мы можем собирать что-то в mdadm.
Пробуем что-нибудь простенькое:
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
...
/dev/md0 2.0G 6.0M 1.9G 1% /mnt
Выглядит ожидаемо. А что там за непонятные буквы в мане?
...
/dev/md0 990M 2.6M 921M 1% /mnt
У нас получился raid1 из 4 дисков?
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 loop12[3] loop11[2] loop10[1] loop9[0]
1046528 blocks super 1.2 512K chunks 4 far-copies [4/4] [UUUU]
Вроде всё верно, raid10.
Получится ли сделать «raid0» из raid10?
...
mdadm: RUN_ARRAY failed: Invalid argument
Не выходит каменный цветок — нужно минимум 2 копии файлов.
Но всё это приводит нас к тому, что md10 из двух дисков с двумя копиями — это вроде как бы raid1. И с тремя копиями из трёх дисков — тоже вроде бы raid1
Сейчас самое время задать логичный вопрос — ну и что? Вроде как пока что всё логично, raid0 из некоторого количества raid1, пусть и с тремя-четырьмя дисками в зеркале.
Давайте сделаем странное:
...
/dev/md0 1.5G 4.5M 1.4G 1% /mnt
И ещё разок:
...
/dev/md0 2.4G 7.5M 2.3G 1% /mnt
Ну теперь-то я вас заинтриговал?
Да, в raid10 из нечетного количества дисков размер массива будет кратен половине объёма диска. И у вас будет по две (или сколько там вы написали) копии ЛЮБОГО блока, а не «ну на трёх дисках, наверное, получится зеркало из двух дисков плюс один диск не будет дублироваться, а массив будет объёмом в 2 диска».
Почему? Их есть у нас. Попробуем представить схему работы в raid10 в виде матрицы, где одинаковые цифры — копии блоков (столбцы — диски):
3 3 4 4
5 5 6 6
7 7 8 8
Можно справедливо предположить, что на трёх дисках получится такой массив:
3 3 4
5 5 6
7 7 8
Но на самом деле raid10 (в ооооочень-очень упрощённом виде) всегда работает так:
2 3 3
4 4 5
5 6 6
Что приводит нас на самом деле к ещё одному неприятному эффекту. Возможна (подчёркиваю — возможна, не обязательно с вашим массивом будет именно так) ситуация, когда при битом блоке на диске ваш массив отработает не так, как ожидает нормальный человек:
3 3 2 4
5 5 4 6
. . 6 .
А примерно следующим:
2 3 3 4
4 5 5 6
6 ...
И никаких «парных» дисков у вас не будет вообще.
А может быть это и вовсе дефолтное поведение, я не помню, честно говоря -)
Да, надо не забыть почистить систему от наших экспериментов:
К чему я вообще весь этот разговор затеял?
— НЕ ВЫДЁРГИВАЙТЕ 2 диска из md-raid10 НИКОГДА, БЛ*. Есть шансы потерять данные. Не, ну если копий больше двух — то 2 диска дёрнуть можно.
— если у вас 3 ssd и вам нужно одновременно оптимальные скорости чтения, записи и, одновременно, надёжность — делайте raid10 из 3 ssd с -p f2, будет хорошо (тут стоит отметить, что raid-ы с математикой исторически имели баги, приводящие к потере данных — а одинаковые блоки на дисках они и есть блоки на диске).
ЗЫ — nARN, я помню, что это ты мне рассказал.
ЗЗЫ — да, есть far-copies и near-copies (-p n и -p f, соответственно). Но лучше в мане смотрите — я могу спороть полную чушь, потом краснеть придётся.
Ну и в заключение хотелось бы сразу ответить всем тем, кто сейчас уже пишет гневное «ууу, md, ужас-ужас, медленно! Только хардкор, только хардварные».
Во-первых, закажите что-нибудь от adaptec год назад — получили? То-то же. LSI? Спасибо, знаем, покушали, больше не надо.
Во-вторых, md raid1 держит на запись 7 гигабайт в секунду на современных железках (и проц от этого не напрягается вообще) — и я даже хызы, где сейчас взять диски ещё быстрее. Разве что optane, но «are you akhueli optane in raid??».
Ну а по поводу raidz позвольте ответить цитатой из чатика:
у меня недавно 2 хоста с zfs ушли в вечный d-state
nikoinlove 🐈, [07.07.2022 23:36]
[In reply to inkvizitor68sl]
вот такой зфс я узнаю
nikoinlove 🐈, [07.07.2022 23:37]
а работает с 2 гигами рам на рейдз не очень узнаю
Комментариев пока нет.