特定のデバイスが常に同じデバイスファイルを使用していることを確認する方法は?

特定のデバイスが常に同じデバイスファイルを使用していることを確認する方法は?

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

devpathUSBポートのプロパティが変更されていないことがわかりました。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

関連情報