Я обновляю программный массив RAID 1 (/dev/md0) с дисков емкостью 2 ТБ (sda и sdb) до 4 ТБ (sdc и sdd). Прямо вперед; ext3 , один раздел, без MBR, без LVM. В конце я хотел бы иметь два устройства /dev/mdX , одно с исходным массивом, другое с новым массивом, оба с одинаковыми данными. Из того, что я собрал, есть два варианта:

ОПЦИЯ 1:

  1. сделать резервную копию существующего массива
  2. размонтировать существующий массив
  3. вставьте диск объемом 4 ТБ и добавьте его в массив
    mdadm --manage /dev/md0 --add /dev/sdc1
  4. выйдите из строя один из дисков объемом 2 ТБ и дождитесь восстановления массива
    mdadm --manage /dev/md0 --fail /dev/sda1
    mdadm --manage /dev/md0 --remove /dev/sda1
  5. вставьте оставшийся диск 4ТБ и добавьте его в массив
    mdadm --manage /dev/md0 --add /dev/sdd1
  6. сбой на оставшемся диске объемом 2 ТБ, дождитесь восстановления массива
    mdadm --manage /dev/md0 --fail /dev/sdb1
    mdadm --manage /dev/md0 --remove /dev/sdb1
  7. Что мне делать здесь, чтобы повторно активировать массив 2 ТБ под новым номером /dev/mdX ? Могу ли я просто набрать:
    mdadm create /dev/md1 --assume-clean /dev/sda1 /dev/sdb1

ПРОФИ: гарантированное зеркалирование данных, устройство mdX можно отключить, чтобы избежать несоответствий
Минусы: нужно синхронизировать дважды (медленно)

ВАРИАНТ 2:

  1. Создайте новый массив с дисками 4 ТБ:
    mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
  2. Создайте файловую систему в /dev/md1 (так же, как в /dev/md0)
  3. Mount /dev/md1
  4. Скопируйте файлы, используя один из:
    tar -C /mnt/md0 --atime-preserve -clSf - . | tar -C /mnt/md1 -xvf -
    --or--
    rsync -avHhx --progress /mnt/md0 /mnt/md1

ПРОФИ: синхронизировать нужно только один раз
Минусы: нет гарантии, что резервная копия является точной (за пределами флагов, используемых для tar или rsync)

Какой метод предпочтительнее и почему? Есть ли лучший способ [1]?

[1] Я читал об использовании dd , но изменение размера mdX после копирования кажется проблемой, и мне все равно нужно создать новый /dev/mdX для одного из массивов.

ОБНОВЛЕНИЕ В итоге я выбрал вариант 2, так как он, безусловно, самый безопасный и "самый чистый". Я также включил комментарии / предложения ниже, с некоторыми важными оговорками:

  1. fdisk (в настоящее время) не работает надежно для разделов размером более 2 ТБ , рекомендуется использовать parted с использованием таблицы разделов gpt
  2. хэширование для проверки передач rsync - отличная идея. К сожалению, dd не подходит, так как читает весь том, включая нули. Таким образом, по определению хэши накопителей емкостью 2 и 4 ТБ будут разными. Кроме того, dd должен прочитать все 2 ТБ данных, чтобы получить хэш, и не может обрабатывать каталоги, что исключает проверку отдельных критических папок. Существуют программы (md5sumd или md5deep), которые рекурсивно хешируют каталоги, но такая тщательность не требует времени, необходимого для чтения и хеширования 2 ТБ данных. Вместо этого, я взбитый сырой сценарий для diff вывода ls -lAR для обоего томов (к счастью , размеры блока были одинаковыми между ними), и просто хэшируются любые файлы с различным сообщенным размером. В итоге проверка 2ТБ заняла всего пару минут.

1 ответ1

0

Вариант 1 на самом деле не так уж и хорош, после того, как вы добавили новые диски в md0, вам все равно придется расширять файловую систему ext3, так же как и вариант 2, если вы используете dd. За исключением того, что это занимает больше времени и много шансов, что все пойдет не так.

Если вы должны идти по этому пути, вы должны сделать примерно следующее:

Создайте раздел raid (0xDA или 0xFD) с помощью fdisk

fdisk /dev/sdc
fdisk /dev/sdd

Добавить новый диск в массив

mdadm --fail /dev/md0 /dev/sda1
mdadm --remove /dev/md0 /dev/sda1
mdadm --add /dev/md0 /dev/sdc1

Дождитесь окончания ресинхронизации, затем добавьте еще один

mdadm --fail /dev/md0 /dev/sdb1
mdadm --remove /dev/md0 /dev/sdb1
mdadm --add /dev/md0 /dev/sdd1

Подождите, пока повторная синхронизация завершится, затем увеличьте md0. Имейте в виду, что вы подвержены сбоям диска во время повторной синхронизации, которая происходит чаще, чем думает большинство людей, потому что диски находятся в состоянии максимальной нагрузки.

mdadm --grow /dev/md0 --size=max --backup-file=/root/mnt/grow_md0.bak
mdadm --detail --scan >> /etc/mdadm.conf

Вам не нужна опция резервного файла, но она защищает вас от непредвиденных сбоев, таких как отключение питания во время работы. Он должен быть на другом физическом диске (переформатировать + перемонтировать один из старых дисков или на флэш-накопитель), или это не соответствует цели.

Сначала дайте md0 хорошую проверку, затем вы можете увеличить ext3 fs.

umount /mount/point-md0
fsck /dev/md0
resize2fs /dev/md0
mount -t ext3 /dev/md0 /mount/point-md0

Единственным потенциальным преимуществом этого подхода является то, что если вы готовы пойти на некоторые риски, вы можете сделать это без отключения md0. resize2fs может на самом деле вырастить ваш fs онлайн (но не сжать), и в этом случае вы просто обходитесь без последовательности umount-fsck-mount.

Чтобы повторно активировать старый массив, вы должны использовать --assemble, --create, скорее всего, повредит / уничтожит существующие данные.

mdadm --assemble --force /dev/md1 /dev/sda1 /dev/sdb1

Вариант 2 определенно является «более чистым» решением. Гораздо меньше шансов, что что-то пойдет не так, потому что у вас всегда есть хотя бы один полностью избыточный массив.

Создайте раздел raid (0xDA или 0xFD) с помощью fdisk

fdisk /dev/sdc
fdisk /dev/sdd

сделать MD1

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

Создайте файловую систему и смонтируйте ее

mkfs.ext3 -L some-label /dev/md1
mount -t ext3 /dev/md1 /mount/point-md1

Сделайте md0 доступным только для чтения, и rsync должен гарантировать целостность файла, с дополнительным бонусом очистки всей фрагментации в пути.

mount -o remount,r /dev/md0 /mount/point-md0
rsync -axHAXS --delete --progress /mount/point-md0 /mount/point-md1

Обновите mdadm.conf

mdadm --detail --scan > /etc/mdadm.conf

И не забудьте обновить fstab!


Касательно этой темы:

  • rsync будет копировать только файлы, где mdadm resync также скопирует «пустые» неопределенные пробелы.

  • Существует несколько причин для использования RAID1, если вы не загружаетесь с него (в этом случае вам также необходимо обновить загрузчик), RAID10 предоставит вам такую же защиту, но более высокую производительность, если в массиве будет более двух физических дисков.

  • LVM на самом деле помогает вам с миграцией и резервным копированием. Например, в Варианте 2, вместо того, чтобы монтировать его только для чтения, перед тем как копировать файлы, которые являются полу-автономными в течение потенциально очень долгого времени, вы можете сделать снимок LVM, двухпроходный rsync и завершить миграцию только несколько секунд простоя.

  • Если бы я мог хранить все четыре физических диска в коробке, я бы сделал три раздела RAID на каждом. Небольшой RAID1 для /boot, LVM+RAID10 приличного размера для высокопроизводительных компонентов, таких как база данных, и LVM+RAID5 /6 для хранения.

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