Назад | Перейти на главную страницу

mdadm - Удалить диск из RAID0

Итак, я хотел бы знать, с помощью mdadm можно делать следующее:

  1. Начну с конфигурации RAID0 на 2-х дисках: sda и sdb.
  2. Я хочу добавить в массив еще один диск, sdc и переместить все данные из sdb к нему.
  3. Отключить sdb.

Сейчас я вижу только один вариант - останавливаю массив, копирую sdb к sdc с участием dd или любой другой инструмент для копирования блоков и снова запустите массив.

Я что-то упускаю? Можно ли это сделать с помощью mdadm?

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

Кредиты для Zoredache за идею!

Итак, ситуация:

  • у вас есть массив RAID0 из двух дисков
  • вы хотите заменить один из них без простоя массива

Если время простоя приемлемо, вы всегда можете просто сделать блочную копию диска с помощью dd и повторно собрать массив, mdadm все сделает.

Решение: используйте RAID4 как промежуточное решение

RAID0 -> RAID4 -> RAID0

Итак, если вы не помните RAID4, это просто. У него есть блок четности, но, в отличие от RAID5, он не распределяется по массиву, а находится на ОДНОМ диске. В этом суть, это важно, и по этой причине RAID5 не работает.

Что вам понадобится: еще два диска того же размера, что и диск, который вы хотите заменить.

Окружающая среда:

  • Ubuntu 14.04 Надежный Thar
  • mdadm - v3.2.5 - 18 мая 2012 г.
  • / dev / sdb - начать с него, заменим
  • / dev / sdc - начать с него
  • / dev / sdd - будет использоваться временно
  • / dev / sde - будет использоваться вместо sdb

Полное руководство по mdadm для RAID0 с горячим резервированием;)

sudo mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[bc]

md0 : active raid0 sdc[1] sdb[0]
      2096128 blocks super 1.2 512k chunks

Мы создали массив raid0, выглядит мило.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Это наша контрольная точка - если хотя бы один бит будет отличаться в результате /dev/md0 - мы потерпели неудачу.

sudo mdadm /dev/md0 --grow --level=4

md0 : active raid4 sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Итак, мы расширили наш массив до RAID4. Мы еще не добавили диск четности, так что давайте сделаем это. Прирост будет мгновенным - пересчитывать и пересчитывать нечего.

sudo mdadm /dev/md0 -a /dev/sdd

md0 : active raid4 sdd[3] sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [===>.................]  recovery = 19.7% (207784/1048064) finish=0.2min speed=51946K/sec

Мы добавили sdd как диск четности. Это важно помнить - порядок дисков в первой строке не синхронизируется с изображением во второй строке! [UU_]

sdd отображается первым, но на самом деле последний и содержит не данные, а четность.

sudo mdadm /dev/md0 -f /dev/sdb

md0 : active raid4 sdd[3] sdc[1] sdb[0](F)
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

Мы сделали наш диск sdb неисправным, чтобы удалить его на следующих шагах.

sudo mdadm --detail /dev/md0

State : clean, degraded

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty spare   /dev/sdb

Подробности показывают нам удаление первого диска, и здесь мы можем увидеть истинный порядок дисков в массиве. Важно отслеживать диск с четностью, мы не должны оставлять его в массиве при возврате к RAID0.

sudo mdadm /dev/md0 -r /dev/sdb

md0 : active raid4 sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

sdb полностью удален, можно было забрать.

sudo mdadm /dev/md0 -a /dev/sde

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
      [==>..................]  recovery = 14.8% (156648/1048064) finish=0.2min speed=52216K/sec

Мы добавили замену нашему sdb-диску. И начнем: теперь данные SDB восстанавливается с использованием четности. Милая.

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU]

Готово. Сейчас мы в полной безопасности - все данные из sdb восстановлены, и теперь нам нужно удалить sdd (помните, что он сохраняет четность).

sudo mdadm /dev/md0 -f /dev/sdd

md0 : active raid4 sde[4] sdd[3](F) sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Сделал sdd неисправным.

sudo mdadm /dev/md0 -r /dev/sdd

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Удалил sdd из нашего массива. Мы готовы снова стать RAID0.

sudo mdadm /dev/md0 --grow --level=0 --backup-file=backup

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [=>...................]  reshape =  7.0% (73728/1048064) finish=1.5min speed=10532K/sec

Аааааа и бац!

md0 : active raid0 sde[4] sdc[1]
      2096128 blocks super 1.2 512k chunks

Готово. Посмотрим на контрольную сумму md5.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Есть еще вопросы? Так что у RAID0 может быть «горячий» резерв. Это называется "пользователь";)

Насколько мне известно, после настройки RAID0 вы не можете изменить один из дисков. Вы можете сделать резервную копию, переключить диски и восстановить резервную копию. Я бы просто RAID5 на тех 3 дисках, которые у вас есть. Таким образом, в будущем вы сможете сбросить диск и при этом восстановить его.

RAID 0 не обеспечивает избыточности.

Таким образом, он не поддерживает замену горячего диска.