요컨대

요컨대

요컨대

가이드를 따르세요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개의 디스크 식별 ). "그것"이 아직도 찾고 있는 것 같나요?sddsdbsdesdc1sdd1

댓글 섹션의 제안을 바탕으로 더 자세한 내용을 추가했습니다.

~에 따르면드 로버트의의견에서 제안한 대로 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)

어레이는 다음 세 가지 방법으로 시작 시 조립할 수 있습니다.

  1. 커널은 그것을 할 수 있습니다. 이것이 0xFD가 파티션 유형을 자동으로 감지하는 작업입니다. 이 접근 방식은 실망스럽습니다.
  2. 배포판의 스크립트는 udev이 과정의 일부로 증분 어셈블리를 사용하여 mdadm장치에 나타나는 대로 전달할 수 있습니다. 이것이 최신 방법입니다. 제대로 작동하면 USB와 같은 다양한 비동기식 프로빙 장치를 문제 없이 처리할 수 있습니다.
  3. 배포 스크립트는 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로 표시되는 것이 걱정된다면 배열 자체에 대한 고정 참조를 제공하는 다른 방법이 있을까요?

관련 정보