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


9

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

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

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

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


2
答えは「いいえ」ですが、udevルールで回避できます。より良いが少し時代遅れの説明については、こちらをご覧ください。
桂佐藤

@AlexTartan sdcを取得する前に、他のUSBポートに他のUSBディスクを接続した場合。したがって、「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(少なくとも)1つのUSBスティックが接続されている場合にのみ使用できます(そうでない場合は削除されます)。

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


1
ファイルシステムにラベルがない場合は、/dev/disk/by-id/代わりに使用することができます(これは私のファイルシステムに使用しています)。
Toby Speight 2015

3

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

  1. デバイスを接続し、取得したデバイスを確認します(たとえば、dmesgを見て)。
  2. スーパーユーザーとしてudevadm info --query all /dev/sdc(または何でも)呼び出します。
  3. udevルールを設定します。これが私の手帳の例です。フィールドID_SERIAL_SHORTID_FS_UUID私は、ステップ2の情報から読み取りました。

    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。

/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フィールドの名前で永続的なルールを定義できます。


1
お返事ありがとうございます。ただし、使用できなくなります。私が取り組んでいるデバイスは火山に設置されており、そこに取得されたデータを保存するためにUSBスティックが使用されています。USBスティックを交換するために、3回に1回マウントするだけです。「画面」インターフェースなしで、私はそれにリモートアクセスしか持っていません。USBは常に異なりますが、同じUSBポートに接続されるため、sdc1パスを維持する方が簡単な方法だと思います。私ができることはudevルールでわかります。
Gudrun 2015

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.