udev는 nvme 드라이브 및 파티션에 대해 중복 /dev/disk/by-id 심볼릭 링크를 생성합니다.

udev는 nvme 드라이브 및 파티션에 대해 중복 /dev/disk/by-id 심볼릭 링크를 생성합니다.

최근에 저는 NVME 드라이브에 추가 심볼릭 링크가 있고 이름이 추가된 /dev/disk/by-id동일한 이름의 중복 항목이 있음을 발견했습니다._1

# ls -lF /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW{,_1}
lrwxrwxrwx 1 root root 13 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW -> ../../nvme0n1
lrwxrwxrwx 1 root root 13 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1 -> ../../nvme0n1

(일련번호는 특별한 이유 없이 대부분 XXXXXXXX로 수정됩니다.)

또한 NVME 드라이브의 모든 파티션에 대한 항목도 복사합니다.

$ ls -lF /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1*-part*'
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part3 -> ../../nvme0n1p3
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part4 -> ../../nvme0n1p4
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part5 -> ../../nvme0n1p5
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part6 -> ../../nvme0n1p6
lrwxrwxrwx 1 root root 15 Jul 29 19:22 /dev/disk/by-id/nvme-Samsung_SSD_970_EVO_500GB_S466XXXXXXXXXXW_1-part7 -> ../../nvme0n1p7

이 문제는 SATA 또는 USB 플래시 드라이브가 아닌 NVME 드라이브에서만 발생합니다.

/usr/lib/udev/rules.d/60-persistent-storage.rules나는 이것을 할 수 있는 명백한 것을 보지 못했습니다 .

udev왜 이런 일이 일어나는지 아는 사람이 있나요 ? 더 중요한 것은, 그것을 어떻게 막을 것인가?

답변1

다음 줄을 확인하세요 /usr/lib/udev/rules.d/60-persistent-storage.rules.

KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{nsid}=="?*", ENV{ID_NSID}="$attr{nsid}"
# obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility
KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \
  OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}"
KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="?*",\
  OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}"

첫 번째 규칙은 NVMe 장치의 ID_NSID(네임스페이스 ID?)를 설정합니다 head /sys/block/nvme*/nsid. 두 번째 규칙은 ID_SERIAL을 설정하고 일반 disk/by-id/nvme-ID_SERIAL심볼릭 링크를 만듭니다. 세 번째 규칙은 ID_NSID를 ID_SERIAL에 추가하고 "중복" disk/by-id/nvme-ID_SERIAL_NSID심볼릭 링크를 만듭니다.

udevadm info /dev/nvme세 번째 규칙이 두 번째 규칙 세트를 재정의하므로 ID_SERIAL의 NSID 변형만 표시됩니다 .

약간 혼란스러워 보이지만 예상대로 작동하는 것 같습니다. 이를 제거하려면 위에 인용된 세 번째 udev 규칙을 비활성화해야 합니다.


이것에c5ba7a2a @ github/systemd 커밋또한 개별 파티션 심볼릭 링크에 대해서도 동일한 규칙이 반복되는 것을 볼 수 있으므로 두 곳에서 이를 비활성화해야 합니다.

그러나 여기서의 의도는 일반 링크보다 _1개의 링크를 선호하는 것 같습니다. 이러한 링크는...어...네임스페이스 안전하기 때문입니다. ;-)

이 접근 방식에 대해서는 잘 모르겠습니다. 약간 다른 규칙을 사용하면 일반 심볼릭 링크를 보호할 수 있습니다... 이 패치는 원래 문제를 수정하지 않고 새로운 심볼릭 링크만 추가하는 것인데, 좀 이상합니다. 하지만 저는 네임스페이스를 많이 사용하지 않으므로...

관련 정보