요컨대
가이드를 따르세요GNU/Linux에서 RAID 1을 설정하는 방법, RAID 1을 설정했습니다. 다양한 방법으로 RAID 배열의 유효성을 확인하는 것은 정상적인 것 같습니다.
그러나 시스템을 다시 시작한 후 RAID 어레이가 작동하지 않습니다. 문제의 파티션이 의 지침에 따라 마운트되지 않았습니다 /etc/fstab
. 어레이는 데이터 손실 없이 수동으로 조립되었습니다.
새로 추가된 내부/외부 디스크로 인해 디스크 장치 이름이 변경되므로(즉, 시스템이 디스크 이름을 "변경" sdd
) 이 이름이 변경되었다는 사실과 관련된 문제라는 것을 인정하게 되었습니다. sde
그러나 RAID 어레이는 고유한 UUID를 사용하여 구성되므로 이는 관련이 없습니다.
실제 문제는시작하는 동안 어레이가 조립되지 않는 이유는 무엇입니까?그렇지 않으면,처리 중에 Funtoo(모든 플롯이 발생하는 운영 체제)의 시작 스크립트는 무엇을 합니까 mdadm -assemble
?
이야기가 엄청 길어요
위에서 참조한 단계별 가이드에 따라 Funtoo에서 RAID 1을 설정했습니다. RAID 1 어레이의 유효성 확인은 주로 mdadm
도구 자체의 기능을 사용하여 다양한 방법으로 수행할 수 있습니다 .
특히 배열의 세부 정보는 플래그 mdadm
가 있는 -D
도구를 사용하여 검색 됩니다. 이 어레이에 속하는 디스크를 확인하려면 이 플래그를 사용하십시오 -E
. mdadm.conf
해당 구성 파일에 올바른 지침(예: 어떤 md 장치, UUID가 무엇인지 등)이 포함되어 있으면 쉽게 읽을 수 있습니다. 마지막으로, /proc/mdadm
두 디스크가 모두 활성화되어 있고 "동기화"되어 있는지 확인하려면 파일을 모니터링하는 것이 중요합니다.
다음은 직면한 상황에 대한 자세한 정보입니다.
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 1953382208 (1862.89 GiB 2000.26 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Jul 18 10:33:37 2013
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : Resilience:0 (local to host Resilience)
UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Events : 6455
Number Major Minor RaidDevice State
2 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
명령 기록을 바탕으로 다음을 수행했습니다.
# trying to follow the guide -- various tests...
...
979 18.Jul.13 [ 00:09:07 ] mdadm --zero-superblock /dev/sdd1
980 18.Jul.13 [ 00:09:17 ] mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdd1
990 18.Jul.13 [ 00:15:58 ] mdadm --examine --scan
# creating/checking the configuration file
992 18.Jul.13 [ 00:16:17 ] cat /etc/mdadm.conf
993 18.Jul.13 [ 00:16:33 ] mdadm --examine --scan | tee /etc/mdadm.conf
994 18.Jul.13 [ 00:16:35 ] cat /etc/mdadm.conf
# after some faulty attempts, finally it goes
997 18.Jul.13 [ 00:24:45 ] mdadm --stop /dev/md0
998 18.Jul.13 [ 00:24:54 ] mdadm --zero-superblock /dev/sdd1
999 18.Jul.13 [ 00:25:04 ] mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdd1
1005 18.Jul.13 [ 00:26:39 ] mdadm --examine --scan | sudo tee /etc/mdadm.conf
1046 18.Jul.13 [ 03:42:57 ] mdadm --add /dev/md0 /dev/sdc1
구성 파일의 내용은 /etc/mdadm.conf
다음과 같습니다.
ARRAY /dev/md/0 metadata=1.2 UUID=73bf29ca:89bff887:79a26531:b9733d7a name=Resilience:0
다음에서 볼 수 있듯이 모든 것이 잘 작동합니다 /proc/mdadm
.
Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] [raid10] [linear] [multipath]
md0 : active raid1 sdc1[2] sdd1[1]
1953382208 blocks super 1.2 [2/2] [UU]
unused devices: <none>
이후 디스크가 동기화되었으며 액세스가 정상입니다. 시스템을 종료하고 다른 디스크(외부(USB를 통해) 또는 내부)를 추가하고 시스템을 다시 시작하면 RAID1 작동이 중지됩니다! 내 기억이 맞다면 그 이유는 디스크 장치 번호가 변경되었기 때문입니다.
이 예에서 전자는 sdd1
"새" 내부 디스크 또는 연결된 외부 USB HDD에 의해 sde1
예약 되며 sdd1
시스템을 부팅하기 전에 자동 마운트를 나타냅니다.
"실패한" 어레이는 다른 모든 디스크를 제거하고 어레이를 중지한 후 다시 조립하면 매우 쉽게 "복구"될 수 있습니다. ARRAY를 시도하고 궁극적으로 성공적으로 검색하는 동안 실행된 명령 중 일부는 다음과 같습니다.
# booting and unsuccessfully trying to add the "missing" disk
1091 18.Jul.13 [ 10:22:53 ] mdadm --add /dev/md0 /dev/sdc1
1092 18.Jul.13 [ 10:28:26 ] mdadm --assemble /dev/md0 --scan
1093 18.Jul.13 [ 10:28:39 ] mdadm --assemble /dev/md0 --scan --force
1095 18.Jul.13 [ 10:30:36 ] mdadm --detail /dev/md0
# reading about `mdadm`, trying to "stop", incomplete command though
1096 18.Jul.13 [ 10:30:45 ] mdadm stop
1097 18.Jul.13 [ 10:31:12 ] mdadm --examine /dev/sdd
1098 18.Jul.13 [ 10:31:16 ] mdadm --examine /dev/sdd1
1099 18.Jul.13 [ 10:31:20 ] mdadm --examine /dev/sdc
1100 18.Jul.13 [ 10:31:21 ] mdadm --examine /dev/sdc1
# reading again, stop it -- the right way
1101 18.Jul.13 [ 10:33:19 ] mdadm --stop /dev/md0
# assemble & check
1102 18.Jul.13 [ 10:33:25 ] mdadm --assemble /dev/md0 --scan
1111 18.Jul.13 [ 10:34:17 ] mdadm --examine /dev/sd[cd]1
# does the Array have a UUID?
1112 18.Jul.13 [ 10:37:36 ] UUID=$(mdadm -E /dev/sdd1|perl -ne '/Array UUID : (\S+)/ and print $1')
# below, learning how to report on the Array
1115 18.Jul.13 [ 10:42:26 ] mdadm -D /dev/md0
1116 18.Jul.13 [ 10:45:08 ] mdadm --examine /dev/sd[cd]1 >> raid.status
1197 18.Jul.13 [ 13:16:59 ] mdadm --detail /dev/md0
1198 18.Jul.13 [ 13:17:29 ] mdadm --examine /dev/sd[cd]1
1199 18.Jul.13 [ 13:17:41 ] mdadm --help
1200 18.Jul.13 [ 13:18:41 ] mdadm --monitor /dev/md0
1201 18.Jul.13 [ 13:18:53 ] mdadm --misc /dev/md0
하지만 이런 일이 발생하지 않았으면 좋겠고, UUID 및/또는 태그를 기반으로 마운트할 때 다른 디스크/파티션만큼 안전하게 작동할 수 있었으면 좋겠습니다.
읽기 의 해당 항목 /etc/fstab
(노트, 옵션을 건너뛰었습니다 nosuid,nodev
)
/dev/md0 geo xfs defaults 0 2
의 세부정보는 sdc1
다음에서 나옵니다.mdadm -E /dev/sdc1
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Name : Resilience:0 (local to host Resilience)
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 5552ba2d:8d79c88f:c995d052:cef0aa03
Update Time : Fri Jul 19 11:14:19 2013
Checksum : 385183dd - correct
Events : 6455
Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing)
파티션에 대한 세부정보
의 세부정보는 sdd1
다음에서 나옵니다.mdadm -E /dev/sdd1
/dev/sdd1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Name : Resilience:0 (local to host Resilience)
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0
Update Time : Fri Jul 19 11:14:19 2013
Checksum : c1df68a0 - correct
Events : 6455
Device Role : Active device 1
Array State : AA ('A' == active, '.' == missing)
"새" 내부 디스크를 다시 추가하고 재부팅한 후에도 동일한 문제가 발생했습니다.
mdadm -E /dev/sdd1
보고서
mdadm: No md superblock detected on /dev/sdd1.
하지만mdadm -E /dev/sde1
/dev/sde1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Name : Resilience:0 (local to host Resilience)
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0
Update Time : Fri Jul 19 11:34:47 2013
Checksum : c1df6d6c - correct
Events : 6455
Device Role : Active device 1
Array State : AA ('A' == active, '.' == missing)
그리고mdadm --detail /dev/md0
mdadm: md device /dev/md0 does not appear to be active.
cat /proc/mdstat
읽는 동안
Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] [raid10] [linear] [multipath]
md0 : inactive sde1[1](S)
1953382400 blocks super 1.2
unused devices: <none>
에 따르면 참고하시기 바랍니다.자일스의Array Size : 1953382208
위(또는 아래)에 표시된 것처럼 이 시점에서 보고된 블록(1953382400)이 보고된 블록과 일치하지 않는 것을 확인하세요 . 분명히 여기에 뭔가 문제가 있습니다.
(부분) 출력은 다음과 mdadm -Evvvvs
같습니다.
/dev/sde1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Name : Resilience:0 (local to host Resilience)
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 076acfd8:af184e75:f83ce3ae:8e778ba0
Update Time : Fri Jul 19 11:34:47 2013
Checksum : c1df6d6c - correct
Events : 6455
Device Role : Active device 1
Array State : AA ('A' == active, '.' == missing)
/dev/sde:
MBR Magic : aa55
Partition[0] : 3907026944 sectors at 2048 (type fd)
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 73bf29ca:89bff887:79a26531:b9733d7a
Name : Resilience:0 (local to host Resilience)
Creation Time : Thu Jul 18 00:25:05 2013
Raid Level : raid1
Raid Devices : 2
Avail Dev Size : 3906764800 (1862.89 GiB 2000.26 GB)
Array Size : 1953382208 (1862.89 GiB 2000.26 GB)
Used Dev Size : 3906764416 (1862.89 GiB 2000.26 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 5552ba2d:8d79c88f:c995d052:cef0aa03
Update Time : Fri Jul 19 11:34:47 2013
Checksum : 385188a9 - correct
Events : 6455
Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing)
/dev/sdc:
MBR Magic : aa55
Partition[0] : 3907026944 sectors at 2048 (type fd)
fdisk -l
이전 디스크 sdc
합계 가 이제 합계 인지 확인합니다 ( 나머지 드라이브의 크기를 기준으로 m개의 디스크 식별 ). "그것"이 아직도 찾고 있는 것 같나요?sdd
sdb
sde
sdc1
sdd1
댓글 섹션의 제안을 바탕으로 더 자세한 내용을 추가했습니다.
~에 따르면드 로버트의의견에서 제안한 대로 ARRAY가 성공적으로 중지되고 재어셈블되었습니다.
# stop it!
mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# re-assemble -- looks good!
mdadm --assemble -v --scan
mdadm: looking for devices for /dev/md/0
mdadm: no RAID superblock on /dev/sdf1
mdadm: no RAID superblock on /dev/sdf
mdadm: no RAID superblock on /dev/sde
mdadm: no RAID superblock on /dev/sdd1
mdadm: no RAID superblock on /dev/sdd
mdadm: no RAID superblock on /dev/sdc
mdadm: no RAID superblock on /dev/sdb
mdadm: no RAID superblock on /dev/sda6
mdadm: no RAID superblock on /dev/sda5
mdadm: no RAID superblock on /dev/sda4
mdadm: no RAID superblock on /dev/sda3
mdadm: no RAID superblock on /dev/sda2
mdadm: no RAID superblock on /dev/sda1
mdadm: no RAID superblock on /dev/sda
mdadm: /dev/sde1 is identified as a member of /dev/md/0, slot 1.
mdadm: /dev/sdc1 is identified as a member of /dev/md/0, slot 0.
mdadm: added /dev/sde1 to /dev/md/0 as 1
mdadm: added /dev/sdc1 to /dev/md/0 as 0
mdadm: /dev/md/0 has been started with 2 drives.
# double-check
mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 name=Resilience:0 UUID=73bf29ca:89bff887:79a26531:b9733d7a
새로운 질문, 데이터 손실 없이 이 문제를 해결하는 방법은 무엇입니까? 댓글의 토론과 제안을 바탕으로 창업 과정과 관련이 있나요? 마운트 지점의 권한에 문제가 있는 것일까요?
mdadm
시작 서비스로 등록되지 않았습니다. 추가하고 다시 시작했지만 문제가 해결되지 않았습니다. 이것이 실패한 부분 에 대한 dmesg
잠재적으로 흥미로운 세부 정보도 있습니다 .
[ 25.356947] md: raid6 personality registered for level 6
[ 25.356952] md: raid5 personality registered for level 5
[ 25.356955] md: raid4 personality registered for level 4
[ 25.383630] md: raid1 personality registered for level 1
[ 25.677100] md: raid0 personality registered for level 0
[ 26.134282] md: raid10 personality registered for level 10
[ 26.257855] md: linear personality registered for level -1
[ 26.382152] md: multipath personality registered for level -4
[ 41.986222] md: bind<sde1>
[ 44.274346] XFS (md0): SB buffer read failed
[ 55.028598] ata7: sas eh calling libata cmd error handler
[ 55.028615] ata7.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0
[ 55.046186] ata7: sas eh calling libata cmd error handler
[ 55.046209] ata7.00: cmd ef/c2:00:00:00:00/00:00:00:00:00/40 tag 0
[ 55.278378] ata8: sas eh calling libata cmd error handler
[ 55.278406] ata8.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0
[ 55.349235] ata8: sas eh calling libata cmd error handler
[ 55.349290] ata8.00: cmd ef/c2:00:00:00:00/00:00:00:00:00/40 tag 0
[ 105.854112] XFS (md0): SB buffer read failed
문제가 있는 XFS 파티션에 대한 추가 검사sde1
xfs_check /dev/sde1
xfs_check: /dev/sde1 is not a valid XFS filesystem (unexpected SB magic number 0x00000000)
xfs_check: WARNING - filesystem uses v1 dirs,limited functionality provided.
xfs_check: read failed: Invalid argument
cache_node_purge: refcount was 1, not zero (node=0x22a64a0)
xfs_check: cannot read root inode (22)
bad superblock magic number 0, giving up
문제의 XFS 파티션이 비정상인 것으로 밝혀졌습니다.
XFS 파일 시스템은 불가능하지는 않지만 문제의 원인이 아닐 가능성이 높습니다. Gilles의 의견에 따르면 RAID 어레이의 일부인 파티션은XFS 파일 시스템이 아닙니다! 파일 시스템은 먼저 RAID 헤더를 사용하여 오프셋에서 시작됩니다.
질문)
처음에
디스크 장치 이름과 관계없이 특정 디스크/파티션에서만 작동하도록 RAID 1 어레이를 "잠그는" 것이 가능합니까?
/etc/fstab
예를 들어, 디스크 장치 이름 변경을 방지하기에 충분한 어레이의 UUID를 사용하고 있습니까 ?
문제를 다시 찾아본 후
- Funtoo 부팅 프로세스의 어느 단계에서 RAID 어레이를 조립하려고 합니까? 정확히 어떻게요? 변경/조정은 어디서 할 수 있나요?
답변1
알겠습니다. 상자에 무슨 문제가 있는지 잘 모르겠지만 무슨 일이 일어나고 있는지 간단히 요약해 볼까요?~해야 한다문제 해결을 돕기 위해 노력합니다.
영구 슈퍼 블록(매우 합리적인 기본값과 수행 방식)이 있는 배열을 생성하면 mdadm은 각 디스크에 다양한 메타데이터를 저장합니다. 이 메타데이터에는 어레이 UUID, 어레이 이름 및 슬롯 번호가 포함됩니다. 각 디스크는 동일한 UUID와 이름을 저장합니다. 슬롯 번호는 디스크마다 다릅니다. (메타데이터를 보고 싶을 때 사용 mdadm -E
)
어레이는 다음 세 가지 방법으로 시작 시 조립할 수 있습니다.
- 커널은 그것을 할 수 있습니다. 이것이 0xFD가 파티션 유형을 자동으로 감지하는 작업입니다. 이 접근 방식은 실망스럽습니다.
- 배포판의 스크립트는
udev
이 과정의 일부로 증분 어셈블리를 사용하여mdadm
장치에 나타나는 대로 전달할 수 있습니다. 이것이 최신 방법입니다. 제대로 작동하면 USB와 같은 다양한 비동기식 프로빙 장치를 문제 없이 처리할 수 있습니다. - 배포 스크립트는
mdadm --assemble --scan
모든 장치가 인식된 것으로 간주된 후에 호출됩니다. 예를 들어 USB에는 Kluges(기본적으로 장치 노드가 생성되었는지 확인하기 위해 절전 모드)가 필요합니다. 이 모드에서는mdadm
기본적으로/proc/partitions
시스템의 모든 블록 장치를 확인하고 각 블록 장치에서 수퍼블록을 검색합니다.
릴리스 스크립트는 initramfs 이상에서 이 작업을 수행할 수 있습니다. 또는 때로는 일부 배열이 initramfs(루트 파일 시스템을 가져오는 데 필요한 배열)에서 수행되는 반면 다른 배열은 부팅 후에 수행됩니다.
어떤 방식으로 수행되든 mdadm은 UUID, 이름 및 슬롯 번호를 확인하여 장치를 일치시킵니다. 두 개의 디스크 어레이에 대해 #0과 #1을 찾아야 합니다. 실제로 어떤 장치인지는 상관하지 않습니다(기본적으로 mdadm.conf에서 신경 쓰도록 구성할 수 있음).
답변2
디스크 장치 이름과 관계없이 특정 디스크/파티션에서만 작동하도록 RAID 1 어레이를 "잠그는" 것이 가능합니까?
아래 별칭을 사용하여 /dev/disk/by-*
이 작업을 수행 할 수 있습니다. 이러한 /dev/disk/by-id/*
정보는 실제 디스크에 직접 매핑되므로 정보를 쉽게 볼 수 있어야 하지만 두 디렉터리 모두 시나리오에 유용한 기호 링크를 포함해야 합니다. 어떤 것을 사용할지는 주로 취향에 따라 다릅니다.
예를 들어 내 시스템에서 /dev/disk/by-id/scsi-SATA_ST31000340NS_9QJ26FT9-part1은 /dev/sdb1에 매핑됩니다. 그건버스,모델,TV 시리즈그리고분할연관된 파티션을 생성하는 번호입니다. 어레이의 드라이브에 오류가 발생하면 mdadm
문제의 명령과 같은 명령을 사용하여 어떤 물리적 드라이브가 문제인지 구체적으로 확인할 수 있습니다.
예를 들어 /etc/fstab에서 어레이의 UUID를 사용하면 디스크 장치 이름 변경을 방지하기에 충분합니까?
저는 MD RAID에 대해 잘 알지 못합니다. 하지만 이는 전체 어레이에 대한 참조에만 영향을 미치지 않습니까? /dev/md0이 갑자기 /dev/md1로 표시되는 것이 걱정된다면 배열 자체에 대한 고정 참조를 제공하는 다른 방법이 있을까요?