毎日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
(少なくとも)1つのUSBスティックが接続されている場合にのみ使用できます(そうでない場合は削除されます)。
USBタグの設定方法の詳細については、こちらをご覧ください。https://askubuntu.com/questions/194510/how-to-edit-label-of-usb-drive
答え2
これが私がこの問題を解決した方法ですが、一般的にSato Katsuraが言ったように、udevルールを作成する必要があります。
- デバイスを接続し、どのデバイスが接続されているかを確認します(例:dmesgを確認してください)。
udevadm info --query all /dev/sdc
スーパーユーザー(またはその他)として呼び出されます。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",
パーティション番号1の場合は、udevルール行にあります。
/etc/udev/rules.d
通常のシステムをお持ちの場合は、udevルールを見つけることができます。
今できる
udevadm control --reload
ルールを再ロードして
udevadm monitor
ステップ5で何が起こるかを監視します。
USBデバイスを取り外して再接続します(もちろん、デバイスを取り付けた場合は取り外す前に)。モニターは初期化時に新しいデバイスについて通知します。
/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
}