银河系最(chui)强(niu)的OpenWrt自动挂载脚本,完美兼容中文,兼容USB/SATA设备,支持EXT2/3/4 FAT32 NTFS ex(转)

@Wen's  July 27, 2022

我有个Pogoplug,给它弄了2.5寸的盒子,用来做NAS感觉不错 。

现在系统是play4fun的openwrt 0525,这个版本系统还可以,刚好适合我这样懒得自己编译整合的队伍。但这个版本有一个问题是内置的挂载点功能不能自动挂NTFS格式,无论是用设备名、卷标还是UUID都不行,每次接USB硬盘都要手动挂载感觉十分不便。

为了一劳永逸,花了两天时间写了这个万能自动挂载脚本,与大家共享。现在插上任何可以识别的东西,都能自动挂载,然后就可以通过samba远程访问了,简直就是平板电脑的好伙伴。理论上这个脚本也兼容其他基于OpenWRT的系统(需要blkid和hotplug支持)

测试了几天,感觉这个自动挂载脚本比较完善成熟了,才放出来给大家分享。自认为超过网络上已有的类似方案,足以应付处女座

有图有真相,这是内置SATA硬盘然后自身USB口全插满,又用USB HUB接几个U盘后的壮观景象:






主要功能及特点如下:

  • 使用简单,将此脚本丢进 /etc/hotplug.d/block 目录中即可,默认参数已适用于绝大多数情况

  • 单文件,只依赖blkid工具和hotplug,不再依赖任何系统shell函数库及脚本

  • 和OpenWrt自带的挂载功能不冲突。脚本会在它之前执行

  • 只有几个配置项,不需要配置文件 (如有需要后期也可以加)

  • 支持SATA、USB等接口,只要是系统识别后是标准的Block设备,重启后也会自动挂载

  • 经测试完美支持 EXT2/EXT3/EXT4 XFS REISERFS MSDOS(FAT16) VFAT(FAT32) exFAT NTFS ISO9660/UDF(DVD-ROM) 等文件系统的自动挂载,支持中文文件名

  • 支持关闭自动挂载功能(设置 VOL_ENABLED=0)

  • 可设置是以读写还是只读方式挂载设备(全局设置)

  • 可设置是使用设备名还是用设备卷标(支持中文)来命名挂载点   Eg.  使用设备名: /mnt/sda1  使用设备卷标: /mnt/DataDisk

  • 如果使用卷标来命名挂载点,若接入的设备没有卷标,将使用 'volume_设备分区UUID' 来命名挂载点,如果该设备连分区UUID都没有(如一些读卡器),则会使用 'volume_随机的8位16进制字符串'

  • 如果使用卷标来命名挂载点,若新接入的设备的卷标和已挂载设备的卷标重名,新设备的挂载点名称将在原卷标后自动编号   Eg. /mnt/DataDisk_n (n=1,2,3...)

  • 可设置在挂载点名的前缀显示对应设备的文件系统类型(需设置使用卷标来命名挂载点)  Eg. /mnt/[ntfs]-DataDisk

  • 若设备为ISO9660/UDF文件系统则被视作光驱,挂载位置为固定的 /mnt/cdrom /mnt/cdrom_n (n=1,2,3...)

  • 支持自动挂载SWAP分区并可关闭(设置 SWAP_ENABLED=0)。目前的策略是如果接入包含SWAP分区的设备,若脚本执行时系统中还没有交换区就自动启用该设备的第一个交换区,其他的SWAP分区(含之后接入的设备上的SWAP分区)将会被忽略

  • 可设置排除列表,当列表中的设备接入时将被自动忽略。排除列表中可混合使用设备名、设备卷标和设备的UUID,程序会自动识别。Eg. EXCLUDE_LIST="sda1  DataDisk  f32b2ea6-4d42-43a5-bcec-7d818a163d07"

  • 可设置挂载点的根目录,默认为 /mnt

  • 在挂载及卸载设备后都将触发清理挂载点根目录的动作,目录中不再使用的挂载点将被删除,防止使用一段时间后目录内容变得杂乱无章

  • 支持插件机制,比如你可以写个插件:当插入某一特征(uuid,part id,disk label等)的磁盘后自动执行某一操作,比如自动备份SD卡里面的照片

  • 完善的日志信息。可在系统日志或用logread命令获取有关自动挂载功能的日志及调试信息

  • 所有的设置项都有详细说明及例子,详见代码中的注释。其实这篇说明都是不必要的,相当于把注释里面的英文又翻译了一遍




 30-block_mount.tar.gz (3.96 KB, 下载次数: 1460)


附件已更新为 12月1日 的 0.5.6 版

Changelog:

  • [0.5.6] 优化识别分区参数的逻辑,理论上运行更快,可以自动忽略扩展分区而不会出现错误信息

  • [0.5.5] 加入挂载或卸载所有可用设备命令参数:mountall  unmountall  已及清理挂载目录的命令参数purgemnt
    前两个可以望文生义,后面的 purgemnt 是用于清理/mnt下无效(挂载关系已不存在)的子目录所用的。使用方法:
    sh /etc/hotplug.d/block/30-block_mount  mountall|unmountall|purgemnt

  • [0.5.5] 继续优化屏幕信息输出和日志记录方案,现支持设置输出信息级别: VERBOSE=0|1|2|3 (见程序全局设置段)

  • [0.5.4] 优化NTFS和VFAT格式的挂载参数,使之更加规范,中文兼容性更好

  • [0.5.3] 解决极个别情况下可能会导致丢失文件的问题   囧rz...

  • 限制枚举已有同名挂载点(使用卷标方式时)最大次数为10次,避免因异常情况出现死循环

  • 优化日志记录方案



TO-DOs:

  • 加入配置文件,支持UCI设置

  • 过年有时间计划再弄个LuCI界面



程序可自定义的一些项目如下:


  1. #!/bin/sh

  2. #---------------------------------------------------------------------

  3. # Filename:    30-block_mount

  4. # Revision:    0.5.6

  5. # Data:        Dec. 1, 2014

  6. # Email:       [email protected]

  7. # Contacts:    QQ/TM 389191 or mail address above

  8. # Licensing:   General Public License v2

  9. # Description: Created for automatic mount block devices on OpenWRT

  10. # Usage:       Put this script into directory /etc/hotplug.d/block

  11. #---------------------------------------------------------------------

  12. ## Global settings of auto-mount script ##

  13. # Turn on|off auto-mount function for disk volumes

  14. VOL_ENABLED=1  # <0|1  0-Disable, 1-Enable>

  15. # Turn on|off auto-mount function for sawp partition  

  16. SWAP_ENABLED=1  # <0|1  0-Disable, 1-Enable>

  17. # Set which method you want to name the mounted volumes

  18. USE_VLABEL=1  # <0|1  0-Use device name, 1-Use volume label>  Eg. /mnt/sda1 | /mnt/DataDisk

  19. #

  20. # Note that if you choose name mount point by volume label but the volume's label is empty,

  21. # the volume will be named to 'volume_$PARTUUID', such as the /mnt/volume_31173116-01

  22. # Also, if exist more than one device which have the same volume label, it will be renamed

  23. # as the original name + sequence number, such as the /mnt/DataDisk_n (n=1,2,3..9)

  24. # Show filesystem type as the prefix of mount point, requires set USE_VLABEL=1

  25. FSTYPE_IN_VLABEL=1  # <0|1  0-Disable, 1-Enable>  Eg. /mnt/[ntfs]-DataDisk

  26. # Set access the mounted device with read-write or read-only permission

  27. FS_READONLY=0  # <0|1  0-Read Write, 1-Read Only>

  28. # Exclusion list of auto-mount function

  29. # Allows mixing the device name, volume label and UUID, each item must be separated by space(s)

  30. # Eg. EXCLUDE_LIST="sda1 DataDisk f32b2ea6-4d42-43a5-bcec-7d818a163d07"

  31. EXCLUDE_LIST=""  # Default: empty string

  32. # Specify a directory for mounts

  33. MOUNTS_PATH="/mnt"  # Default: /mnt , don't need include the trailing slash (/)

  34. # Turn on|off auto purge function for unused mount point in MOUNTS_PATH

  35. PURGE_MNTS=1  # <0|1  0-Disable, 1-Enable>

  36. # Define the add-ons scripts directory for automatic execute

  37. ADDSH_PATH="/etc/hotplug.d/user"  # Script naming rule: [0-9][0-9]-xxxxx, Eg. 20-backup-sdcard

  38. # Define the verbose level of console output (CLI) and logging

  39. VERBOSE=3 # <0|1|2|3  See details below>

  40. #       0 - Show errors only

  41. #       1 - Show errors and warnings

  42. #       2 - Show errors, warnings, and notices

  43. #       3 - Show errors, warnings, notices, and debug info

  44. ## End of global settings ##

  45. #


转自感谢:https://bbs.qzxx.com/thread-14441-1-1.htm



添加新评论