LINUX.ORG.RU

degraided raid5 разобрать без добавления дисков и сохранить данные

 , ,


0

3

Описано из спортивного интереса, буду рад если меня где-то поправят/предложат решение проще. Но проверить уже не смогу, останется кому-то ещё как пример реализации. Допускаю что мне повезло с моим подходом решения.
Утащите в раздел, какой для темы правильнее


Отвалился диск из raid5 и я решил пересобрать существующие диски в raid1, но у меня нет возможности добавлять диски и осталось сколько-то данных которые можно, но жалко удалить.

Более подробно об изначальном состоянии

# cat /proc/mdstat 
md127 : active raid5 sda1[3] sdd1[1]
      2147483648 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/2] [_UU]
      bitmap: 44/44 pages [176KB], 131072KB chunk
# pvs
PV             VG      Fmt  Attr PSize   PFree
/dev/md127     storvg0 lvm2 a--  <21,83t 197,74g
# vgs
VG      #PV #LV #SN Attr   VSize   VFree
storvg0   1   1   0 wz--n- <21,83t 197,74g
# lvs
LV                    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
data                  storvg0 -wi-a-----  21,63t
# df -h
Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/storvg0-data         22T         857G   21T            4% /mnt/data
* я забыл сюда добавить mdadm --detail, ну, уже поздно.

Идею действий взял из https://unix.stackexchange.com/questions/519814/shrink-mdadm-raid-5-containing-lvm

Действия

  1. Уже утащил все возможно нужные данные с ext4 раздела максимально высвободив место
    • осталось 857G данных
  2. umount, e2fsck -ff /dev/storvg0/data на всякий случай
  3. Уменьшаю LV и ФС на ней до «с запасом» lvreduce -L 1t -r -v /dev/storvg0/data
  4. По ссылке упоминалось pvmove фрагментов в начало диска, мне не потребовалось, пропускаю
  5. Уменьшаю PV до «с запасом» pvresize -v --setphysicalvolumesize 2t /dev/md127
    • да, я мог уменьшить сильнее, не стал
    • `pvs –units B показывает итоговый размер в 2199019061248B
  6. Уменьшаю raid устройство до «немного больше чем PV устройство» mdadm --grow /dev/md127 --array-size=2147483648
    • где --array-size в KiB
  7. Тут я не был уверен в своих действиях и просто пошёл уменьшать разделы на которых сидит raid, т.к. не нашёл никакой информации о способах проверки/правки как/где на диске raid располагает данные кроме metadata.
    • пришёл к мысли, что RAID будет использовать всегда не более чем Array Size от начала собственных разделов/дисков и доп действия не требуются. И лучше я оставлю с запасом места чем ошибусь.
  8. Остановил raid массив mdadm --stop /dev/md127
  9. Переразметил диски, которые были в raid
    1. Я могу так сделать т.к. у моего массива metadata=1.2, т.е. заголовки массива в начале диска.
    2. Удалил единственный раздел с raid
    3. Пересоздал с тем-же смещением, но размером в 2050G, чуть больше чем размер до которого я уменьшал RAID массив
      • Не удаляю partition signature раздела как предлагает fdisk
    4. Для одного из дисков(sda) создал второй раздел того-же размера чтобы потом на него перенести RAID данные со второго диска
    5. Восстановил тип разделов как raid
  10. Перетаскиваю оба raid раздела на один диск dd if=/dev/sdd1 of=/dev/sda2 status=progress
  11. Собираю массив обратно
    • При попытке собрать «в лоб» ругань на диски вида /dev/sda1 does not have a valid v1.2 superblock, not importing!
    • Нужен ключ --update=devicesize, т.к. явно изменился размер дисков
    • mdadm --assemble --run /dev/md127 /dev/sda1 /dev/sda2 --update=devicesize -> mdadm: /dev/md127 has been started with 2 drives (out of 3).
    • После сборки ругань в dmesg и pvs в виду попыток прочитать данные с учётом изначального объёма массива
      • dmesg: Buffer I/O error on dev md127, logical block 5859375600, async page read
      • lvs: Error reading device /dev/md127 at 24000002457600 length 4.
  12. Проверяю данные на LV e2fsck -ff /dev/storvg0/data
  13. mount LV и успешный доступ к данным.

Далее можно уже собирать RAID1 на втором диске и переносить туда данные, но мне лень это тут описывать.
Успешно скопировал данные из raid5, бегло вроде повреждённых данных нет. «не бегло» среди образов VM и музыки я так просто повреждение данных не найду.

★★★