我用树莓派(debian)做了一个NAS,需要开机自动挂载u盘(如果有)。
按照网上的教程,我先是修改/etc/fstab文件,这样是实现了自动挂载,但我发现,一旦这个u盘没插,系统就不能启动,我认为是fstab文件中的挂载是启动的必要条件,如果挂载失败,将导致系统不能启动。不知道这样理解对不对,或者这不应该发生?
后来为了解决这个问题,并且实现热插拔,我开始修改/dev/rules.d中的rules文件,我根据网上的教程做(代码在下面),却屡试屡败。
有一些教程说要在rules文件里调用脚本(.sh),通过这个脚本挂载,但我在udev的教程里看到大多说直接通过rules文件中的指令就可以实现挂载。
求帮助
KERNEL!="sd[b-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}="usb-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
# 如果是vfat 或者ntfs 系统,则设置mount_options 的选项如下
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=000"
# Mount the device
# 如果文件系统不是ntfs ,意味着是vfat
# 同时挂载到/media/sd[b-z][0-9] 的形式
ACTION=="add",ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -o $env{mount_options},rw /dev/%k /mnt/usb-%k"
#ntfs
# 如果文件系统是ntfs ,以ntfs-3g 的形式挂载,实现可读写
# 同时挂载到/media/sd[b-z][0-9] 的形式
ACTION=="add",ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mkdir -p /mnt/usb-%k", RUN+="/bin/mount -t ntfs-3g -o $env{mount_options},rw /dev/%k /mnt/usb-%k"
# Clean up after removal
#
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /mnt/usb-%k", RUN+="/bin/rmdir /mnt/usb-%k" , RUN+="/bin/rm /mnt/usb-%k"
# Exit
LABEL="media_by_label_auto_mount_end"