Raspberry pi
automount USB using udev rules
Reference:
http://www.reactivated.net/writing_udev_rules.html
http://kolmogolovi.blogspot.de/2011/11/linux-udev-1.html
本來用上篇所用的方法,後來發現如果沒有umount的話,在接上usb就會變成在另一個載點
後來發現linux下可以自己寫dev發生的事件對應規則,所以現在只要插上或是拔除都會自動裝卸載,實在方便太多了!!!!!
下面是網路上文章對udev的介紹
Udev
是自
kernel
2.6 以降,取代傳統靜態(static)的
devfs,改以動態(dynamic)的方式來管理
/dev/
之下所有裝置的子系統。除此之外,它也取代了原先
hotplug
的功能,經常性地監看系統狀態,並於週邊元件發生異動,例如插入或拔除
USB
裝置、記憶卡、外接電源等設備時,尋找並載入合適的核心模組(kernel
module)、建立並命名
device
nodes、建立
links,或作出其它適當的反應。
hotplug
和 hwdetect
两个工具.
“udev是
Linux
内核的设备管理器。总的来说,它取代了
devfs
和
hotplug,负责管理
/dev
中的设备节点,。这意味着
udev
要管理/dev
目录以及用户空间中所有的硬件添加删除操作。”
与传统的顺序加载不同,udev 可以并行加载内核模块,具有潜在的性能优势。异步加载模块的方式也有一个天生的缺点:无法保证每次加载模块的顺序,如果机器具有多个块设备,那么它们的设备节点可能随机变化。例如如果有两个硬盘,
/dev/sda
可能会随机变成/dev/sdb
管理员编写的
udev
的规则保存在
/etc/udev/rules.d/
,其中的文件名要以.rules
结尾。各种软件包提供的规则文件位于 /lib/udev/rules.d/
。如果两个目录中有相同名称的文件,会使用 /etc
中的文件。
在/etc/udev/rules.d/下建立
sudo nano
11-media-by-label-auto-mount.rules
|
在裡面寫入下列規則
KERNEL!="sd[a-z][0-9]",
GOTO="media_by_label_auto_mount_end"
#
Import FS infos
IMPORT{program}="/sbin/blkid
-o udev -p %N"
#
Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="",
ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="",
ENV{dir_name}="usbhd-%k"
#
Global mount options
ACTION=="add",
ENV{mount_options}="relatime"
#
Filesystem-specific mount options
ACTION=="add",
ENV{ID_FS_TYPE}=="vfat|ntfs",
ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
#
Mount the device
ACTION=="add",
RUN+="/bin/mkdir -p
/media/%E{dir_name}",
RUN+="/bin/mount -o
$env{mount_options} /dev/%k /media/%E{dir_name}"
#
Clean up after removal
ACTION=="remove",
ENV{dir_name}!="",
RUN+="/bin/umount -l
/media/%E{dir_name}"
ACTION=="remove",
ENV{dir_name}!="",
RUN+="/bin/rmdir
/media/%E{dir_name}"
#
Exit
LABEL="media_by_label_auto_mount_end"
|
然後重新載入規則
udevadm
control --reload-rules
|
沒有留言:
張貼留言