SATA 장치 이름을 RAID 시스템의 물리적 SATA 인터페이스에 매핑하는 방법

SATA 장치 이름을 RAID 시스템의 물리적 SATA 인터페이스에 매핑하는 방법

내 시스템에는 10개의 SATA 포트가 있고 부팅 디스크로 또 다른 SATA가 있습니다. 10개의 SATA 포트가 5개의 소프트웨어 RAID1 어레이를 구성합니다. RAID 디스크는 부팅 사이에 제거할 수 있으며 언제든지 빈 디스크로 교체할 수 있습니다.

/dev/sda확실히 해야 해언제나내 첫 번째 물리적 SATA 포트 /dev/sdj언제나열번째, RAID1 어레이가 정상적으로 작동할 수 있는지 여부입니다. 예를 들어, 첫 번째 포트의 첫 번째 디스크에 오류가 발생하면 손실된 디스크로 표시되어야 하므로 다음 포트의 디스크는 이어야 합니다 /dev/sdb. 현재 사용 가능한 다음 디스크는 /dev/sda내 어레이 및 부팅 구성을 완전히 파괴하는 방식으로 마운트됩니다.

다른 모든 디스크에 장애가 발생하여 각 RAID1 어레이에는 쌍으로 작동하는 디스크가 하나만 있는 끔찍한 시나리오를 상상해 보십시오. 일련번호~해야 한다예:

  • /dev/sda
  • /dev/sdc
  • /dev/sde
  • /dev/sdg
  • /dev/sdi

아니요:

  • /dev/sda
  • /dev/sdb
  • /dev/sdc
  • /dev/sdd
  • /dev/sde

UUID로 특정 디스크에 태그를 지정하는 규칙을 본 적이 있지만 udev사용자가 마음대로 디스크를 핫 플러그하므로 이는 전혀 편리하지 않습니다.

기본적으로 Linux는 다음 알파벳 문자를 사용하여 다음 사용 가능한 디스크를 표시합니다. 많은 경우 단일 손상된 디스크가 여러 RAID 1 어레이를 손상시킬 수 있습니다.

  • 특정 하드웨어 인터페이스에 장치를 매핑하는 방법은 무엇입니까? 가능합니까?
  • 후속 장치의 레이블이 잘못 지정되지 않도록 부팅 시 장치를 "분실"할 수 있습니까?

답변1

다음을 사용하여 배열을 생성하는 경우:

mdadm --create --name=DATA00 --level=6 --auto=part --verbose /dev/md0 --raid-devices=6 /dev/sda1 /dev/sdb1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1

그런 다음 다음을 수행하십시오.

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

다음과 같은 항목이 표시됩니다 mdadm.conf.

ARRAY /dev/md/DATA00 metadata=1.2 name=owl:DATA00 UUID=5eeada67:ff994361:bae3ab52:d9e8bd49

UUID가 이를 처리하므로 원시 파티션 및/또는 드라이버 순서를 참조할 필요가 없습니다. 활성화/재시작 후에 실제로 어떤 파티션이 어레이를 구성하는지 확인할 수 있습니다 /proc/mdstat. 단일 파티션(UUID 포함)을 보려면 다음을 사용하십시오.mdadm --examine /dev/sdXY

있다는 점을 고려하면안 돼요재부팅 후 드라이브에 설정해야 하는 특정 순서가 있으며, 외부 SATA 연결 여부에 따라 BIOS가 전환되므로 그것이 중요하지 않아서 다행입니다.

답변2

이것데비안 위키내가 필요한 것을 설명하는 좋은 항목이 있습니다. 다음으로 /etc/udev/rules.d/20-disk-bay.rules 아래에 나만의 규칙을 만들었습니다. 예시로 처음 두 개의 SATA 포트 매핑만 포함했습니다.

# There are different DEVPATHs for major kernel versions!
# Example for SATA N:
#
# Kernel < 3 DEVPATH
# *1f.2/hostN/targetN:0:0/N:0:0:0*
#
# Kernel > 3 DEVPATH
# *1f.2/ata(N+1)/host*

########## Map SATA 0 to /dev/sdb ##############

# Kernel < 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/host0/target0:0:0/0:0:0:0*", NAME="sdb", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/host0/target0:0:0/0:0:0:0*", NAME="sdb%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

# Kernel > 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/host*", NAME="sdb", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/host*", NAME="sdb%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

########## Map SATA 1 to /dev/sdc ##############

# Kernel < 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/host1/target1:0:0/1:0:0:0*", NAME="sdc", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"

KERNEL=="sd?*", ENV{DEVTYPE}=="partition", SUBSYSTEM=="block", DEVPATH=="*1f.2/host1/target1:0:0/1:0:0:0*", NAME="sdc%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

# Kernel > 3

KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/host*", NAME="sdc", RUN+="/usr/bin/logger My disk ATTR{partition}=$ATTR{partition}, DEVPATH=$devpath, ID_PATH=$ENV{ID_PATH}, ID_SERIAL=$ENV{ID_SERIAL}", GOTO="END_20_PERSISTENT_DISK"
KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/host*", NAME="sdc%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"

LABEL="END_20_PERSISTENT_DISK"

위 규칙은 항상 SATA 포트 0(마더보드의 첫 번째 물리적 SATA 포트)에 배치된 모든 드라이브를 /dev/sdb로 매핑하고 SATA 1에 배치된 모든 드라이브를 /dev/sdc로 매핑합니다. 제 경우에는 일관된 물리적 물리적 핫스왑 가능한 베이에서 디스크를 교체할 수 있는 RAID-1 어레이가 5개 있기 때문에 포트 매핑이 중요합니다. 기술적인 지식이 없는 사용자는 장치 ID를 처리할 필요 없이 언제든지 이러한 디스크를 교체할 수 있습니다. 시스템은 완전히 자율적이며 핫스왑 가능한 베이의 잘못된 디스크에 RAID 어레이를 구축하지 않습니다. 이는 매우 구체적인 사용 사례입니다.

답변3

사용자가 마음대로 디스크를 핫스왑하는 이유는 무엇입니까?

핫스왑을 여러 번 수행하면 디스크가 더 빨리 마모될 수 있습니다. 레이드의 속도 이점이 사라집니다. 실제로 어레이는 복구 중에 단일 디스크보다 성능이 저하될 수 있습니다.

조만간 디스크를 무작위로 꺼내는 습관으로 인해 누군가가 동일한 어레이의 일부인 두 개의 디스크를 꺼내어 시스템 충돌을 일으킬 수 있는 상황에 처하게 될 것입니다.

여기서 설명하는 문제는 말할 것도 없습니다. mdadm이 수동으로 어레이에 추가하지 않고 새 디스크를 선택할지는 확실하지 않지만 해결 방법이 있을 수 있습니다.

이것이 백업 계획입니까? 그렇다면 나는 그것을 강력히 권장하지 않습니다! 일반 백업 사용 - LVM이 있는 경우 LVM 스냅샷을 사용할 수 있습니다.

사용자가 서버를 "남용"하는 경우 서버실 문에 자물쇠를 걸거나... 대부분의 핫스왑 가능한 베이와 함께 제공되는 키를 빼앗거나... 시스템 관리에 알립니다(공격을 수행할 만큼 중요함). 이 동작으로 인해 가동 중지 시간이 발생할 위험이 있습니다.

디스크가 손상되었거나 노후로 인해 교체가 필요한 경우를 제외하고 디스크를 핫스왑하지 마십시오!

핫스왑은 손상되었거나 오래되었거나 교체가 필요한 디스크를 교체할 때 중단 없는 시스템 가동 시간을 가능하게 하는 도구입니다.불규칙한이유 - 그것이 좋은 전부입니다(매우 중요한 시스템에 관해서는 이것만으로도 충분합니다).

디스크가 손상되면 예비 디스크를 RAID 어레이에 미리 추가하여 예비 디스크가 자동으로 동기화되도록 하거나 핫 스왑 가능한 교체 디스크를 수동으로 추가해야 합니다.

Anthon의 답변이나 이 가이드를 참조하세요.https://raid.wiki.kernel.org/index.php/RAID_setup

관련 정보