며칠 동안 머리카락이 뽑히기 시작한 문제를 다루고 있습니다. 여기 누군가 내 문제를 해결할 수 있는 아이디어가 있기를 바랍니다. :-).
24개의 3.5" 드라이브가 있는 대형 스토리지 서버가 있습니다. 드라이브는 IT 모드에서 실행되는 3개의 LSI 9211-8i 컨트롤러에 분산되어 있습니다. 드라이브는 제대로 작동하는 대형 소프트웨어 raid-6 어레이(mdraid)의 일부입니다. 2개의
1TB가 있습니다. 마더보드 SATA 포트 @ 소프트웨어 raid-1(mdraid)에 OS 드라이브로 직접 연결된 SSD는 드라이브 영구 이름을 제외하고는 정상적으로 작동합니다.
어떤 이유로 재부팅할 때마다 마더보드에 직접 연결된 SSD 드라이브의 이름이 거의 변경됩니다. 때로는 이름이 "sda + sdb"로 지정되고 다음 재부팅 시 이름이 "sdy + sdz"로 지정되거나 때로는 알파벳 중간에 임의의 문자가 표시될 수도 있습니다. 핫 스왑 드라이브 베이 레이블로 인해 이는 매우 성가신 일입니다. LSI 컨트롤러에 연결된 24개의 드라이브에서는 이런 일이 발생하지 않습니다. 항상 올바른 순서로 되어 있습니다.
OS SSD가 항상 "sda + sdb" 또는 "sdy + sdz"로 식별되기를 원합니다. 이름이 정적이고 재부팅해도 변경되지 않는 한 어떤 이름인지는 신경 쓰지 않습니다.
"/etc/udev/rules.d/01-disk-bay.rules"에서 사용자 정의 udev 규칙을 설정해 보았습니다. 이러한 규칙은 작동하지 않거나 아무것도 변경되지 않는 것 같아서 OS가 규칙을 무시합니다. 내가 뭔가 잘못했을 수도 있습니다.
이 파일의 내용은
########## Map SATA 0 to /dev/sdy ##############
KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata1/host*", NAME="sdy", 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="sdy%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"
########## Map SATA 1 to /dev/sdz ##############
KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*1f.2/ata2/host*", NAME="sdz", 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="sdz%n", RUN+="/usr/bin/logger My partition parent=%p number=%n, ATTR{partition}=$ATTR{partition}"
LABEL="END_20_PERSISTENT_DISK"
SSD의 식별 정보는 다음과 같습니다. 첫 번째 SSD(현재 "sda"로 표시됨)
# udevadm info --name /dev/sda
P: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
N: sda
S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
S: disk/by-id/wwn-0x500a0751128d4e19
S: disk/by-path/pci-0000:00:1f.2-ata-1
E: DEVLINKS=/dev/disk/by-path/pci-0000:00:1f.2-ata-1 /dev/disk/by-id/wwn-0x500a0751128d4e19 /dev/disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
두 번째 SSD(현재 "sdb"로 표시됨).
# udevadm info --name /dev/sdb
P: /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
N: sdb
S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128B9EC5
S: disk/by-id/wwn-0x500a0751128b9ec5
S: disk/by-path/pci-0000:00:1f.2-ata-2
E: DEVLINKS=/dev/disk/by-id/wwn-0x500a0751128b9ec5 /dev/disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128B9EC5 /dev/disk/by-path/pci-0000:00:1f.2-ata-2
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
여기에 이런 일을 처리하는 방법에 대한 경험이 있는 사람이 있습니까? :-)
답변1
/dev/sdX
오랫동안 드라이브의 안정적인 식별자가 아니었습니다(사실 아마도 그런 적이 없었을 것입니다). 검색 순서대로 배포되며 여러 컨트롤러를 병렬로 검색합니다. 뿐만 아니라, 운전자가 버스에서 내렸다가 돌아오면 대개 새로운 편지를 받게 됩니다. 또는 때로는 고장난 드라이브를 교체할 때(두 가지 모두 md-raid의 "실패한" 항목과 같이 이전 드라이브를 여전히 참조하기 때문에 발생합니다).
거기예대신 안정적인 식별자를 사용하세요. 출력 udevadm info
결과는 다음과 같습니다.
S: disk/by-id/ata-Crucial_CT1024MX200SSD1_1619128D4E19
S: disk/by-id/wwn-0x500a0751128d4e19
이 두 가지 고유 식별자운전하다다른 포트로 이동하더라도 마찬가지입니다.
S: disk/by-path/pci-0000:00:1f.2-ata-1
이는 식별포트드라이브가 삽입되는 위치입니다. 드라이브를 교체하면 새 드라이브에도 이 식별자가 부여됩니다.
예를 들어 해당 포트에 있는 드라이브의 SMART 상태를 확인하려면 다음을 smartctl -x /dev/disk/by-path/pci-0000:00:1f.2-ata-1
사용할 수 있습니다.아니요 /dev/sda
. 누군가가 다른 포트로 옮긴 경우에도 특정 드라이브를 확인하려면 를 사용할 수 있습니다 smartctl -x /dev/disk/by-id/wwn-0x500a0751128d4e19
.
(필요한 경우 udev 규칙을 사용하여 추가 짧은 이름을 설정할 수 있습니다. SYMLINK+=
규칙에서 이를 수행할 수 있습니다. 예를 참조하십시오 /lib/udev/rules.d/60-persistent-storage.rules
. 그러나 구성 파일에만 있는 경우 일반적으로 짧은 이름이 필요하지 않습니다.)