USB 키를 장착 할 때마다 동일한 이름이 사용됩니까?


9

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

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

스크립트는 원하는대로 디렉토리를 실행하고 작성할 수 있으며 완벽합니다. 어느 시점에서 USB 키가 분리되고 새 키 (같은 모델)로 교체됩니다. 새 USB 키의 이름이 계속 유지 /dev/sdc1됩니까 아니면 다른 이름 입니까?

다른 부품 인 경우 스크립트에 장착 부품을 포함시켜 자동으로 만들 수 있습니까?


2
대답은 아니요, 그러나 udev 규칙으로 해결할 수 있습니다 . 더 좋지만 약간 오래된 설명 은 여기 를 참조 하십시오 .
Satō Katsura

@AlexTartan 다른 USB 포트에 다른 USB 디스크를 연결하면 sdc를 얻을 수 있습니다. 따라서 여러분의 제약 "sdc1에 승천하는 것은 없습니다"는 사실입니다. 일반적으로 이것은 결코 불가능한 매우 위험한 가정입니다. sd [az]를 영구 장치 이름으로 사용하는 것은 좋은 생각이 아닙니다. 이것은 하드웨어 점퍼를 설정하고 올바른 케이블 플러그를 선택하여 설정할 수있는 4 개의 정적 포트가있는 IDE 컨트롤러가있는 시대의 유산입니다.
ikrabbe

1
@ikrabbe는 레이블 식별을 기반으로 답변을 게시 한 이유입니다 (조금 더 쉽게 관리 할 수 ​​있음).
Alex Tartan

답변:


6

에 의해 액세스하는 /dev/sdXy것은 위험 하지만 보다 정확한 식별은에 의해 수행 될 수 있습니다 UUID.

호환성을 유지하기 위해 USB 스틱 변경을 언급 했으므로 (일부) USB 스틱을 레이블로 식별 할 수 있습니다. 그렇게하려면 다음을 수행하십시오 /dev/disk/by-label/YourLabelHere..

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

USB 레이블을 설정하는 방법에 대한 자세한 내용은 /ubuntu/194510/how-to-edit-label-of-usb-drive 에서 확인할 수 있습니다.


1
파일 시스템에 레이블이 없으면 /dev/disk/by-id/대신 사용할 수 있습니다 (파일 시스템에 사용하는 것입니다).
Toby Speight

3

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

  1. 기기를 연결하고 기기를 확인합니다 (예 : dmesg 시청).
  2. 수퍼 유저 전화 udevadm info --query all /dev/sdc또는 기타
  3. udev 규칙을 설정하십시오. 여기 내 주머니에 대한 예가 있습니다. 필드 ID_SERIAL_SHORTID_FS_UUID2 단계의 정보를 읽었습니다.

    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
    

이제 ulink 규칙 파일의 SYMLINK 필드에 symlinks /dev/pocketbook및을 사용하여 영구 규칙을 정의 할 수 있습니다 /dev/pocketbook-sd.


1
답변 주셔서 감사합니다. 그러나 나는 그것을 사용할 수 없습니다. 내가 작업중 인 장치는 화산에 설치되어 있으며 USB 스틱은 그곳에서 얻은 데이터를 저장하는 데 사용됩니다. 우리는 USB 스틱을 교체하기 위해 세 개의 mounths마다 한 번만 갈 것입니다. "스크린"인터페이스없이 원격 액세스 만 가능합니다. USB는 항상 다르지만 동일한 USB 포트에 연결되어 있기 때문에 더 쉬운 방법은 sdc1 경로를 유지하는 것입니다. 내가 할 수있는 일을 udev 규칙으로 볼 것입니다.
Gudrun

0

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

대상에 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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.