특정 장치가 항상 동일한 장치 파일을 사용하는지 확인하는 방법은 무엇입니까?

특정 장치가 항상 동일한 장치 파일을 사용하는지 확인하는 방법은 무엇입니까?

UUID로 하드 드라이브를 마운트하고 다른 하나는 장치 파일로 마운트할 때 첫 번째 드라이브가 항상 /dev/sdaX이고 두 번째 드라이브가 /dev/sdbX이고 그 반대가 아닌지 어떻게 확인합니까?

내가 하려는 작업에 대한 설명: Raspberry Pi Zero, USB 허브, 외장 하드 드라이브 및 SD 카드(모두 보조 배터리로 구동)를 함께 연결하고 있습니다. 그런 다음 Raspberry Pi의 전원을 켜면 외장 하드 드라이브에 SD 카드가 자동으로 백업됩니다.
단순화된 fstab은 다음과 같습니다.

...
uuid=123123   /mnt/exthd   ntfs   rw,... 0 0
/dev/sdb1     /mnt/sdcard  vfat   ro,... 0 0

카드를 포맷하거나 다른 카드를 사용할 때 SD 카드가 변경되기 때문에 UUID로 SD 카드를 마운트할 수 없습니다.

문제는 외부 드라이브가 항상 /dev/sda1을 사용하여 마운트되어 있는지 확인할 수 있느냐는 것입니다.

아니면 예를 들어 의 출력을 구문 분석하고 lsblk어떤 장치의 크기가 더 작은지 확인한 다음 이 장치 파일을 사용해야 합니까?

저는 Raspberry나 다른 어떤 것에서도 피드백을 받지 않습니다. 이것이 항상 작동하는지 확인해야합니다. 필요하다면 직접 분석할 수도 있을 것 같아요. 문제는 내가 그것을 처리해야 하는가, 아니면 더 쉬운 방법이 있느냐는 것입니다.

답변1

devpathUSB 포트의 속성이 변경되지 않은 것으로 나타났습니다 . udev장치가 연결된 포트를 기반으로 새 규칙을 추가하고 특정 기호 링크를 생성할 수 있습니다 . 다음과 같이 디렉터리에 새 파일을 추가하면 됩니다 /etc/udev/rules.d.

#new symlink for my front USB port:
KERNELS=="2-1.8", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.8", SYMLINK+="usb_port1"

.rules예를 들어 이름이 로 끝나는지 확인하세요 port1.rules. 이제부터 해당 특정 포트에 연결된 모든 장치가 의 해당 심볼릭 링크 아래에 나열되므로 fstab해당 항목을 사용할 수 있습니다 . 당신이 알아냈어야 할 SD 카드도 마찬가지입니다./dev/usb_port1/dev/

==특정 포트(부분)의 고유 속성을 확인하고 해당 속성이 일치하면 +=새 심볼릭 링크( )가 /dev/.

일치시키려는 속성 정보는 udevadm info -a /dev/sdb1(기기의 경우 sdb1)를 통해 검색할 수 있습니다. 하나의 상위 장치 블록에서만 속성을 가져오고 해당 상위 장치 블록에 고유한 항목이 있어야 하는지 확인하십시오. devpathKERNELS개의 USB 포트(사용 가능한 경우)를 사용하여 어떤 포트가 변경되었는지 확인하십시오.

추신: udev또한 장치가 연결되어 있을 때 스크립트 실행을 허용합니다. 백업 요구 사항에 유용할 수 있습니다. 하지만 시스템을 시작하는 것이 삽입으로 간주되는지는 알 수 없으므로 동작을 확인해야 합니다.

답변2

Fiximan의 답변을 사용할 가능성이 높지만 완전성을 위해 크기가 더 작고 아직 마운트되지 않은 장치를 마운트하기 위해 작성한 샘플 스크립트가 있습니다.

#!/bin/bash

output=$(lsblk -b -I 8 -i | grep "^[\`|]-sd.1" | awk '{print substr($1,3), $4, $7}')

cursize=999999999999999

while read dev size mountpath; do
        echo $dev :: $size :: $mountpath
        if [[ $size -lt $cursize && -z $mountpath ]]
        then
                cursize=$size;
                dev2mount=$dev;
        fi
done <<< "$output"

echo to mount: $dev2mount of $cursize size

관련 정보