Описано из спортивного интереса, буду рад если меня где-то поправят/предложат решение проще. Но проверить уже не смогу, останется кому-то ещё как пример реализации. Допускаю что мне повезло с моим подходом решения.
Утащите в раздел, какой для темы правильнее
Отвалился диск из 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
Действия
- Уже утащил все возможно нужные данные с ext4 раздела максимально высвободив место
- осталось 857G данных
umount,e2fsck -ff /dev/storvg0/dataна всякий случай- Уменьшаю LV и ФС на ней до «с запасом»
lvreduce -L 1t -r -v /dev/storvg0/data - По ссылке упоминалось
pvmoveфрагментов в начало диска, мне не потребовалось, пропускаю - Уменьшаю PV до «с запасом»
pvresize -v --setphysicalvolumesize 2t /dev/md127- да, я мог уменьшить сильнее, не стал
- `pvs –units B показывает итоговый размер в 2199019061248B
- Уменьшаю raid устройство до «немного больше чем PV устройство»
mdadm --grow /dev/md127 --array-size=2147483648- где
--array-sizeв KiB
- где
- Тут я не был уверен в своих действиях и просто пошёл уменьшать разделы на которых сидит raid, т.к. не нашёл никакой информации о способах проверки/правки как/где на диске raid располагает данные кроме metadata.
- пришёл к мысли, что RAID будет использовать всегда не более чем
Array Sizeот начала собственных разделов/дисков и доп действия не требуются. И лучше я оставлю с запасом места чем ошибусь.
- пришёл к мысли, что RAID будет использовать всегда не более чем
- Остановил raid массив
mdadm --stop /dev/md127 - Переразметил диски, которые были в raid
- Я могу так сделать т.к. у моего массива
metadata=1.2, т.е. заголовки массива в начале диска. - Удалил единственный раздел с raid
- Пересоздал с тем-же смещением, но размером в 2050G, чуть больше чем размер до которого я уменьшал RAID массив
- Не удаляю partition signature раздела как предлагает fdisk
- Для одного из дисков(sda) создал второй раздел того-же размера чтобы потом на него перенести RAID данные со второго диска
- Восстановил тип разделов как raid
- Я могу так сделать т.к. у моего массива
- Перетаскиваю оба raid раздела на один диск
dd if=/dev/sdd1 of=/dev/sda2 status=progress - Собираю массив обратно
- При попытке собрать «в лоб» ругань на диски вида
/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 readlvs: Error reading device /dev/md127 at 24000002457600 length 4.
- При попытке собрать «в лоб» ругань на диски вида
- Проверяю данные на LV
e2fsck -ff /dev/storvg0/data mountLV и успешный доступ к данным.
Далее можно уже собирать RAID1 на втором диске и переносить туда данные, но мне лень это тут описывать.
Успешно скопировал данные из raid5, бегло вроде повреждённых данных нет. «не бегло» среди образов VM и музыки я так просто повреждение данных не найду.