![udev는 nvme 드라이브 및 파티션에 대해 중복 /dev/disk/by-id 심볼릭 링크를 생성합니다.](https://linux55.com/image/223046/udev%EB%8A%94%20nvme%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8C%20%EB%B0%8F%20%ED%8C%8C%ED%8B%B0%EC%85%98%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%A4%91%EB%B3%B5%20%2Fdev%2Fdisk%2Fby-id%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4..png)
최근에 저는 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개의 링크를 선호하는 것 같습니다. 이러한 링크는...어...네임스페이스 안전하기 때문입니다. ;-)
이 접근 방식에 대해서는 잘 모르겠습니다. 약간 다른 규칙을 사용하면 일반 심볼릭 링크를 보호할 수 있습니다... 이 패치는 원래 문제를 수정하지 않고 새로운 심볼릭 링크만 추가하는 것인데, 좀 이상합니다. 하지만 저는 네임스페이스를 많이 사용하지 않으므로...