web-dev-qa-db-ja.com

USBキーはマウントするたびに同じ名前になりますか?

私は、bashスクリプトを介して毎日データを保存するために使用されるUSBキーを持っています。次のコマンドを使用して、特定のユーザーがフォルダに書き込むことができるようにマウントすることができました。

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

スクリプトは、必要に応じてディレクトリを実行および作成でき、完璧です。ある時点で、USBキーが取り外され、新しいキー(同じモデル)に交換されます。新しいUSBキーの名前は/dev/sdc1のままですか、それとも別の名前ですか?

それが別のものである場合、それを自動的に作成するために、スクリプトに取り付け部品をどのように含めることができますか?

9
Gudrun

/dev/sdXyによるアクセスは危険ですが、UUIDによってより正確な識別が行われる場合があります。

USBスティックの交換について(ある時点で)言及しているので、互換性を維持するために、ラベルでUSBスティックを識別できます。そのためには、/dev/disk/by-label/YourLabelHereを使用します。

スクリプトを実行する前にラベルを新しいUSBスティックに設定する必要があることに注意してください。また、/dev/disk/by-labelは、(少なくとも)1つのUSBスティックが接続されている場合にのみ使用できます(そうでない場合は削除されます)。

Usbラベルの設定方法の詳細については、こちらをご覧ください: https://askubuntu.com/questions/194510/how-to-edit-label-of-usb-drive

6
Alex Tartan

これが私がこの問題に取り組む方法ですが、一般的に佐藤桂があなたに言ったように、あなたはudevルールを書く必要があります。

  1. デバイスを接続し、取得したデバイスを確認します(たとえば、dmesgを見て)。
  2. スーパーユーザーとしてudevadm info --query all /dev/sdc(またはその他)を呼び出します。
  3. Udevルールを設定します。これが私の手帳の例です。ステップ2で情報から読み取ったフィールドID_SERIAL_SHORTおよびID_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",
    

    udevルール行のパーティション1の場合。

正しいシステムがある場合、udevルールは/etc/udev/rules.dにあります。

  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
ikrabbe

@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
}
0
Joe