私は、bashスクリプトを介して毎日データを保存するために使用されるUSBキーを持っています。次のコマンドを使用して、特定のユーザーがフォルダに書き込むことができるようにマウントすることができました。
mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop
スクリプトは、必要に応じてディレクトリを実行および作成でき、完璧です。ある時点で、USBキーが取り外され、新しいキー(同じモデル)に交換されます。新しいUSBキーの名前は/dev/sdc1
のままですか、それとも別の名前ですか?
それが別のものである場合、それを自動的に作成するために、スクリプトに取り付け部品をどのように含めることができますか?
/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
これが私がこの問題に取り組む方法ですが、一般的に佐藤桂があなたに言ったように、あなたはudevルールを書く必要があります。
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",
udevルール行のパーティション1の場合。
正しいシステムがある場合、udevルールは/etc/udev/rules.d
にあります。
今できる
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フィールドの名前で永続的なルールを定義できます。
@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
}