Изменения

Перейти к: навигация, поиск

Блог:Виталий Филиппов/2020-08-14 mdadm shrink

2668 байтов добавлено, 14:22, 14 августа 2020
Новая страница: «Пипец, чуть с ума щас не сошёл. Вроде такая простая задача, а протрахался… :) Дано: mdadm RAID1 (…»
Пипец, чуть с ума щас не сошёл. Вроде такая простая задача, а протрахался… :)

Дано: mdadm RAID1 (зеркало) из /dev/sda2 и /dev/sdb2, и это rootfs. Надо немного уменьшить разделы на диске. Ну, я думаю — что тут сложного:
# Перезагружаемся в initramfs (в Debian опция ядра break=mount), прихватив с собой busybox, resize2fs и sfdisk (и нужные им библиотеки), ну или делаем извращение типа [https://unix.stackexchange.com/questions/226872/how-to-shrink-root-filesystem-without-booting-a-livecd/227318#227318 такого], но перезагрузиться проще
# Уменьшаем ФС — {{cmd|resize2fs /dev/md0 <SIZE>K}}
# Уменьшаем RAID — {{cmd|1=mdadm --grow --size=<SIZE> /dev/md0}}
# Останавливаем RAID — {{cmd|mdadm --stop /dev/md0}}
# Меняем размеры разделов sfdisk-ом — {{cmd|sfdisk --dump /dev/sda > sda.txt; vi sda.txt; sfdisk /dev/sda < sda.txt; sfdisk /dev/sdb < sdb.txt}} — конечно, правильно их рассчитав по {{cmd|mdadm --examine /dev/sda}} сложением Data Offset + 2*Array Size (он в килобайтах).
# Запускаем RAID обратно — {{cmd|mdadm --assemble --scan}}

И вот на последнем этапе схема даёт сбой:

<pre>
/ # mdadm --assemble --scan
mdadm: failed to add /dev/sdb2 to /dev/md/0: Invalid argument
mdadm: failed to add /dev/sda2 to /dev/md/0: Invalid argument
mdadm: failed to RUN_ARRAY /dev/md/0: Invalid argument
</pre>

Причём я априори в курсе, что старые версии суперблока mdadm хранятся в конце раздела и изменение раздела не переживают — но в данном случае версия суперблока изначально 1.2, так что этой проблемы быть не должно.

Разгадка: эта тварь хранит размер каждого устройства в его суперблоке, и отказывается запускаться, когда реальный размер не соответствует сохранённому. Но есть способ его обновить — для этого на последнем этапе надо просто сказать {{cmd|mdadm --assemble -U devicesize /dev/md0 /dev/sda2 /dev/sdb2}}.
{{wl-publish: 2020-08-14 17:22:34 +0300 | VitaliyFilippov }}

Навигация