USB 플래시 드라이브는 설치할 때마다 동일한 이름을 갖게 됩니까?

USB 플래시 드라이브는 설치할 때마다 동일한 이름을 갖게 됩니까?

매일 bash 스크립트를 통해 데이터를 저장하는 데 사용하는 USB 키가 있습니다. 다음을 사용하여 특정 사용자가 폴더에 쓸 수 있도록 설치했습니다.

mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop

스크립트는 필요에 따라 실행되고 디렉터리를 생성하며 이는 완벽하게 작동합니다. 어느 시점에서는 USB 키가 제거되고 새 키(동일 모델)로 교체됩니다. 새 USB 플래시 드라이브는 여전히 해당 이름을 유지합니까 /dev/sdc1, 아니면 달라집니까?

다른 경우 스크립트에 설치 부분을 포함하여 자동으로 만들려면 어떻게 해야 합니까?

답변1

접근하는 것은 /dev/sdXy위험하지만 통과하면 보다 정확한 식별이 가능합니다 UUID.

USB 스틱을 교체한다고 언급하셨기 때문에(어느 시점에서), 호환성을 유지하기 위해 USB 스틱을 라벨로 식별하는 것이 좋습니다. 이렇게 하려면 다음을 수행할 수 있습니다 /dev/disk/by-label/YourLabelHere.

스크립트를 실행하기 전에 새 USB 스틱에 레이블을 설정해야 하며, 이는 /dev/disk/by-label(적어도) 하나의 USB 스틱이 연결된 경우에만 사용할 수 있습니다(그렇지 않으면 삭제됩니다).

USB 태그 설정 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.https://askubuntu.com/questions/194510/how-to-edit-label-of-usb-drive

답변2

이것이 제가 이 문제를 해결한 방법이지만 일반적으로 Sato Katsura가 말했듯이 udev 규칙을 작성해야 합니다.

  1. 장치를 연결하고 어떤 장치가 연결되는지 확인하세요(예: dmesg를 확인하여).
  2. udevadm info --query all /dev/sdc수퍼유저 (또는 기타) 로 호출됩니다 .
  3. udev 규칙을 설정하세요. 여기 내 지갑에 대한 예가 있습니다. 2단계에서 읽은 필드 ID_SERIAL_SHORTID_FS_UUID정보 :

    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="3878-D432", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook", OWNER="ingo"
    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="9016-4EF8", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook-sd", OWNER="ingo"
    

    여기에 OWNER가 설정되어 있으며 기본 사용자 계정을 사용하여 설치할 수 있습니다. 그리고 제 지갑은 파티션이 나누어져 있지 않고 일반 디스크에 마운트되어 있습니다. 파티션을 변경한 경우:

    ENV{ID_PART_ENTRY_NUMBER}=="1", ENV{DEVTYPE}=="partition",
    

    파티션 번호 1의 경우 udev 규칙 줄에 있습니다.

/etc/udev/rules.d정상적인 시스템을 가지고 있다면 에서 udev 규칙을 찾을 수 있습니다.

  1. 이제 할 수 있다

    udevadm control --reload
    

    규칙을 다시 로드하고

    udevadm monitor
    

    5단계에서 어떤 일이 발생하는지 모니터링합니다.

  2. USB 장치를 분리했다가 다시 연결하십시오(물론, 장치를 설치한 경우에는 제거하기 전). 모니터는 초기화 시 새 장치에 대해 알려줍니다.

  3. /dev/올바른 기호 링크가 포함되어 있는지 확인하세요 . 내 경우에는 다음과 같은 결과를 얻었습니다.

    brw-rw---- 1 ingo disk    8,  48 Aug  3 10:32 sdd
    brw-rw---- 1 ingo disk    8,  32 Aug  3 10:32 sdc
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook-sd -> sdd
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook -> sdc
    

이제 기호 링크를 사용 /dev/pocketbook하고 지속성 규칙을 정의 /dev/pocketbook-sd하거나 udev 규칙 파일의 SYMLINK 필드에 임의의 이름을 사용할 수 있습니다.

답변3

@alexartan의 답변에 추가하십시오.

USB 드라이브를 대상으로 사용하는 자체 백업 시스템을 출시했습니다. 무슨 일인지 알아내야 해요. UUID는 특별히 사용자 친화적이지 않기 때문에 디스크 레이블을 사용합니다.

UUID도 약간 문제가 있습니다. 파티션을 다시 포맷할 때마다 새로운 고유 UUID를 얻게 되므로 해당 UUID를 사용하는 모든 스크립트를 수정해야 하기 때문입니다. 다시 포맷된 ​​파티션(또는 새/교체 드라이브의 파티션)에 이전과 동일한 레이블을 할당하고 스크립트를 유지할 수 있습니다.

나는 나만의 고유한(인간 친화적인) 레이블 지정 규칙을 생각해 냈고 gparted를 사용하여 개별 파티션을 생성할 때 레이블을 지정했습니다.

내 스크립트가 특정 파티션에 액세스해야 할 때 태그를 사용하여 장치 이름을 찾습니다.

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}

관련 정보