저는 Intel C606 칩셋으로 구동되고 SAS 기능을 갖춘 듀얼 4포트 SCU가 있는 SuperMicro X9SRi-3F 마더보드를 사용하고 있습니다. 제가 사용하는 하드 드라이브는 WD Re(WD6001F9YZ) 4개와 WD Gold(WD6002FRYZ) 2개입니다. 모든 용량은 6TB입니다.
WD6001F9YZ는 포트 0-3에 연결되고, WD6002FRYZ는 포트 4와 5에 연결됩니다(최종적으로 포트 6과 7에 2개의 WD6001F9YZ를 추가할 예정입니다).
운영 체제는 마더보드의 일반 SATA 2.0 포트 중 하나에 연결된 1TB 드라이브에 설치됩니다.
CentOS 7은 모든 드라이브를 인식할 수 있으며 lsblk
출력은 다음과 같습니다.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5.5T 0 disk
sdb 8:16 0 5.5T 0 disk
sdc 8:32 0 5.5T 0 disk
sdd 8:48 0 5.5T 0 disk
sde 8:64 0 5.5T 0 disk
sdf 8:80 0 5.5T 0 disk
다음에도 나타납니다 /dev/disk/by-id
.
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA58PYRS -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV7KR -> ../../sdb
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV87E -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVL4J -> ../../sdd
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6002FRYZ-01WD5B0_K1HNL2KD -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 14:06 ata-WDC_WD6002FRYZ-01WD5B0_K1JMY3ND -> ../../sdf
그러나 다음에는 드라이브 cf만 나타납니다 /dev/disk/by-path
.
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-0x500304801349fe00-lun-0 -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-0x500304801349fe01-lun-0 -> ../../sdf
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-0x500304801349fe02-lun-0 -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-0x500304801349fe03-lun-0 -> ../../sdd
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-phy0-lun-0 -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-phy1-lun-0 -> ../../sdf
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-phy2-lun-0 -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 13:42 pci-0000:03:00.0-sas-phy3-lun-0 -> ../../sdd
MB의 BIOS에서 SCU 장치가 활성화되고 "SCU RAID 옵션 ROM/UEFI 드라이버"가 활성화되면 모든 드라이브가 인식됩니다.
SCU 장치가 활성화되었지만 옵션 ROM이 비활성화된 경우 드라이브가 BIOS에 표시되지 않습니다.
두 설정(옵션 ROM 비활성화/활성화) 모두 동일한 문제를 일으킵니다. 물론 SCU를 비활성화하면 운영 체제에 전혀 표시되지 않습니다(lspci 출력에서 사라짐).
출력은 lshw -c storage
다음과 같습니다.
*-sas
description: Serial Attached SCSI controller
product: C606 chipset Dual 4-Port SATA/SAS Storage Control Unit
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:03:00.0
logical name: scsi6
logical name: scsi7
version: 06
width: 64 bits
clock: 33MHz
capabilities: sas pm pciexpress msix bus_master cap_list
configuration: driver=isci latency=0
resources: irq:49 memory:fa8f8000-fa8fffff memory:fa000000-fa7fffff ioport:e100(size=256) ioport:e000(size=256) memory:fa800000-fa8f7fff
8개의 디스크 ZFS 어레이를 설정할 계획이고 시스템에 있는 드라이브의 물리적 위치(슬롯 1, 슬롯 2 등)를 참조하려고 하기 때문에 이것이 문제가 됩니다.
내 직감으로는 이것이 C606의 커널 드라이버에 문제가 있다고 말하지만 솔직히 모르겠습니다.
[편집하다]
포트 6과 7에 사용하려는 다른 SATA 드라이브를 핫플러그하면 /dev/disk/by-path
다음과 같습니다.
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 pci-0000:03:00.0-sas-0x5fcfffff00000001-lun-0 -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 pci-0000:03:00.0-sas-0x5fcfffff00000002-lun-0 -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 pci-0000:03:00.0-sas-0x5fcfffff00000003-lun-0 -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000004-lun-0 -> ../../sdi
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000004-lun-0-part1 -> ../../sdi1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000004-lun-0-part2 -> ../../sdi2
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000005-lun-0 -> ../../sdj
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000005-lun-0-part1 -> ../../sdj1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-0x5fcfffff00000005-lun-0-part2 -> ../../sdj2
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 pci-0000:03:00.0-sas-phy0-lun-0 -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 pci-0000:03:00.0-sas-phy1-lun-0 -> ../../sdb
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 pci-0000:03:00.0-sas-phy2-lun-0 -> ../../sdi
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-phy2-lun-0-part1 -> ../../sdi1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-phy2-lun-0-part2 -> ../../sdi2
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 pci-0000:03:00.0-sas-phy3-lun-0 -> ../../sdj
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-phy3-lun-0-part1 -> ../../sdj1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 pci-0000:03:00.0-sas-phy3-lun-0-part2 -> ../../sdj2
BIOS에서 옵션 ROM을 비활성화했기 때문에 이전에 시작했던 경로 부분이 sas-0x500304801349fe##
다음으로 변경되었습니다 . sas-0x5fcfffff000000##
그런데 흥미로운 점은 sdd
과 가 sdf
카탈로그에서 사라졌지 by-path
만 sda
, sdi
, 가 sdj
나타났다는 것입니다. 게다가 순서도 바뀌었습니다.
물론 8개의 드라이브가 모두 by-id
디렉토리에 표시됩니다.
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA58PYRS -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV7KR -> ../../sdb
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV87E -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVJK2 -> ../../sdj
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVJK2-part1 -> ../../sdj1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVJK2-part2 -> ../../sdj2
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVL4J -> ../../sdd
lrwxrwxrwx. 1 root root 9 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVNXX -> ../../sdi
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVNXX-part1 -> ../../sdi1
lrwxrwxrwx. 1 root root 10 Oct 17 14:24 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVNXX-part2 -> ../../sdi2
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6002FRYZ-01WD5B0_K1HNL2KD -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 14:20 ata-WDC_WD6002FRYZ-01WD5B0_K1JMY3ND -> ../../sdf
[편집 2]
이제 부팅할 때마다 디렉터리가 by-path
변경되는 것 같습니다. 현재는 다음과 같습니다.
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-0x5fcfffff00000001-lun-0 -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-0x5fcfffff00000002-lun-0 -> ../../sdb
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-0x5fcfffff00000003-lun-0 -> ../../sdf
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-0x5fcfffff00000004-lun-0 -> ../../sdd
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-phy0-lun-0 -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-phy1-lun-0 -> ../../sdf
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-phy2-lun-0 -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 pci-0000:03:00.0-sas-phy3-lun-0 -> ../../sdd
by-id
경로는 다음과 같습니다 .
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA58PYRS -> ../../sda
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV7KR -> ../../sdb
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LV87E -> ../../sdc
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6001F9YZ-09YUWL1_WD-WX41DA5LVL4J -> ../../sdd
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6002FRYZ-01WD5B0_K1HNL2KD -> ../../sde
lrwxrwxrwx. 1 root root 9 Oct 17 15:03 ata-WDC_WD6002FRYZ-01WD5B0_K1JMY3ND -> ../../sdf
디스크에는 항상 동일한 장치 ID(sda/sdb/etc.)가 할당되므로 안심할 수 있지만 경로가 예측할 수 없게 변경됩니다(제 목적으로는 완전히 사용할 수 없게 됩니다).
[편집 3]
출력에는 du -a /sys/devices/pci0000\:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0 | grep -E 'sd.' | grep -vE 'sd./'
드라이브의 올바른 매핑이 표시됩니다.
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host6/port-6:0/end_device-6:0/target6:0:0/6:0:0:0/block/sda
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host6/port-6:1/end_device-6:1/target6:0:1/6:0:1:0/block/sdb
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host6/port-6:2/end_device-6:2/target6:0:2/6:0:2:0/block/sdc
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host6/port-6:3/end_device-6:3/target6:0:3/6:0:3:0/block/sdd
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host7/port-7:0/end_device-7:0/target7:0:0/7:0:0:0/block/sde
0 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0/host7/port-7:1/end_device-7:1/target7:0:1/7:0:1:0/block/sdf
그래서 문제는 버그와 관련된 것 같아요udev
답변1
Dell T420 서버도 있는데 출력은 udevadm info
다음과 같습니다.
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:0/0:0:0:0/block/sda
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:1/0:0:1:0/block/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:2/0:0:2:0/block/sdc
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:3/0:0:3:0/block/sdd
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:4/0:0:4:0/block/sde
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:5/0:0:5:0/block/sdf
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:6/0:0:6:0/block/sdg
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:08:00.0/host0/target0:0:7/0:0:7:0/block/sdh
host#
보시다시피 host0
장치 경로에는 인스턴스가 1개( )만 있는 반면 Intel SCU에는 2개( host6
및 host7
)가 있습니다. 분명히 CentOS 7의 udev는 이를 적절하게 처리하는 방법을 모르고 장치 링크를 덮어씁니다(따라서 해당 노드 아래의 모든 장치는 host6
해당 노드 아래의 해당 장치가 심볼릭 링크를 덮어쓰게 됩니다)./dev/disks/by-path
host7
이제 udev 규칙을 작성하는 방법을 배워야 할 것 같습니다...
[편집하다]
처음에는 udev 규칙을 사용하여 문제를 해결하려고 시도했습니다.https://gist.github.com/dghodgson/49da6175371cdde317e662fb8a7d078a
매우 추악하고 결함이 있습니다. 핫 스와핑은 전혀 올바르게 처리되지 않으며 파티션에 아무 작업도 수행하지 않습니다. 현재 위치에서 속성을 편집하는 대신 기존 정보에서 업데이트된 속성을 생성하는 방법을 찾아야 합니다. 그렇지 않으면 udev 규칙이 다시 로드될 때마다 경로가 변경될 수 있습니다.
[편집 2]
handle_scsi_default
내장 함수에 의해 생성된 출력 경로 와 유사하도록 요점이 업데이트되었습니다 path_id
. 이제 더욱 안정적이며 파티션도 처리할 수 있습니다. 다른 사람들도 유용하다고 생각하기를 바랍니다. 하지만 여전히 해킹이므로 YMMV.
현재 udev에 올바른 수정 사항을 패치하는 작업이 진행 중입니다.