Это довольно легко в sed: распечатайте все строки от первой строки, соответствующей шаблону к последней строке ($
).
sed -n '/pattern/,$p'
Если Вы хотите опустить строку, соответствующую шаблону, удалите все до и включая его.
sed '1,/pattern/d'
Возвращаясь устройства к их первоначальному размеру должны просто восстановить устройство 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
Если это - RAID 1 с 0,90 суперблоками, необходимо смочь смонтироваться непосредственно, не используя уровень RAID вообще. Данные запускаются без смещения в начале диска, таким образом, не должно быть никакой проблемы. Используйте опцию монтирования только для чтения или циклическое устройство только для чтения для эксперимента на всякий случай.
Если бы это работает, самый простой метод должен был бы использовать другой диск для создания нового RAID с нуля (предпочтительно 1,2 метаданных, которые избегут этой проблемы и не переносят предела на 2 ТБ), скопируйте данные, и после того как это сделано, добавьте диск, с которого Вы скопировали к новому RAID.
Просто выполненный mdadm --build -l1 -n2 /dev/md0 /dev/dm-10 /dev/dm11
вернуть Ваши данные.
Проверьте, что устройства правильны (или используйте псевдонимы от/dev/mapper) прежде, чем сделать это!
Кроме того, если Ваше ядро уже использовало (или использует), одно из этих устройств, данные будут непоследовательны. Необходимо настроить второе устройство как вырожденные 1,2 массива, скопировать данные, начать использовать новый вырожденный RAID и добавлять первый диск к нему. Если у Вас нет актуальной резервной копии, заставьте oneyou знать, что сделать прежде, чем делать попытку этого.
(Переключающийся на 1,2 хорошая идея так или иначе, поскольку 1,2 суперблока RAID принимают меры против этого вида проблемы.)