Я создал 3 массива RAID0 с помощью mdadm на 3 серверах Rackspace CloudServer, используя CloudBlockStorage от Rackspace в качестве своих устройств. Каждый массив имеет свой собственный набор томов CBS. RS-CBS имеет верхний предел для своих дисков 1 ТБ, и мне нужно было хранилище большего размера. Один из серверов предназначен для хранения данных, второй - это действующее зеркало этого сервера, а третий - ночной снимок. Я создал массив на каждом из серверов с помощью этой команды:
mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/xvdb1 /dev/xvdd1 /dev/xvde1
Когда пришло время наращивать массив, а так как это был мой первый рост, я начал с наименее важного сервера: сервера моментальных снимков. Я добавил новый том и, немного повозившись, придумал эту команду:
mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdf1
Согласно странице руководства mdadm, там сказано, что вы не можете увеличить массив RAID0, поэтому mdadm преобразует его в RAID4, увеличивает его, а затем преобразует обратно. (Он никогда не конвертируется обратно, но это уже другая проблема). Массив меняет форму, но размер не меняется. Я предполагаю, что новый диск просто стал диском с четностью для массива. Итак, чтобы получить необходимое мне место, я добавил еще один том:
mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdg1
Это меняет форму и дает мне дополнительные 500 ГБ, на которые я надеялся, поэтому я resize2fs /dev/md0
и мне хорошо идти; 2 ТБ места.
Вот тут-то и случаются странности. Я переключаюсь на рост массива на зеркальном сервере. Зная из предыдущих шагов, что мне нужно будет добавить два тома, чтобы получить необходимое мне дополнительное пространство, я использую эту команду:
mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdf1 /dev/xvdg1
Он меняет форму, и все выглядит хорошо, но когда я resize2fs /dev/md0
за которым следует df -hal
Я вижу, что он действительно вырос и сообщает 2,5 ТБ места, а не 2,0 ТБ, которые я ожидал. Это как если бы он не создавал диск с четностью, который, как я предполагал, был создан при первом запуске, и использовал все доступное пространство для массива.
Одна вещь, которая выглядела иначе, - это результат mdadm -D /dev/md0
после переделки на зеркальном сервере. Я видел это для устройств RAID:
Number Major Minor RaidDevice State
0 202 17 0 active sync /dev/xvdb1
1 202 49 1 active sync /dev/xvdd1
2 202 65 2 active sync /dev/xvde1
5 202 97 3 active sync /dev/xvdg1
4 202 81 4 active sync /dev/xvdf1
5 0 0 5 removed
Выход cat /proc/mdstat
показывает, что он преобразовал в RAID4:
Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid4 xvdg1[5] xvdf1[4] xvdd1[1] xvdb1[0] xvde1[2]
2621432320 blocks super 1.2 level 4, 512k chunk, algorithm 5 [6/5] [UUUUU_]
unused devices: <none>
Итак, меня беспокоит ... Я неправильно увеличил размер первого массива (сервера моментальных снимков), и он должен был получить 2,5 ТБ, но моя ошибка дала ему только 2,0 ТБ? Или я неправильно увеличил второй массив (зеркальный сервер) и у меня нет диска четности, который, как я думал, я собираюсь получить? Что я могу сделать или что я должен был сделать, чтобы эти массивы постоянно увеличивались?
Я тоже столкнулся с его проблемой и после некоторого тестирования могу вырастить программный массив RAID 0.
Я нашел вариант, который, если вы думаете, имеет смысл включить в команду роста, вариант: --backup-file
. Если вы думаете об этом, чтобы реально увеличить массив RAID 0, как если бы вы делали это на оборудовании, вам нужно будет скопировать данные в другом месте, чтобы уничтожить и воссоздать массив, если нет, я бы хотел, чтобы математика увеличивалась массив RAID 0 без лишнего места (действительно).
Еще я обнаружил, что я не смог просто добавить один диск в массив RAID 0, он работает, только если я добавлю два диска, больше еще не пробовал.
Таким образом, команда для увеличения массива RAID 0 будет (для вашего случая):
mdadm --grow /dev/md0 --raid-devices=5 \
--backup-file=/drive/With/Enough/Space/growth.bak --add /dev/xvdf1 /dev/xvdg1