Red Hat Linux 5의 문제입니다.
잘못된 통신으로 인해 우리 환경의 LUN 2개가 1.2TB에서 1.7TB로 확장되었습니다.
이제 재부팅 후 mdadm은 어레이를 다시 구축하기 위한 슈퍼블록을 찾을 수 없습니다.
공통 형식(버전 0.90이라고 함)은 4K 길이의 슈퍼블록을 가지며 장치 끝에서 최소 64K, 128K 미만인 64K 정렬 블록을 씁니다(즉, 장치 주변의 슈퍼블록 주소를 가져옵니다). 장치 크기는 64K의 배수로 줄어든 다음 64K를 뺍니다.
오래된 문서를 찾았습니다.
# mdadm -D /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Tue Jul 10 17:45:00 2012
Raid Level : raid1
Array Size : 1289748416 (1230.00 GiB 1320.70 GB)
Used Dev Size : 1289748416 (1230.00 GiB 1320.70 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Wed Apr 17 15:03:50 2013
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : 2799bd51:67eb54d2:1fcd3c90:293311a1
Events : 0.39
Number Major Minor RaidDevice State
0 253 10 0 active sync /dev/dm-10
1 253 11 1 active sync /dev/dm-11
# fdisk -l /dev/dm-10 /dev/dm-11
Disk /dev/dm-10: 1320.7 GB, 1320702443520 bytes
255 heads, 63 sectors/track, 160566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-10 doesn't contain a valid partition table
Disk /dev/dm-11: 1320.7 GB, 1320702443520 bytes
255 heads, 63 sectors/track, 160566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-11 doesn't contain a valid partition table
답변1
mdadm --build -l1 -n2 /dev/md0 /dev/dm-10 /dev/dm11
데이터를 복구하려면 실행하세요 .
이 작업을 수행하기 전에 장치가 올바른지 확인하십시오(또는 /dev/mapper의 별칭을 사용하십시오)!
또한 커널이 이미 이러한 장치 중 하나를 사용하고 있는 경우(또는 사용 중인) 데이터는 일관성이 없습니다. 두 번째 장치를 축퇴 1.2 어레이로 설정하고 데이터를 복사한 후 새 축퇴 RAID 사용을 시작하고 여기에 첫 번째 디스크를 추가해야 합니다.현재 백업이 없는 경우 이 작업을 시도하기 전에 수행할 작업을 알려주세요.
(1.2 RAID 슈퍼블록이 이러한 문제를 방지하므로 어쨌든 1.2로 전환하는 것이 좋습니다.)
답변2
0.90 슈퍼블록이 있는 RAID 1인 경우 RAID 레이어를 전혀 사용하지 않고 직접 마운트할 수 있어야 합니다. 디스크 시작 부분에서는 데이터가 오프셋되지 않으므로 문제가 없습니다. 만일의 경우에 대비하여 읽기 전용 마운트 옵션이나 읽기 전용 루프 장치를 사용해 보십시오.
작동하는 경우 가장 쉬운 방법은 다른 디스크(이 문제를 방지하고 2TB 제한이 적용되지 않는 1.2 메타데이터가 바람직함)를 사용하여 처음부터 새 RAID를 생성하고 데이터를 복사한 다음 완료되는 것입니다. 복사된 디스크를 새 RAID에 추가하기만 하면 됩니다.
답변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
RAID 장치가 표시되어야 합니다.
다음 매퍼 장치에서 배열을 어셈블합니다.
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