ただし、これが重複している場合はお詫び申し上げます。
USB大容量記憶装置が2つあり、どの物理デバイスがブロックデバイスにマップされているかを把握できる必要があります。
両方が常に存在するわけではないので、固定ブロックのデバイスパスだけに頼ることはできません。
lsusb
からデバイスパスを決定しようとしましたが、それはデバイス情報を提供するだけです。
Bus 001 Device 016:ID 0781:5406 SanDisk Corp. Cruzer Micro 1/2/4GB Flash Drive Bus 001 Device 015:ID 4971:ce23 SimpleTech
Sudo fdisk -l
は、truecryptで暗号化されたボリュームとしてパーティションを読み取ることができません。
どの物理デバイスがブロックデバイスにマップされているかを検出する方法はありますか?
どれがどれかがわかるまで、ファイルシステムをマウントできません。
私はこの問題に間違った方法でアプローチしましたか?
助言がありますか ?
物理デバイスは両方とも同じサイズですか?それらもまったく同じブランドですか?
サイズが異なる場合は、fdisk -l
は、ヘッダーにディスク全体のサイズとブロックデバイス名を表示する必要があります。これは役に立ちます。
dmesg
の出力を確認することもできます。 USBデバイスが接続されると、dmesg
は、USBデバイスをオンラインにするために実行するプロセスと、割り当てられたブロックデバイスを表示します。出力例は次のとおりです。
Aug 14 16:35:02 xen kernel: [2526561.710931] usb 5-5: new high speed USB device using ehci_hcd and address 4
Aug 14 16:35:02 xen kernel: [2526561.859909] usb 5-5: configuration #1 chosen from 1 choice
Aug 14 16:35:02 xen kernel: [2526562.138808] usbcore: registered new interface driver libusual
Aug 14 16:35:02 xen kernel: [2526562.162072] Initializing USB Mass Storage driver...
Aug 14 16:35:02 xen kernel: [2526562.163248] scsi4 : SCSI emulation for USB Mass Storage devices
Aug 14 16:35:02 xen kernel: [2526562.163452] usbcore: registered new interface driver usb-storage
Aug 14 16:35:02 xen kernel: [2526562.163455] USB Mass Storage support registered.
Aug 14 16:35:07 xen kernel: [2526567.161157] scsi 4:0:0:0: Direct-Access WDC WD50 00AAKS-00A7B0 PQ: 0 ANSI: 2 CCS
Aug 14 16:35:07 xen kernel: [2526567.171712] sd 4:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
Aug 14 16:35:07 xen kernel: [2526567.172736] sd 4:0:0:0: [sdb] Write Protect is off
Aug 14 16:35:07 xen kernel: [2526567.173733] sd 4:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB)
Aug 14 16:35:07 xen kernel: [2526567.174606] sd 4:0:0:0: [sdb] Write Protect is off
Aug 14 16:35:13 xen kernel: [2526567.174616] sdb: sdb1
Aug 14 16:35:13 xen kernel: [2526572.854493] sd 4:0:0:0: [sdb] Attached SCSI disk
Aug 14 16:35:13 xen kernel: [2526572.854544] sd 4:0:0:0: Attached scsi generic sg2 type 0
ご覧のとおり、カーネルは/ dev/sdbをUSBデバイスに割り当てました。お役に立てれば!
同じベンダーのデバイスが複数ある場合はどうすればよいのでしょうか:製品ID。
udevadm info -a /dev/sde
を実行してみました。これは、「親デバイスのチェーンをたどる」(それが何を意味するのか)。 「ATTRS {devnum}」と「ATTRS {busnum}」をバスXデバイスYの出力lsusb
と照合することで、udevadmリストがUSBハードのバス番号とデバイス番号を生成しただけでなく、ブロックデバイス/dev/sde
の「親」としてドライブするだけでなく、接続されているハブのバス番号とデバイス番号、およびホストコントローラー!これは、接続先のポートでデバイスを識別したい場合に役立ちます。
特定のブロックデバイスに対応するUSBデバイスを取得するのが非常に難しいように思われる理由について少し混乱しました。これにより、デバイスが同じではなく、2つの間に一種の親孝行関係があることが明らかになると思います。 。
Udevadmは各親のパスを提供するので、子パスをトリミングして正しい親を見つける方法がわかります。
$ udevadm info --path=$(udevadm info -q path /dev/sde | cut -d / -f 1-7)
P: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2.4
N: bus/usb/002/024
E: BUSNUM=002
E: DEVNAME=/dev/bus/usb/002/024
E: DEVNUM=024
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2.4
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MODEL=External_HDD
....
DEVNAMEをlsusbに渡すことができます。
$ lsusb -D $(udevadm info --path=$(udevadm info -q path /dev/sde
| cut -d / -f 1-7) | grep DEVNAME | cut -d = -f 2)
Device: ID 1058:0705 Western Digital Technologies, Inc. My Passport Elite (WDML)
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
...
したがって、これを使用して、たとえば、/ dev/sdeがUSB2.0デバイスとして接続されていることを知ることができます(上記のbcdUSBラインから)。
これがあなたの質問に答えるかどうかはわかりませんが、ブロックデバイスからUSBデバイスを識別する方法を提供します。また、コントローラーとデバイスの間にハブがない場合は、「カット」に別の引数を指定する必要があると思うため、完全ではありません。おそらく、デバイスパスの最初ではなく最後から数える必要がありますが、数値引数をdirname
に渡す方法が見つかりませんでした。
更新:これは、zshを使用してデバイスパスの最後からコンポーネントをトリミングするソリューションです。それが機能するかどうかをお知らせください。
$ cat usb-device-from-block-device
#!/bin/zsh
udevadm info --path ${${$(udevadm info -q path $1)}%/*/*/*/*/*/*} | grep DEVNAME | cut -d = -f 2
# Example:
$ usb-device-from-block-device /dev/sdc
/dev/bus/usb/001/017
$ lsusb -D $(usb-device-from-block-device /dev/sdc)
...
Sysfsにクエリを実行して、ドライブのベンダーとモデルを報告できます。
$ cat /sys/block/sdd/device/{vendor,model}
DSE
MicroDrive 1GB
$ cat /sys/block/sdc/device/{vendor,model}
JetFlash
Transcend 4GB
それ以上のことをしたい場合は、udevルールを追加して(Linuxディストリビューションにudevがあると仮定して)、さまざまなドライブをさまざまなデバイス名にマップしたり、ドライブモデルに基づいてさまざまなシンボリックリンクを提供したりできます。
EG、 ここ いくつかの例があります。
トランセンドスティックを挿入したときに実際に作成される実際のデバイスに、必要に応じてパーティション番号を追加して、/ dev/transcendシンボリックリンクを作成するために次のようなことを行うことができます。
KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}==\
"Transcend 4GB", SYMLINK+="transcend%n"
もちろん、同じモデルの複数のデバイスを入れると衝突が発生しますが、少しの作業でそれを回避できます
UUID中心の答えを見たことがないので、ここに1つあります。
そのデバイスにファイルシステムがある場合、そのファイルシステムにはUUIDがあります。このUUIDを使用すると、フラッシュドライブがシステム上にあるデバイスのメジャー/マイナーブロックデバイスに関係なく、ファイルシステムを確実にマウントできます。
lsblk -f
を使用すると、どのデバイスがどのUUID /ファイルシステムに接続されているかを簡単に表示できます。以下は私のシステムの例で、私の単一のNVMeドライブからの素敵な記述ツリーを示しています。この質問のフラッシュドライブは、おそらくはるかに単純な出力を提供します。
[dhay@GLaDOS ~]$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
nvme0n1
├─nvme0n1p1 vfat ESP F2F6-9BC7 /boot/efi
├─nvme0n1p2
├─nvme0n1p3 crypto_LUKS abde2123-0ee9-46b5-8d05-2b0b91b21054
│ └─syspvluks LVM2_member ZsBxHH-tvRz-xE3k-e2dJ-I0O0-Gv4e-Ckap71
│ ├─system-root xfs root a3acf72b-3309-408e-b6a4-0c3f28b86a53 /
│ └─system-swap swap swap 5006f803-af24-4179-a5fa-7c5720b383d2 [SWAP]
├─nvme0n1p4 ntfs WINRETOOLS A0B0BED5B0BEB0E0
├─nvme0n1p5 ntfs Image D6E6BF67E6BF4711
├─nvme0n1p6 ntfs DELLSUPPORT 00CED73ECED72AA4
└─nvme0n1p7 xfs boot b3e3a722-e37a-4c15-8d6c-4085c00b778a /boot
そのUUIDが手元にあれば、何を使用しているかに関係なく、UUIDを使用してファイルシステムを識別できます。これは、構成を更新せずに、あるデバイスから別のデバイスにファイルシステムを移行する場合にも最適です。以下は、ブロックデバイスの直接カーネル名ではなく、デバイスラベル、UUID、およびLVM永続名の組み合わせを使用している/ etc/fstabファイルの例です。
/dev/mapper/system-root / xfs defaults,discard 0 0
UUID=F2F6-9BC7 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/system-swap swap swap defaults 0 0
LABEL=boot /boot xfs defaults,discard 0 0
同様に、このmount
コマンドのデバイス引数としてUUIDを使用して、ルートファイルシステムをディレクトリにマウントできます。
[dhay@GLaDOS ~]$ mount UUID=a3acf72b-3309-408e-b6a4-0c3f28b86a53 /mnt/root
デバイスを接続したら、/ dev/diskにアクセスして、そこからシンボリックリンクが動的に作成されることを確認します。
[user@Host disk]$ pwd
/dev/disk
[user@Host disk]$ ll -R
.:
total 0
drwxr-xr-x 2 root root 80 Jul 30 09:54 by-id
drwxr-xr-x 2 root root 80 Jul 30 09:54 by-label
drwxr-xr-x 2 root root 160 Jul 30 09:54 by-path
drwxr-xr-x 2 root root 80 Jul 30 09:54 by-uuid
./by-id:
total 0
lrwxrwxrwx 1 root root 9 Jul 30 09:54 usb-WD_10EAVS_External_57442D574341553436313337373137 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 30 09:54 usb-WD_10EAVS_External_57442D574341553436313337373137-part1 -> ../../sdb1
./by-label:
total 0
lrwxrwxrwx 1 root root 10 Jul 30 09:54 backup -> ../../sdb1
lrwxrwxrwx 1 root root 10 Mar 3 18:51 boot -> ../../sda1
./by-path:
total 0
lrwxrwxrwx 1 root root 9 Jul 30 09:54 pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 30 09:54 pci-0000:00:1d.7-usb-0:6:1.0-scsi-0:0:0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Mar 3 18:51 pci-0000:00:1f.1-ide-0:0 -> ../../hda
lrwxrwxrwx 1 root root 9 Mar 3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Mar 3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 3 18:51 pci-0000:02:0e.0-scsi-0:2:0:0-part2 -> ../../sda2
./by-uuid:
total 0
lrwxrwxrwx 1 root root 10 Mar 3 18:51 72734cea-d59d-443b-8fdd-3e7a0e2c7731 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 30 09:54 efcb8d1e-3f46-4021-bc55-22a85846429b -> ../../sdb1
[user@Host disk]$
お役に立てれば。