하드 드라이브를 /dev/sd* 이름에 정적으로 바인딩하는 방법은 무엇입니까?

하드 드라이브를 /dev/sd* 이름에 정적으로 바인딩하는 방법은 무엇입니까?

아마도 이것은XY 문제, 완전한 상황은 다음과 같습니다.
이제 스토리지/데이터베이스로 사용될 서버가 많이 있습니다. 모두 유사한 설정을 가지고 있습니다. 운영 체제(Ubuntu 18.04.2 LTS)용 SSD 드라이브와 JBOD용 HDD 6개입니다. 이 6개 드라이브는 mdadm을 통해 RAID-10 어레이로 그룹화되어야 합니다.

저는 6개의 서버를 사용했고 (Cloud-Init 없이) 라이브 서버가 아닌 서버 ISO를 사용하여 수동으로 Ubuntu를 설치했습니다. 설치하는 동안과 시작한 후에 "시스템" 파티션의 /dev/sda이름이 일부 서버와 다른 서버에서 동일한 것을 발견했습니다 /dev/sdg. 이 경우 xCat, Ansible 및 기타 "자동화" 유틸리티의 특정 스크립트를 통해 mdadm 명령을 실행하여 RAID 어레이를 자동으로 생성할 수 없습니다.

"레거시" 모드로 Ubuntu를 설치했고 6개의 HDD에 MBR 파티션 구성이 있으므로 실행하면 ls -l /dev/disk/by-uuid.우데브도움이 될 수 있지만 선택한 서버에 대한 규칙을 수동으로 작성하고 실행해야 하므로 그렇게 하지 않고 수동으로 RAID를 생성하는 것이 좋습니다. 하지만 우리는 총 100개가 넘는 서버를 갖게 될 것이므로 이 루틴을 최대한 자동화하고 싶습니다. 어떤 아이디어가 있나요?

답변1

커널 동작은 수년 동안 문서화되어 왔으며 다른 서버에서는 물론이고 동일한 서버를 재부팅하더라도 일관된 드라이브 장치 이름 지정에 의존할 수 없습니다.

시스템의 드라이브를 감지하고 루트 SSD와 스토리지 JBOD 드라이브를 구별하려면 자동화된 RAID 설정 스크립트를 작성해야 합니다.

루트 드라이브를 감지하는 한 가지 확실한 방법은 mount | grep " on / ".

/dev/disk/by-id/그렇지 않으면 채워진 기호 링크 필드인 을 사용할 수 있습니다 udev. 각 항목은 드라이브 제조업체와 일련 번호를 기반으로 이름이 지정된 기호 링크이며 기호 링크는 드라이브의 블록 장치(및 파티션이 있는 경우)를 가리킵니다. 예를 들어 내 시스템 중 하나에는 /dev/disk/by-id다음이 포함됩니다.

lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG-part9 -> ../../sdb9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040 -> ../../sdd
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040-part9 -> ../../sdd9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164 -> ../../sdc
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164-part9 -> ../../sdc9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116 -> ../../sda
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116-part9 -> ../../sda9

이는 Seagate 2TB 드라이브 1개와 WD 2TB 드라이브 3개로, 각각 2개의 파티션(파티션 1과 9 - 예, zfs 풀용)이 있습니다.

스크립트가 각 RAID 드라이브에 파티션을 생성하고(권장) 전체 드라이브 대신 해당 파티션을 사용하는 경우 이미 사용 중인 드라이브(즉, 파티션이 있음)와 사용 중이 아닌 드라이브(따라서)를 쉽게 식별할 수 있습니다. 레이드 어레이에는 안전합니다).

wwn-로 시작하는 장치 이름이 거의 확실하게 있습니다. 이것들은전세계 공통 이름각 드라이브에 속하는 식별자입니다. OUI 코드를 제조업체로 변환하기 위해 조회 테이블을 사용하지 않고 드라이브를 물리적으로 식별하는 확실한 방법을 제공하지 않기 때문에 공급업체 + 일련 번호 이름보다 덜 유용하다고 생각합니다.

관련 정보