2

Есть некоторая информация об изменениях формы в RAID-массивах, но я немного нервничаю и хотел бы получить подтверждение:

Проблема: у меня 2 500 ГБ накопителя в качестве программного рейда 5 (mdadm). Я хотел бы освободить один из двух дисков, так как избыточность RAID для слабаков ... Могу я просто

mdadm --grow --array-size=1

с последующим

mdadm --grow --raid-disks 1?

Это кажется слишком простым. Как мне указать, какой диск будет освобожден? Одна из причин этого маневра в том, что у меня нет дополнительного места для запуска резервного копирования.

Изменить: Как это, это не стандартная реализация RAID5 (см. Комментарии Дэйва М или gman). Однако, пожалуйста, не наказывайте меня за безрассудство. Я просто заинтересован в наименее рискованном способе удаления диска. Давайте предположим, что я позаботился о проблеме резервного копирования, но я не собираюсь использовать ее для восстановления из резервной копии.


$ sudo mdadm --detail --test /dev/md1 
/dev/md1:
        Version : 00.90
  Creation Time : Sat Sep  1 18:08:21 2007
     Raid Level : raid5
     Array Size : 488383936 (465.76 GiB 500.11 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

Update Time : Mon Nov 28 11:32:13 2011
      State : clean

Активные устройства: 2 Рабочие устройства: 2 Неисправные устройства: 0 Запасные устройства: 0

     Layout : left-symmetric
 Chunk Size : 64K

       UUID : XXX (local to host XXX)
     Events : 0.29336

Number   Major   Minor   RaidDevice State
   0       8       33        0      active sync   /dev/sdc1
   1       8       17        1      active sync   /dev/sdb1

2 ответа2

3

При использовании mdadm RAID 5 с двумя накопителями является двоичным идентичным RAID1, а не RAID 0, и не существует волшебного невидимого устройства. Вы можете сказать, потому что массив имеет тот же размер, что и каждый из двух компонентов, а не их сумму:

Array Size : 488383936 (465.76 GiB 500.11 GB)
Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

Вы можете подтвердить это, выполнив:

 dd if=/dev/sdb1 bs=512 count=1024 of=/tmp/b1
 dd if=/dev/sdc1 bs=512 count=1024 of=/tmp/c1

 md5sum /tmp/b1
 md5sum /tmp/c1

MD5 одинаков для каждого, потому что диски являются избыточными. Поскольку это то же самое, что и RAID, после его остановки мы можем либо создать RAID1 на тех же устройствах и иметь те же данные:

mdadm -C /dev/md1  --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Или выполните RAID1 только с одним устройством, освобождая другое:

mdadm -C /dev/md1  --level=1 --raid-devices=1 --force /dev/sdb1

Затем очистите суперблок от удаленного:

mdadm /dev/sdc1 --zero-superblock

Поскольку это суперблок mdadm версии 0.90, каждый диск также должен использоваться самостоятельно. Поскольку 1.1 и 1.2 помещают метаданные в начало массива, они не будут работать для этих версий.

1

Я понимаю, что на этот вопрос был дан ответ несколько лет назад, но недавно я решил похожую проблему, и я думаю, что смогу внести некоторую ясность как в вопрос, так и в ответ Рэя М ...

Подобный двухдисковый RAID5 с суперблоком версии 1.2, как сказал Рэй М, двоичен и идентичен RAID1. Однако, в отличие от версий v0.9, массивы с метаданными 1.x могут оставлять разрыв между началом устройства и началом данных массива. Итак, чтобы проверить эквивалентность двух устройств, сначала определите смещение данных каждого компонента:

mdadm --examine /dev/sdb1
mdadm --examine /dev/sdc1

Вы должны увидеть такую строку для каждого устройства (по умолчанию одинаково для обоих):

Data Offset : 262144 sectors

Здесь начинаются данные устройства. Начиная здесь, скопируйте некоторые данные:

dd if=/dev/sdb1 skip=262144 bs=512 count=1024 of=/tmp/b1
dd if=/dev/sdc1 skip=262144 bs=512 count=1024 of=/tmp/c1

Суммы md5 должны быть равны:

$ md5sum /tmp/b1 /tmp/c1
6b327bb46f25587806d11d50f95ff29b  /tmp/b1
6b327bb46f25587806d11d50f95ff29b  /tmp/c1

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

mdadm /dev/md1 --fail /dev/sdc1 --remove /dev/sdc1
mdadm --zero-superblock /dev/sdc1

Или начните заново с одного диска RAID1:

mdadm --stop /dev/md1
mdadm --create /dev/md1 --level 1 --raid-devices 1 --force /dev/sdb1
mdadm --zero-superblock /dev/sdc1

Обратите внимание, что несмотря на двоичную эквивалентность RAID5 для двух дисков RAID1, вы не можете просто:

mdadm --grow --raid-devices 1

с двухдисковым RAID5.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .