LINUX.ORG.RU
решено ФорумAdmin

Можно ли апгрейдить RAID1 с установленной системой до RAID10 без потери данных?

 ,


1

2

Всем привет! Есть сервер с Debian 9. Система установлена на RAID1 /dev/md0p1 (состоит из 2х Intel DC S3700 200Gb).

sda 8:0 0 186,3G 0 disk 
└─sda1 8:1 0 186,3G 0 part 
└─md0 9:0 0 186,2G 0 raid1 
└─md0p1 259:0 0 186,2G 0 md /
sdb 8:16 0 186,3G 0 disk 
└─sdb1 8:17 0 186,3G 0 part 
└─md0 9:0 0 186,2G 0 raid1 
└─md0p1 259:0 0 186,2G 0 md /

Планируется докупить ещё 2 таких же диска и превратить массив в RAID10.

Как можно это сделать с минимальным простоем и без потери данных?

Перейти на ZFS

Вставляешь два новых диска в пул ZFS Mirror.

Копируешь данные с RAID1 на ZFS.

Перезагружаешься и проверяешь, всё ли правильно сделал.

Очищаешь старый RAID1, проверяешь диски на Bad-блоки, делаешь полное обнуление дисков, входящих в RAID1 с помощью команды «dd id=/dev/zero of=/dev/sdXY bs=16M».

Включаешь старые диски в ZFS-пул в виде второго зеркала (будь внимателен) - получаешь RAID-10.

iZEN ★★★★★
()
Ответ на: Перейти на ZFS от iZEN

а если серьезно

Вставляешь два новых диска в пул ZFS Mirror.

вот это интересно. Именно в mirror можно? И потом он расширяется до raid10 ?

Deleted
()
Ответ на: комментарий от dpronyaev

а в чем проблема то? Я пытаюсь понять подковырку в вопросе, в чем сложность. Обычно это делается копированием из старого в новый неполный массив (с отсуствтующими дисками).

Какие-то требования?

Я вот за online беспокоюсь, не очень понимаю чем тут поможет zfs.

Еще момент, если не ошибаюсь (рад бы ошибаться!), mdadm raid10 не умеет неполный массив начиная с зеркала, он делает неполный на основе raid0 который потом расширяется до raid10. Таким образом возникает опасный момент без избыточности.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Собираешь из 2-х новых дисков degraded raid10, переносишь на него данные, ставишь загрузчик, правишь конфиги. Ребутаешься, если все ок, добавляешь старые диски в новый массив. Был бы lvm, можно было бы на живую все провернуть.

Deleted
()
Ответ на: комментарий от Deleted

Мне кажется при создании неполного рейда по схеме disk missing disk missing этот опасный момент получается миновать, я не прав?

dpronyaev
() автор топика
Ответ на: комментарий от Deleted

Как собрать недорейд и потом добавить диски я понимаю.

А как тащить данные? Загрузиться с live-usb, смонтировать старый и новый рейд в папки, потом

rsync /mnt/старый_рейд/ /mnt/новый_рейд
?

И как потом лучше установить загрузчик?

Полагаю использовать Linux Mint, он в live режиме вроде умеет в mdadm.

dpronyaev
() автор топика
Ответ на: комментарий от dpronyaev

Вот мне как раз кажется, что не получится. 'disk missing disk missing' - получается raid0, а не raid1

Deleted
()
Ответ на: комментарий от dpronyaev

А как тащить данные? Загрузиться с live-usb, смонтировать старый и новый рейд в папки, потом rsync

Типа того.

И как потом лучше установить загрузчик?

man grub2-install

Сделай себе виртуалку, и потренируйся на ней.

Deleted
()
Ответ на: комментарий от Deleted

вот это интересно. Именно в mirror можно? И потом он расширяется до raid10 ?

Да, на ZFS любую гирлянду можно сделать из виртуальных устройств высокого уровня. Проблема в том, что отдельные виртуальные устройства расширить в сторону величения объёма нельзя, можно только увеличить (уменьшить) их надёжность.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от Deleted

Точно. Сейчас запилю экспериментальную среду, напишу что получится)

dpronyaev
() автор топика
Ответ на: комментарий от ktk

Cпасибо кстати! Проблемы online решается. Транзит через raid0 остается.

Deleted
()
Ответ на: комментарий от iZEN

Но как? Вот у нас 4 диска по 200.

Мы делаем mirror из двух == 200.

Затем, хотим сделать raid10, но

расширить в сторону величения объёма нельзя

Как получить raid10 на 400 ?

Через raid0 же придется, разьве нет? (делаем raid0 из двух == 400, расширяем до raid10 == 400)

Deleted
()
Ответ на: комментарий от Deleted

Простой RAID-1:

> zpool create sample mirror /dev/ada1 /dev/ada2
> zpool status sample
state: ONLINE
  scan: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        sample       ONLINE       0     0     0
          mirror-0   ONLINE       0     0     0
            ada1     ONLINE       0     0     0
            ada2     ONLINE       0     0     0

Превращаем RAID-1 в RAID-10:

> zpool add sample mirror /dev/ada3 /dev/ada4

> zpool status sample
state: ONLINE
  scan: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        sample       ONLINE       0     0     0
          mirror-0   ONLINE       0     0     0
            ada1     ONLINE       0     0     0
            ada2     ONLINE       0     0     0
          mirror-1   ONLINE       0     0     0
            ada3     ONLINE       0     0     0
            ada4     ONLINE       0     0     0

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от Deleted

Это чтобы никогда больше не смог увеличивать размер массива ?

Добавляем ещё один диск в пул для увеличения объёма:

> zpool add sample /dev/ada5

> zpool status sample
state: ONLINE
  scan: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        sample       ONLINE       0     0     0
          mirror-0   ONLINE       0     0     0
            ada1     ONLINE       0     0     0
            ada2     ONLINE       0     0     0
          mirror-1   ONLINE       0     0     0
            ada3     ONLINE       0     0     0
            ada4     ONLINE       0     0     0
          ada5       ONLINE       0     0     0

Повышаем надёжность:

> zpool attach sample ada5 /dev/ada6

> zpool status sample
state: ONLINE
  scan: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        sample       ONLINE       0     0     0
          mirror-0   ONLINE       0     0     0
            ada1     ONLINE       0     0     0
            ada2     ONLINE       0     0     0
          mirror-1   ONLINE       0     0     0
            ada3     ONLINE       0     0     0
            ada4     ONLINE       0     0     0
          mirror-2   ONLINE       0     0     0
            ada5     ONLINE       0     0     0
            ada6     ONLINE       0     0     0

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Иногда неудобно дробить один большой массив на несколько поменьше. В одно дисковое пространство это не соберётся, верно ?

Deleted
()
Ответ на: комментарий от Deleted

В одно дисковое пространство

sample — это и есть дисковое пространство. ZFS pool. там уже могут быть представления датасетов или томов. а все эти mirror-* «под капотом». на листинге видна вложенность.

system-root ★★★★★
()
Ответ на: комментарий от system-root

я просто тугой, и не понимаю магии. Еще раз уточню.

Мы создаем зеркало1, например, 200+200=200 ГБ. Используем его. Ок

Через некоторое время, мы создаем новое зеркало2, 200+200=200ГБ, делаем магический пассы, и получаем stripe на зеркалах 1 и 2 200+200=400ГБ, прозрачно для данных находящихся на зеркале1, все это продолжает работать. Устройство просто увеличило размер и можно растянуть ФС раздела.

Так?

Deleted
()
Ответ на: комментарий от Deleted

делаем магический пассы, и получаем stripe на зеркалах 1 и 2 200+200=400ГБ, прозрачно для данных находящихся на зеркале1, все это продолжает работать. Устройство просто увеличило размер

С этого момента несовсем верно.

Для расширения Z-пула нужно добавить виртуальное устройство, которое создаётся сразу или физическое новое устройство после добавления к пулу миррорится впоследствии с ещё одним новым устройством.

и можно растянуть ФС раздела.

«Оно само» (C).

iZEN ★★★★★
()
Ответ на: комментарий от Deleted

я правильно понимаю, что в таком случае, sample - это stripe из mirror-i ?

Пул sample - это страйп из набора отдельных зеркал (mirror-i). Вместо зеркал могут быть другие виртуальные устройства (raidz, raidz2, raidz3) или физическое остройство (как в примере до дополнения его до зеркала).

iZEN ★★★★★
()
Ответ на: комментарий от Deleted

насчёт растягивания — посмотри про датасеты в документации, т.к. это не привычное тебе понятие ФС.
они могут иметь точки монтирования и тогда в них можно класть данные, а могу иметь, но с запрещением монтироватся, могут быть вложенные, могут наследовать какие-то параметры.

NAME                MOUNTPOINT
rpool               /
rpool/system        none
rpool/system/ubuntu /
rpool/srv           none
rpool/srv/backup    /srv/backup
rpool/swap0         -

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от futurama

А как узнать что это именно RAID-10, а не два склеенных RAID-1 ?

При работающем массиве физически отключить по одному (любому) диску из каждого зеркала и посмотреть, как дальше будет работать.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от futurama

Думаешь, он знает чем отличается raid-0 от «склейки»?

anonymous
()
Ответ на: комментарий от iZEN

Вот у тебя есть один RAID-1, набитый файлами

Ты добавил еще одно «пустое» зеркало.

ЗФС автоматом сделает «размазывание» (strip) файлов с первого зеркала по двум? Ты понял вопрос?

futurama ★★★★★
()
Ответ на: комментарий от futurama

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

iZEN ★★★★★
()
Ответ на: комментарий от Deleted

Пока сделал так: Откусил от старого RAID1 md0 1 диск; Собрал новый RAID10 md3 из 3 дисков; Скопировал данные из md0 в md3; Заменил в /etc/fstab и в /boot/grub/grub.cfg UUID старого рейда на новый.

Теперь система грузится с / на новом рейде. Осталось перенести grub в новый RAID10, а после разобрать старый RAID1. Но тут загвоздка. Пытаюсь ставить на /dev/md3 - получаю

# grub-install /dev/md3
Выполняется установка для платформы i386-pc.
grub-install: предупреждение: Невозможно найти физический том «(null)». Некоторые модули в базовом образе могут отсутствовать..
grub-install: предупреждение: Невозможно найти физический том «(null)». Некоторые модули в базовом образе могут отсутствовать..
grub-install: предупреждение: Файловая система «ext2» не поддерживает встраивание.
grub-install: предупреждение: Встраивание невозможно. При имеющихся параметрах GRUB можно установить только с помощью списка блоков (blocklists). Однако, список блоков является НЕНАДЁЖНЫМ механизмом и его лучше не использовать..
grub-install: ошибка: не будет продолжена с использованием blocklists.

Кажется, я что-то делаю не так.

dpronyaev
() автор топика
Ответ на: комментарий от iZEN

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

anonymous
()
Ответ на: комментарий от iZEN

Извраты домохозяек не перестают быть извратами от публичного признания в инстаграме

anonymous
()
Ответ на: комментарий от dpronyaev

Кажется, я что-то делаю не так.

Не хочу разбираться в твоих извратах, но думаю тебе стоит погуглить на счет установки grub на raid0. Не удивлюсь, если ты найдешь решение.

anonymous
()

Всё, запилил на тестовой виртуалке. Спасибо всем советовавшим! Оставлю пошаговый алгоритм для будущих поколений)

1) СОЗДАНИЕ ВТОРОГО РЕЙДА

#Для новых дисков нужно создать структуру разделов идентичную тем, что уже в raid

sfdisk -d /dev/vda --force | sfdisk /dev/vdc --force
sfdisk -d /dev/vda --force | sfdisk /dev/vdd --force

#Для начала вытащим 1 диск из raid1, т.к. нам нужно минимум 3 диска для создания raid10

mdadm /dev/md0 --fail /dev/vdb1 --remove /dev/vdb1
#Собираем деградированный RAID10 как /dev/md3 и монтируем его. Обязательно добавим запись о новом массиве, чтобы после перезагрузки он оставался
mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/vdb1 /dev/vdc1 /dev/vdd1 missing
mdadm --examine --scan > /etc/mdadm/mdadm.conf
update-initramfs -u

#Создаем ФС на новом массиве

mkfs.ext4 /dev/md3

2) ВЫБРАТЬ ДРУГОЙ КОРЕНЬ ФС

#В файле /boot/grub/grub.cfg везде заменить UUID md0, на UUID md3

cdee676d-736c-4028-b419-8d30a6f550c2 на 205e4eb4-84b2-46ef-a220-0aaeb917d4f3

#После этого

update-initramfs -u

#В файле /etc/fstab и /etc/mtab заменить UUID /dev/md0 на UUID /dev/md3

3) ПЕРЕНЕСТИ ДАННЫЕ

#Переносим данные с /dev/md0 на /dev/md3

mkdir /mnt/md3
mount -t ext4 /dev/md3 /mnt/md3
rsync -avHxl --progress --inplace --exclude 'lost+found' / /mnt/md3/
umount /mnt/md3

#Перезагрузиться. В качестве / должен теперь быть md3.

4) УДАЛИТЬ СТАРЫЙ РЕЙД, ДОСОБРАТЬ НОВЫЙ

#Разобрать старый рейд, очистить диск, добавить его в RAID10

mdadm -S /dev/md0
mdadm --zero-superblock /dev/vda1
mdadm /dev/md3 --add /dev/vda1

#Пересканировать рейд, обновить запись о массиве

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

УСТАНОВИТЬ GRUB НА ВСЕ ДИСКИ #укажем все 4 диска

dpkg-reconfigure grub-pc

После перезагрузки наслаждаемся RAID10.

dpronyaev
() автор топика
Последнее исправление: dpronyaev (всего исправлений: 1)
Ответ на: комментарий от futurama

Ээээ, а как это иначе то можно сделать? Lustre в аналогичной ситуации работает точно также. Принудительная балансировка делается, обычно, просто копированием файлов (в этот момент они уже размазываются по всем разделам) и удалением старых. Разве что в ZFS нет для этого отдельного тула, для автоматизации. В Lustre для этого используется lfs_migrate.

silw ★★★★★
()
Ответ на: комментарий от silw

Принудительная балансировка делается, обычно, просто копированием файлов (в этот момент они уже размазываются по всем разделам) и удалением старых

Плохой метод.

futurama ★★★★★
()
Ответ на: комментарий от futurama

зато работает. причем такое механизм позволяет делать очень гибкие миграции. из того, что приходилось: просто любые старые файлы, только толстые или, наоборот, только мелкие (чтобы сбалансировать inodes).

silw ★★★★★
()
Ответ на: комментарий от futurama

Принудительная балансировка делается

Плохой метод

ZFS не знаю, но знаю, что есть снапшоты и send/recv.
Делаем снапшот. Создаем новую фс. Передаем снапшот в новую фс в фоне, не сильно загружая систему. Досинхронизируем новую фс с текущей фс (скорее всего в оффлайне). Переключаемся на новую фс.
Но это тоже изврат.

anonymous
()
Ответ на: комментарий от silw

Принудительная балансировка делается, обычно, просто копированием файлов (в этот момент они уже размазываются по всем разделам) и удалением старых.

В zfs не сработает. Там cow, при копировании новые данные не создаются.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.