Уменьшить RAID, удалив диск?

Вопрос или проблема

У меня есть Synology NAS с 12 отсеками. Изначально мы решили выделить все 12 дисков для одного тома RAID-6, но теперь мы хотели бы уменьшить объем, чтобы использовать только 10 дисков и назначить два HDD в качестве резервных.

Мастер управления томами может легко увеличить объем, добавляя жесткие диски, но я не нашел способа уменьшить объем, удаляя жесткие диски. Как я могу это сделать, не переинициализируя всю систему?

Для этого я предполагаю, что в массиве 12 дисков, и каждый из них имеет объем 1 ТБ.

Это означает, что доступно 10 ТБ хранилища. Это, например, при условии, что вы не используете более 6 дисков (6 ТБ) хранилища, тогда не имеет значения, какого они размера.

Обязательный дисклеймер: ничто из этого может не поддерживаться Synology, поэтому я бы проверил с ними, может ли этот подход вызвать проблемы, заранее сделал резервное копирование и остановил любые службы Synology. Насколько мне известно, Synology использует стандартные md raid массивы, и они доступны, если диски перемещаются на стандартный сервер, который поддерживает md, так что проблем не должно быть.

Обзор

Последовательность выглядит так:

  1. Уменьшите размер файловой системы
  2. Уменьшите размер логического тома
  3. Уменьшите размер массива
  4. Верните размер файловой системы обратно
  5. Преобразуйте резервные диски в горячие резервные

Файловая система

Найдите основной раздел, используя df -h, он должен выглядеть примерно так:

Файловая система          Размер   Использовано  Доступно   Использ.  Подключена к
/dev/vg1/volume_1        10T      5T          5T        50%      /volume1

Используйте эту команду, чтобы изменить размер до максимума, который необходим, и не больше:

umount /dev/vg1/volume_1
resize2fs -M /dev/vg1/volume_1

Теперь проверьте:

mount /dev/vg1/volume_1 /volume1
df -h

Файловая система          Размер   Использовано  Доступно   Использ.  Подключена к
/dev/vg1/volume_1        5T      5T          0T        100%      /volume1

Том

Чтобы уменьшить размер тома, используйте lvreduce (сделайте его немного больше на всякий случай):

umount /dev/vg1/volume_1
lvreduce -L 5.2T /dev/vg1/volume_1

Теперь, когда логический том был уменьшен, используйте pvresize для уменьшения размера физического тома:

pvresize --setphysicalvolumesize 5.3T /dev/md0

Если изменение размера не удастся, смотрите вот этот другой вопрос для перемещения частей данных, которые были выделены в конце физического тома к началу.

Теперь у нас есть объем 5.3T на массиве 10T, так что мы можем безопасно уменьшить размер массива на 2T.

Массив

Узнайте устройство md:

 pvdisplay -C
 PV         VG      Fmt  Attr PSize   PFree
 /dev/md0   vg1     lvm2 a--  5.3t    0.1t

Первый шаг – сказать mdadm уменьшить размер массива (с ростом):

mdadm --grow -n10 /dev/md0
mdadm: это изменение уменьшит размер массива.
       используйте --grow --array-size сначала, чтобы обрезать массив.
       например, mdadm --grow /dev/md0 --array-size 9683819520

Это говорит о том, что для того, чтобы разместить текущий массив на 10 дисках, нам нужно уменьшить размер массива.

 mdadm --grow /dev/md0 --array-size 9683819520

Теперь он меньше, мы можем уменьшить количество дисков:

 mdadm --grow -n10 /dev/md0 --backup-file /root/mdadm.md0.backup

Это займет долгое время и может быть отслежено здесь:

 cat /proc/mdstat

Персоналии: [raid6] [raid5] [raid4]
md4 : активный raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[1] sdj4[1] 
      [>....................]  форма =  1.8% (9186496/484190976)
                              завершить=821.3мин скорость=9638K/с [UUUUUUUUUU__]

Но нам не нужно ждать.

Измените размер PV, LV и файловой системы до максимума:

pvresize /dev/md0
lvextend -l 100%FREE /dev/vg1/volume_1
e2fsck -f /dev/vg1/volume_1
resize2fs /dev/vg1/volume_1

Назначьте резервные диски в качестве резервных

Здесь нечего делать, любые резервные диски в массиве автоматически являются резервными. Как только ваше изменение формы завершится, проверьте статус:

cat /proc/mdstat

Персоналии: [raid6] [raid5] [raid4]
md4 : активный raid6 sda4[0] sdb4[1] sdc4[2] sdd4[3] sde4[4] sdf4[5] sdg4[6] sdh4[7] sdi4[S] sdj4[S] 

Расширяя ответ @Paul – прошло 10 лет, и хотя основной принцип все еще работает, некоторые вещи изменились. Вот проблемы, с которыми я столкнулся, и как я с ними справился.


Во-первых, я не смог размонтировать /volume1 из-за того, что некоторые процессы на системе имели открытые дескрипторы файлов. В моем случае это были synologan и postgres, которые я смог остановить с помощью:

systemctl stop synologand
systemctl stop pgsql

Если это вам не помогает, вам придется собрать lsof из исходников, что может быть довольно сложной задачей, но любой статически скомпилированный x86_64 ELF бинарный файл должен работать на DSM. Как только у вас это будет, вы можете выполнить следующую команду, чтобы найти процессы с открытыми дескрипторами файлов:

./lsof | fgrep /volume1/

Следующее, устройство, подключенное к /volume1/, у меня было /dev/mapper/cachedev_0, которое каким-то образом поддерживается /dev/mapper/vg1-volume_1, но эти два не взаимозаменяемы. resize2fs необходимо выполнять на cachedev, в то время как lvreduce (или lvm lvreduce теперь) необходимо выполнять на vg-volume.

Некоторые важные примечания:

  1. Запуск lvm lvreduce на vg1-volume_1 не синхронизировал уменьшенный размер с cachedev_0, поэтому после того, как этот шаг был выполнен, я перезагрузил свой NAS, чтобы попытаться предотвратить возможные повреждения данных посредством доступов к cachedev_0. Перезагрузка синхронизировала размер (но очевидно, что я должен был снова выполнить шаг unmount).
  2. Я настойчиво советую получить копию screen где-то и запускать resize2fs внутри этого. Потому что это может занять действительно много времени (более 24 часов для меня), и если ваша SSH-сессия разорвется в какой-то момент, процесс будет убит, и ваша файловая система может оказаться в поврежденном состоянии.
  3. Я также советую запускать resize2fs с -p, чтобы он уведомлял вас о текущем прогрессе, потому что в противном случае нет способа узнать, займет ли это еще минуту или целую неделю.
  4. Если вы не можете получить screen или уже начали команду и беспокоитесь о том, что ее могут убить, вы можете отсоединить ее от вашей SSH-сессии, нажав ctrl-Z и запустив bg, затем disown -h. В этот момент вы больше не сможете получить ее вывод или код завершения, но, по крайней мере, она не будет убита, если ваша SSH-сессия разорвется. Вы можете проверить, существует ли процесс, с помощью ps.

В какой-то момент после написания поста Пола, но до 2020 года, Synology применил патч к своей ветке mdadm, который явно отказывается уменьшать количество дисков в пуле, который не является RAID-0 или RAID-1. Я не знаю, почему они это сделали, поскольку драйвер ядра поддерживает это вполне нормально, и я смог уменьшить пул RAID-6 с 8 до 5 дисков, удалив этот патч, но это уже совершенно другая проблема, которую я описал в этом посте.

Ответ или решение

Уменьшение RAID, удаляя диск: подробное руководство

Если у вас есть Synology NAS с 12 отсеков для жестких дисков и вы хотите уменьшить RAID-6, чтобы использовать только 10 дисков, выделив 2 HDD в качестве запасных, данный процесс потребует тщательной подготовки и выполнения. Ниже представлено пошаговое руководство.

Важные замечания перед началом

  1. Резервное копирование данных: Независимо от проделанных операций, всегда создавайте резервные копии важных данных.
  2. Проверка совместимости: Убедитесь, что ваша версия Synology поддерживает уменьшение RAID. В более поздних версиях ПО Synology могут быть ограничения на случайные изменения конфигурации RAID.
  3. Остановка всех сервисов: Перед выполнением операций желательно остановить все активные сервисы на NAS, чтобы предотвратить возможные потеря данных.

Шаги для уменьшения RAID

1. Уменьшение размера файловой системы

Для начала необходимо уменьшить размер файловой системы, которая будет использована RAID. Используйте команду df -h, чтобы узнать, какая файловая система используется. Далее выполните следующие шаги:

umount /dev/vg1/volume_1
resize2fs -M /dev/vg1/volume_1

Проверьте результат командой df -h, чтобы удостовериться, что реморазмер был уменьшен.

2. Уменьшение логического тома

После уменьшения файловой системы необходимо уменьшить размер логического тома:

umount /dev/vg1/volume_1
lvreduce -L 5.2T /dev/vg1/volume_1

Здесь размер стоит указать немного больше, чтобы учесть возможные ошибки.

3. Уменьшение размера физического тома

Далее уменьшите размер физического тома, чтобы отражать изменения в размере логического тома:

pvresize --setphysicalvolumesize 5.3T /dev/md0

Если команда не сработает, возможно, потребуется переместить данные на физическом уровне, что описано в дополнительных источниках.

4. Уменьшение массива RAID

На этом этапе можно перейти к уменьшению самого массива RAID. Выполните следующие команды по снижению количества дисков:

mdadm --grow --array-size 9683819520 /dev/md0
mdadm --grow -n10 /dev/md0 --backup-file /root/mdadm.md0.backup

Следите за процессом изменения состояния массива командой:

cat /proc/mdstat
5. Расширение PV, LV и файловой системы до максимума

После того, как уменьшение завершено, можно вернуть размер обратно к максимальному значению:

pvresize /dev/md0
lvextend -l 100%FREE /dev/vg1/volume_1
e2fsck -f /dev/vg1/volume_1
resize2fs /dev/vg1/volume_1

Установите запасные диски

Запасные диски в RAID обычно автоматически определяются как спаренные. Вам не нужно выполнять дополнительные действия для их настройки.

Заключение

Уменьшение объема RAID требует аккуратного подхода и последовательного выполнения всех необходимых шагов. Важно помнить о резервном копировании и проверке каждого процесса на наличие ошибок. Если возникнут проблемы с управлением устройствами, стоит обратиться за поддержкой к службе поддержки Synology. Это поможет минимизировать риски и защитить ваши данные.

SEO-оптимизация

Ключевые слова: уменьшение RAID, Synology NAS, RAID-6, управление томами, шпаргалка по RAID, провайдер хранения, резервное копирование данных.

Оцените материал
Добавить комментарий

Капча загружается...