UUIDでハードドライブをマウントし、もう1つはデバイスファイルとしてマウントするとき、最初のドライブが常に/dev/sdaXで、2番目のドライブが/dev/sdbXで、その逆ではないことをどのように確認しますか?
私がやろうとしていることの説明:Raspberry Pi Zero、USBハブ、外付けハードドライブ、SDカード(すべて二次電池で駆動)を一緒に接続しています。その後、Raspberry Piの電源を入れると、外付けハードドライブにSDカードが自動的にバックアップされます。
簡略化されたfstabは次のとおりです。
...
uuid=123123 /mnt/exthd ntfs rw,... 0 0
/dev/sdb1 /mnt/sdcard vfat ro,... 0 0
カードをフォーマットしたり他のカードを使用したりするとSDカードが変わるため、UUIDでSDカードをマウントすることはできません。
問題は、外部ドライブが常に/ dev / sda1を使用してマウントされていることを確認できることです。
または、たとえば、出力を解析し、lsblk
どのデバイスのサイズが小さいかを確認してから、このデバイスファイルを使用する必要がありますか?
私はRaspberryや他のものからフィードバックを受けません。これが常に機能していることを確認する必要があります。必要なら直接分析することもできると思います。問題は、私がそれを処理する必要があるのか、それとも簡単な方法があるのかということです。
答え1
devpath
USBポートのプロパティが変更されていないことがわかりました。udev
デバイスが接続されているポートに基づいて新しいルールを追加し、特定のシンボリックリンクを作成できます。次のようにディレクトリに新しいファイルを追加するだけです/etc/udev/rules.d
。
#new symlink for my front USB port:
KERNELS=="2-1.8", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.8", SYMLINK+="usb_port1"
.rules
たとえば、名前がで終わっていることを確認してくださいport1.rules
。これから、その特定のポートに接続されているすべてのデバイスがその対応するシンボリックリンクの下に一覧表示されるので、そのfstab
エントリを使用できます。あなたが見つけなければならないSDカードも同じです。/dev/usb_port1
/dev/
==
特定のポート(部分)の一意の属性を確認し、その属性が一致する場合は、+=
新しいシンボリックリンク()が/dev/
。
一致させたい属性情報はudevadm info -a /dev/sdb1
(機器の場合sdb1
)で検索できます。 1つの親デバイスブロックからのみ属性を取得し、その親デバイスブロックに一意のエントリがあることを確認してください。devpath
いくつKERNELS
かのUSBポート(利用可能な場合)を使用して、どのポートが変更されたかを確認します。
PS:udev
また、デバイスが接続されているときにスクリプトを実行することもできます。バックアップ要件に役立ちます。ただし、システムの起動が挿入と見なされるかどうかは不明であるため、動作を確認する必要があります。
答え2
Fiximanの答えを使用する可能性が高いが、完全性のためにサイズが小さく、まだマウントされていないデバイスをマウントするために作成したサンプルスクリプトがあります。
#!/bin/bash
output=$(lsblk -b -I 8 -i | grep "^[\`|]-sd.1" | awk '{print substr($1,3), $4, $7}')
cursize=999999999999999
while read dev size mountpath; do
echo $dev :: $size :: $mountpath
if [[ $size -lt $cursize && -z $mountpath ]]
then
cursize=$size;
dev2mount=$dev;
fi
done <<< "$output"
echo to mount: $dev2mount of $cursize size