多次热插拔后,虚拟机能识别U盘,系统不能识别U盘

时间:2022-07-08 05:52:51
我在虚拟机是VM 7.1.4 build-385536,安装的系统是CentOS 6.2, 
Kernel 2.6.32-32-220 
GNOME 2.28.2。
从网上百度了一下,能自动挂载U盘了。
做法:注意是 root 权限
1. /etc/udev/rules.d 新建一个01-usb-rules (注意 前面数字越低,优先级越高;用的-, 不是下划线;后面的rules别写错)
2.文件里面添加一下内容,
KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usb%n", GROUP="users", OPTIONS="last_rule"
#ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"
#自动挂载U盘
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t vfat /dev/%k /mnt/usb%k"
#自动挂载SD卡
ACTION=="add", KERNEL=="mmcblk[0-9][a-z][0-9]", RUN+="/bin/mkdir -p /mnt/mmc%n"
ACTION=="add", KERNEL=="mmcblk[0-9][a-z][0-9]", RUN+="/bin/mount -t vfat /dev/%k /mnt/mmc%n"
#ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o 
rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /mnt/usb%k", OPTIONS="last_rule"
#ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/usb%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%k"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%k", OPTIONS="last_rule"

重启后,它会自动加载U盘到设备的路径,也会自动插拔!

问题
1.这样做好像不稳定,比如说系统突然掉电了,重启时发现有时自动挂载不了,有时用了它本身的规则挂载到media。有时得重新再插拔一次,它又能自动挂载了。这问题是什么引起的呢?

2.如果我自己不写规则,去哪个文件改它的规则呢?我只需要挂我指定目录就OK了,命名也是我自己定。

3.如何判断一个USB设备是储存设备,

4.如何判断USB接口是否有设备连接着,是否挂载?(后来两个问题百度的时候,一直找不到好的答案,一般说是访问那个/proc/scsi/usb-storage文件,但是它一直都存在,我的想法,是不是可以判断这个文件夹下文件的个数)。

原来的需求大概是,usb接口有储存设备,就挂载到某个路径,然后写数据。没有U盘之类的设备,就停止写,当检测到有就挂载,继续写数据。

麻烦各位大哥帮帮忙, 谢谢!!!

3 个解决方案

#1


寂寞吖~~~

#2


为什么我多次插拔U盘后,系统就无法识别U盘了呢???虚拟机能识别,但是linxu就无法识别,fdisk -l 没有任何U盘信息,dmesg:
Jul  3 10:45:16 localhost kernel: INFO: task khubd:23 blocked for more than 120 seconds.
Jul  3 10:45:16 localhost kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jul  3 10:45:16 localhost kernel: khubd         D 21ce0684     0    23      2 0x00000000
Jul  3 10:45:16 localhost kernel: f715c570 00000046 00000589 21ce0684 000000c8 c240811c f2dac05c 0126f9d6
Jul  3 10:45:16 localhost kernel: 00000000 f6703040 000000c8 00000000 000000c8 c0b0f0c0 c0b0f0c0 f715c818
Jul  3 10:45:16 localhost kernel: c0b0f0c0 c0b0aaa4 c0b0f0c0 f715c818 f2fba000 f715c570 c082e850 f65c1030
Jul  3 10:45:16 localhost kernel: Call Trace:
Jul  3 10:45:16 localhost kernel: [<c082e850>] ? schedule+0x3c0/0xaf0
Jul  3 10:45:16 localhost kernel: [<c082f555>] ? schedule_timeout+0x195/0x250
Jul  3 10:45:16 localhost kernel: [<c0450445>] ? enqueue_entity+0x155/0x490
Jul  3 10:45:16 localhost kernel: [<c043ba2c>] ? set_next_buddy+0x2c/0x40
Jul  3 10:45:16 localhost kernel: [<c04400c4>] ? check_preempt_wakeup+0x1d4/0x230
Jul  3 10:45:16 localhost kernel: [<c082f2b9>] ? wait_for_common+0xe9/0x150
Jul  3 10:45:16 localhost kernel: [<c044d4d0>] ? default_wake_function+0x0/0x10
Jul  3 10:45:16 localhost kernel: [<c0475ee7>] ? kthread_stop+0x37/0xa0
Jul  3 10:45:16 localhost kernel: [<f7e7ef92>] ? release_everything+0x22/0xc0 [usb_storage]
Jul  3 10:45:16 localhost kernel: [<c070c784>] ? usb_unbind_interface+0x44/0x130
Jul  3 10:45:16 localhost kernel: [<c06ba08d>] ? __device_release_driver+0x4d/0xb0
Jul  3 10:45:16 localhost kernel: [<c06ba19d>] ? device_release_driver+0x1d/0x30
Jul  3 10:45:16 localhost kernel: [<c06b925c>] ? bus_remove_device+0x7c/0xe0
Jul  3 10:45:16 localhost kernel: [<c06b70af>] ? device_remove_groups+0x1f/0x30
Jul  3 10:45:16 localhost kernel: [<c06b736f>] ? device_del+0xdf/0x160
Jul  3 10:45:16 localhost kernel: [<c0708dde>] ? usb_disable_device+0x8e/0x260
Jul  3 10:45:16 localhost kernel: [<c0709d8b>] ? usb_control_msg+0xeb/0x150
Jul  3 10:45:16 localhost kernel: [<c070101f>] ? usb_disconnect+0xcf/0x1e0
Jul  3 10:45:16 localhost kernel: [<c070244c>] ? hub_thread+0x5ac/0x1970
Jul  3 10:45:16 localhost kernel: [<c082e850>] ? schedule+0x3c0/0xaf0
Jul  3 10:45:16 localhost kernel: [<c0450445>] ? enqueue_entity+0x155/0x490
Jul  3 10:45:16 localhost kernel: [<c044d1ba>] ? try_to_wake_up+0x9a/0x3b0
Jul  3 10:45:16 localhost kernel: [<c04760e0>] ? autoremove_wake_function+0x0/0x40
Jul  3 10:45:16 localhost kernel: [<c0701ea0>] ? hub_thread+0x0/0x1970
Jul  3 10:45:16 localhost kernel: [<c0701ea0>] ? hub_thread+0x0/0x1970
Jul  3 10:45:16 localhost kernel: [<c0475ea4>] ? kthread+0x74/0x80
Jul  3 10:45:16 localhost kernel: [<c0475e30>] ? kthread+0x0/0x80
Jul  3 10:45:16 localhost kernel: [<c0409fff>] ? kernel_thread_helper+0x7/0x10

#3


貌似 linux 没发现有 usb 设备

#1


寂寞吖~~~

#2


为什么我多次插拔U盘后,系统就无法识别U盘了呢???虚拟机能识别,但是linxu就无法识别,fdisk -l 没有任何U盘信息,dmesg:
Jul  3 10:45:16 localhost kernel: INFO: task khubd:23 blocked for more than 120 seconds.
Jul  3 10:45:16 localhost kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jul  3 10:45:16 localhost kernel: khubd         D 21ce0684     0    23      2 0x00000000
Jul  3 10:45:16 localhost kernel: f715c570 00000046 00000589 21ce0684 000000c8 c240811c f2dac05c 0126f9d6
Jul  3 10:45:16 localhost kernel: 00000000 f6703040 000000c8 00000000 000000c8 c0b0f0c0 c0b0f0c0 f715c818
Jul  3 10:45:16 localhost kernel: c0b0f0c0 c0b0aaa4 c0b0f0c0 f715c818 f2fba000 f715c570 c082e850 f65c1030
Jul  3 10:45:16 localhost kernel: Call Trace:
Jul  3 10:45:16 localhost kernel: [<c082e850>] ? schedule+0x3c0/0xaf0
Jul  3 10:45:16 localhost kernel: [<c082f555>] ? schedule_timeout+0x195/0x250
Jul  3 10:45:16 localhost kernel: [<c0450445>] ? enqueue_entity+0x155/0x490
Jul  3 10:45:16 localhost kernel: [<c043ba2c>] ? set_next_buddy+0x2c/0x40
Jul  3 10:45:16 localhost kernel: [<c04400c4>] ? check_preempt_wakeup+0x1d4/0x230
Jul  3 10:45:16 localhost kernel: [<c082f2b9>] ? wait_for_common+0xe9/0x150
Jul  3 10:45:16 localhost kernel: [<c044d4d0>] ? default_wake_function+0x0/0x10
Jul  3 10:45:16 localhost kernel: [<c0475ee7>] ? kthread_stop+0x37/0xa0
Jul  3 10:45:16 localhost kernel: [<f7e7ef92>] ? release_everything+0x22/0xc0 [usb_storage]
Jul  3 10:45:16 localhost kernel: [<c070c784>] ? usb_unbind_interface+0x44/0x130
Jul  3 10:45:16 localhost kernel: [<c06ba08d>] ? __device_release_driver+0x4d/0xb0
Jul  3 10:45:16 localhost kernel: [<c06ba19d>] ? device_release_driver+0x1d/0x30
Jul  3 10:45:16 localhost kernel: [<c06b925c>] ? bus_remove_device+0x7c/0xe0
Jul  3 10:45:16 localhost kernel: [<c06b70af>] ? device_remove_groups+0x1f/0x30
Jul  3 10:45:16 localhost kernel: [<c06b736f>] ? device_del+0xdf/0x160
Jul  3 10:45:16 localhost kernel: [<c0708dde>] ? usb_disable_device+0x8e/0x260
Jul  3 10:45:16 localhost kernel: [<c0709d8b>] ? usb_control_msg+0xeb/0x150
Jul  3 10:45:16 localhost kernel: [<c070101f>] ? usb_disconnect+0xcf/0x1e0
Jul  3 10:45:16 localhost kernel: [<c070244c>] ? hub_thread+0x5ac/0x1970
Jul  3 10:45:16 localhost kernel: [<c082e850>] ? schedule+0x3c0/0xaf0
Jul  3 10:45:16 localhost kernel: [<c0450445>] ? enqueue_entity+0x155/0x490
Jul  3 10:45:16 localhost kernel: [<c044d1ba>] ? try_to_wake_up+0x9a/0x3b0
Jul  3 10:45:16 localhost kernel: [<c04760e0>] ? autoremove_wake_function+0x0/0x40
Jul  3 10:45:16 localhost kernel: [<c0701ea0>] ? hub_thread+0x0/0x1970
Jul  3 10:45:16 localhost kernel: [<c0701ea0>] ? hub_thread+0x0/0x1970
Jul  3 10:45:16 localhost kernel: [<c0475ea4>] ? kthread+0x74/0x80
Jul  3 10:45:16 localhost kernel: [<c0475e30>] ? kthread+0x0/0x80
Jul  3 10:45:16 localhost kernel: [<c0409fff>] ? kernel_thread_helper+0x7/0x10

#3


貌似 linux 没发现有 usb 设备