2015年2月6日 星期五

Raspberry pi automount USB using udev rules

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,或作出其它適當的反應。

udev 代替了hotplug 和 hwdetect两个工具.
udevLinux 内核的设备管理器。总的来说,它取代了 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


沒有留言:

張貼留言