udev は USB キー用のデバイス ファイルを作成しますが、パーティション用のデバイス ファイルを作成しません

udev は USB キー用のデバイス ファイルを作成しますが、パーティション用のデバイス ファイルを作成しません

ほとんどの USB キーは私のシステムで動作します。キーを差し込むと、udevキー全体のデバイス ファイル (例/dev/uba) とパーティションのデバイス ファイル (例/dev/uba1) が作成されます。

特定の USB キー (Sandisk Cruzer Micro 2Gb) がudev不正に動作します。キーのデバイス ファイルは作成されますが、パーティションのデバイス ファイルは作成されません。

dmesg動作中のキーと問題のあるキーの出力を比較すると、問題のあるキーを使用する場合に 1 行が欠落している点を除いて、出力は同じですuba: uba1。このことから、ディスク パーティションのノードが作成されていないことがわかりますmknod

奇妙なことに、私は...

sudo sfdisk -R /dev/uba

...ドライブのパーティションを強制的に再検査すると、突然パーティションが認識され、mknodデバイス ファイルが作成され、キーに問題なくアクセスできるようになります。何らかのタイミングの問題でしょうか?

編集:

自動マウント USB ルール:

ACTION=="add", KERNEL=="ub[a-z]*[1-9]*", PROGRAM="/sbin/blkid -o values -s TYPE %N", RESULT=="vfat", RUN+="/home/ubuntu/.mount_usb %k %n"
ACTION=="remove", KERNEL=="ub[a-z]*", RUN+="/home/ubuntu/.unmount_usb"

また: 問題のあるキーは、再フォーマット時にデフォルトで FAT16 になります。これを FAT32 に強制すると、udevadm monitor --propertyデバイスとパーティションのプロパティが動作中のキーとまったく同じになりますが、問題は依然として残ります。このことから、デバイス検出ルールの問題ではなく、デバイス自体の問題である可能性の方が高いと考えられます。これは論理的な結論でしょうか?

答え1

命名構造から判断すると/dev/uba、独自の UDEV ルールを作成したようですが、現在はうまく機能していません。サポートするには、そのコードを確認する必要があります。

すでに参照されていると思いますが、念のため、UDEV ルールの作成についてはこのリファレンスを参照してください。http://wiki.debian.org/udev

更新に基づくフィードバック

アクション=="add", カーネル=="ub[az]*[1-9]*", プログラム=="/sbin/blkid -o values -s TYPE %N", 結果=="vfat", 実行+="/home/ubuntu/.mount_usb %k %n"
アクション=="削除"、カーネル=="ub[az]*"、実行+="/home/ubuntu/.unmount_usb"

どうやら、あなたの前任者は について知らなかったようですusbmount。このルールは vfat でフォーマットされたドライブでのみ機能します。これで、そのリストを拡張するか、インストールして調整し、 usbmount必要なデバイス名を作成することができます。そうすれば、完全な自家製ソリューションではなく、わずかな構成変更のみで維持されるものが得られます。

ちなみに、そこには構文エラーがありますが、CLI からこれを実行すると、エラーが表示valueされます。values

sudo blkid -o 値 -s TYPE /dev/sdb1
vfat

したがって、 は%N入力 (ブロック デバイスなど) であり、 RESULT は標準出力です。これは udev のマニュアル ページで詳しく説明されています。 のような操作を実行できる可能性があります。RESULT=="[vfat|fat16]"または、出力をスクリプトに転送して、そこでより詳細な比較を実行することもできます。 usbmount パッケージをざっと見ると、追加と削除の両方について、コールアウト スクリプトで詳細な比較が行われていることがわかります。 に移行することを強くお勧めしますusbmount

関連情報