mdadm: растущая странность массива RAID0
Я создал 3 массива RAID0, используя mdadm на 3 Rackspace CloudServers, используя Rackspace CloudBlockStorage в качестве своих устройств. Каждый массив имеет свой собственный набор томов 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 ТБ? Или я неправильно вырастил второй массив (зеркальный сервер) и у меня нет диска четности, который, как я думал, я собирался получить? Что я могу сделать, или что я должен был сделать, чтобы последовательно наращивать эти массивы?
1 ответ
Я также столкнулся с его проблемой и после некоторого тестирования смог вырастить массив Software RAID 0.
Я нашел вариант, который, если вы думаете об этом, имеет смысл включить в команду Grow, опция: --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