потерянный суперблок в набеге md

Это довольно легко в sed: распечатайте все строки от первой строки, соответствующей шаблону к последней строке ($).

sed -n '/pattern/,$p'

Если Вы хотите опустить строку, соответствующую шаблону, удалите все до и включая его.

sed '1,/pattern/d'
4
17.04.2013, 18:50
3 ответа

Возвращаясь устройства к их первоначальному размеру должны просто восстановить устройство RAID.

Можно подтвердить что путем выполнения:

losetup --sizelimit=$((1230*(2**30))) -r /dev/loop1 /dev/dm-10
mdadm -E /dev/loop1

mdadm должен теперь найти суперблок, если размер корректен. Затем можно изменить размер дисков назад к тому размеру (-r выше для только для чтения, таким образом, это не будет делать ничего плохого).

Если Вы на самом деле хотите увеличить массив md0 и сохранить 0,9 метаданные, одна вещь, которую Вы могли сделать:

dmsetup create d1 --table "0 $((1230*(2**30)/512)) linear /dev/dm-10 0"
dmsetup create d2 --table "0 $((1230*(2**30)/512)) linear /dev/dm-11 0"

Еще раз,

mdadm -E /dev/mapper/d1

должен отобразить устройство набега.

Соберите массив на тех устройствах картопостроителя:

mdadm -A /dev/md0 /dev/mapper/d[12]

И затем измените размер устройств в полном объеме:

dmsetup suspend d1
dmsetup suspend d2
dmsetup reload d1 --table "0 $(blockdev --getsize /dev/dm-10) linear /dev/dm-10 0"
dmsetup reload d2 --table "0 $(blockdev --getsize /dev/dm-11) linear /dev/dm-11 0"
dmsetup resume d1
dmsetup resume d2

Затем можно использовать --grow использовать то дополнительное пространство:

mdadm /dev/md0 --grow --size max

Ожидайте дополнительного пространства, которое будет повторно синхронизироваться, остановит массив, очистка дополнительные dm устройства и повторно соберется на исходных устройствах:

mdadm --stop /dev/md0
dmsetup remove d1
dmsetup remove d2
mdadm -A /dev/md0 /dev/dm-1[01]

Можно использовать циклические устройства, чтобы сделать тесты заранее для проверки процедуры. Вот снимок экрана того, что я сделал, чтобы проверить, что он работал:

~# truncate -s 1230G a
~# truncate -s 1230G b
~# losetup /dev/loop1 a
~# losetup /dev/loop2 b
~# lsblk /dev/loop[12]
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop1   7:32   0   1.2T  0 loop
loop2   7:64   0   1.2T  0 loop
~# mdadm --create /dev/md0 --metadata 0.9 --level 1 --raid-devices 2 --assume-clean /dev/loop[12]
mdadm: array /dev/md0 started.
~# lsblk /dev/md0
NAME MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
md0    9:0    0   1.2T  0 raid1
~# truncate -s 1700G a
~# truncate -s 1700G b
~# losetup -c /dev/loop1
~# losetup -c /dev/loop2
~# lsblk /dev/loop[12]
NAME  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop1   7:32   0   1.7T  0 loop
└─md0   9:0    0   1.2T  0 raid1
loop2   7:64   0   1.7T  0 loop
└─md0   9:0    0   1.2T  0 raid1
~# mdadm -E /dev/loop1
mdadm: No md superblock detected on /dev/loop1.
(1)~# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
~# dmsetup create d1 --table "0 $((1230*(2**30)/512)) linear /dev/loop1 0"
~# dmsetup create d2 --table "0 $((1230*(2**30)/512)) linear /dev/loop2 0"
~# mdadm -A /dev/md0 /dev/mapper/d[12]
mdadm: /dev/md0 has been started with 2 drives.
~# lsblk /dev/mapper/d[12]
NAME       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
d1 (dm-19) 253:19   0   1.2T  0 dm
└─md0        9:0    0   1.2T  0 raid1
d2 (dm-20) 253:20   0   1.2T  0 dm
└─md0        9:0    0   1.2T  0 raid1
~# dmsetup suspend d1
~# dmsetup suspend d2
~# dmsetup reload d1 --table "0 $(blockdev --getsize /dev/loop1) linear /dev/loop1 0"
~# dmsetup reload d2 --table "0 $(blockdev --getsize /dev/loop2) linear /dev/loop2 0"
~# dmsetup resume d1
~# dmsetup resume d2
~# lsblk /dev/mapper/d[12]
NAME       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
d1 (dm-19) 253:19   0   1.7T  0 dm
└─md0        9:0    0   1.2T  0 raid1
d2 (dm-20) 253:20   0   1.7T  0 dm
└─md0        9:0    0   1.2T  0 raid1
~# mdadm /dev/md0 --grow --assume-clean --size max
mdadm: component size of /dev/md0 has been set to 1782579136K
~# lsblk /dev/md0
NAME MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
md0    9:0    0   1.7T  0 raid1
~# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 dm-19[0] dm-20[1]
      1782579136 blocks [2/2] [UU]

unused devices: <none>
~# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
~# dmsetup remove d1
~# dmsetup remove d2
~# mdadm -A /dev/md0 /dev/loop[12]
mdadm: /dev/md0 has been started with 2 drives.
~# lsblk /dev/md0
NAME MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
md0    9:0    0   1.7T  0 raid1
~# uname -rs
Linux 3.7-trunk-amd64
2
27.01.2020, 20:47
  • 1
    Вы на самом деле не можете вырастить массивы, которые хранят метаданные в конце; ядро не переместит суперблок. –  psusi 18.04.2013, 02:21
  • 2
    @psusi, я действительно тестировал ту процедуру по raid1 на циклических устройствах, и это действительно выращивало массив. –  Stéphane Chazelas 18.04.2013, 09:36
  • 3
    Используя формат 0.9 метаданных? В прошлый раз я попробовал его, не будет работать; я должен был восстановить массив с помощью 1,2. Обсуждение списка рассылки набега Linux, казалось, указало, что это должно было ожидаться. большое спасибо –  psusi 18.04.2013, 16:40
  • 4
    @psusi. Я добавил снимок экрана выполнения в процедуре. Это находится на Linux 3.7. –  Stéphane Chazelas 18.04.2013, 17:53

Если это - RAID 1 с 0,90 суперблоками, необходимо смочь смонтироваться непосредственно, не используя уровень RAID вообще. Данные запускаются без смещения в начале диска, таким образом, не должно быть никакой проблемы. Используйте опцию монтирования только для чтения или циклическое устройство только для чтения для эксперимента на всякий случай.

Если бы это работает, самый простой метод должен был бы использовать другой диск для создания нового RAID с нуля (предпочтительно 1,2 метаданных, которые избегут этой проблемы и не переносят предела на 2 ТБ), скопируйте данные, и после того как это сделано, добавьте диск, с которого Вы скопировали к новому RAID.

4
27.01.2020, 20:47
  • 1
    Да, я могу смонтироваться. И точно я перемещу данные в новый RAID. Я думаю, что это было бы лучшим. –  ddeimeke 17.04.2013, 23:28

Просто выполненный mdadm --build -l1 -n2 /dev/md0 /dev/dm-10 /dev/dm11 вернуть Ваши данные.

Проверьте, что устройства правильны (или используйте псевдонимы от/dev/mapper) прежде, чем сделать это!

Кроме того, если Ваше ядро уже использовало (или использует), одно из этих устройств, данные будут непоследовательны. Необходимо настроить второе устройство как вырожденные 1,2 массива, скопировать данные, начать использовать новый вырожденный RAID и добавлять первый диск к нему. Если у Вас нет актуальной резервной копии, заставьте oneyou знать, что сделать прежде, чем делать попытку этого.

(Переключающийся на 1,2 хорошая идея так или иначе, поскольку 1,2 суперблока RAID принимают меры против этого вида проблемы.)

6
27.01.2020, 20:47
  • 1
    Это - то, где я добираюсь: "Никакой допустимый суперблок, найденный на/dev/dm-10". –  ddeimeke 17.04.2013, 23:27
  • 2
    Право. Измененный --assemble кому: --build. –  Matthias Urlichs 18.04.2013, 10:25

Теги

Похожие вопросы