A reversão dos dispositivos para o tamanho original deve apenas restaurar o dispositivo RAID.
Você pode confirmar isso fazendo:
losetup --sizelimit=$((1230*(2**30))) -r /dev/loop1 /dev/dm-10
mdadm -E /dev/loop1
mdadm
deve agora encontrar o superbloco se o tamanho estiver correto. Então você pode redimensionar seus discos de volta para aquele tamanho ( -r
acima é para somente leitura, então não causará nenhum dano).
Se você realmente deseja ampliar o array md0 e manter os metadados 0.9, uma coisa que você pode fazer é:
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"
Mais uma vez,
mdadm -E /dev/mapper/d1
deve exibir o dispositivo de ataque.
Monte o array nesses dispositivos de mapeamento:
mdadm -A /dev/md0 /dev/mapper/d[12]
Em seguida, redimensione os dispositivos em toda a extensão:
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
Em seguida, você pode usar --grow
para usar esse espaço extra:
mdadm /dev/md0 --grow --size max
Aguarde até que o espaço extra seja ressincronizado, pare a matriz, limpe os dispositivos extra dm e remonte nos dispositivos originais:
mdadm --stop /dev/md0
dmsetup remove d1
dmsetup remove d2
mdadm -A /dev/md0 /dev/dm-1[01]
Você pode usar dispositivos de loop para fazer testes de antemão para verificar o procedimento. Aqui está uma captura de tela do que fiz para verificar se funcionou:
~# 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