Mou*_*inX 5 automounting usb-drive removable-storage
在我的问题Bash 脚本输出到 USB 闪存棒的路径中,我遇到了一个似乎没有其他人遇到的问题。(这个问题也阻碍了我使用这个答案的愿望。)
所以我把那个具体问题变成了这个新问题。
显然/sys/block
以 1 结尾的可移动设备。这里和本站点的其他几个地方都说明了这一点,我在上面引用的答案中使用了这一原则。
我的可移动设备 Sandisk 64GB 闪存棒被列为:
/sys/block/sdl/removable:0
Run Code Online (Sandbox Code Playgroud)
显然,可移动设备应该以 1 结尾(我的其他人也是如此)。为什么我的 U 盘不符合规则?
它是由 Dolphin 自动安装的。我正在运行 Kubuntu 12.04。
Dolphin 将其显示为“59.6GiB 可移动媒体”。
它安装(自动)在 /media/me/70E8-1567
sudo blkid
显示为:
/dev/sdl1: UUID="70E8-1567" TYPE="vfat".
Run Code Online (Sandbox Code Playgroud)
lsblk -do name,rm
显示:
sdl 0
Run Code Online (Sandbox Code Playgroud)
并lsusb -vv
显示:
Bus 001 Device 008: ID 0781:5530 SanDisk Corp. Cruzer
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0781 SanDisk Corp.
idProduct 0x5530 Cruzer
bcdDevice 2.01
iManufacturer 1
iProduct 2
iSerial 3
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Run Code Online (Sandbox Code Playgroud)
重写于 2022 年 1 月 5 日:
USBKEYS=()
while read _{,,,,,,} dev _ rdev;do
[[ $rdev == */usb[0-9]* ]] &&
grep -q '^DRIVER=sd$' /sys/block/$dev/device/uevent &&
(( $(</sys/block/$dev/size) )) &&
(( $(</sys/block/$dev/removable) )) &&
USBKEYS+=($dev)
done < <(/bin/ls --color=never -g /sys/block)
Run Code Online (Sandbox Code Playgroud)
在这个我
确保这是USB
确保设备可拆卸
确保它作为硬盘驱动器(而不是 CD-Rom)工作
确保它们的大小大于 0(不是空的读卡器)
我的实时安装程序中有usbKeyChooser子例程的最终版本:
#!/bin/bash
DIALOG=whiptail
usbKeyChoose() {
while [ ! -b /dev/$STICK ] ;do
USBKEYS=()
while read _{,,,,,,} dev _ rdev;do
[[ $rdev == */usb[0-9]* ]] &&
grep -q '^DRIVER=sd$' /sys/block/$dev/device/uevent &&
(( $(</sys/block/$dev/size) )) &&
(( $(</sys/block/$dev/removable) )) &&
USBKEYS+=($dev)
done < <(/bin/ls --color=never -g /sys/block)
(( ${#USBKEYS[@]} )) &&
title="Choose wich USB stick have to be installed" ||
title="No key found"
menu=(R "Re scan devices")
for dev in ${USBKEYS[@]} ;do
read model </sys/block/$dev/device/model
menu+=($dev "$model")
done
ans=$($DIALOG --menu "$title" 21 72 14 "${menu[@]}" 2>&1 >/dev/tty)
if [ ! "$ans" ]; then echo "User aborted."; return 1; fi
[[ $ans == R ]] || STICK=$ans
done
}
usbKeyChoose
[[ $0 == "$BASH_SOURCE" ]] && [[ $STICK ]] && echo $STICK
true
Run Code Online (Sandbox Code Playgroud)
我喜欢这个循环解决方案,因为它们
无论如何,即使用户做了错误的ok
选择,下一个屏幕也是另一个选择,询问用户必须在默认创建新图像的键上写入哪个图像,这是一个非常漫长的过程,用户可以点击+Ctrlc
归档时间: |
|
查看次数: |
3140 次 |
最近记录: |