OpenWrt 挂载 USB 存储

添加“基本USB支持”
opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4
添加“扩展USB支持”,FAT、Ext3 及 NTFS 文件系统支持
opkg install kmod-fs-vfat kmod-fs-ext3 ntfs-3g kmod-nls-cp437 kmod-nls-iso8859-1 kmod-nls-utf8
添加“扩展工具”,挂载卸载工具及lsusb命令
opkg install fdisk usbutils
编辑自动挂载脚本 /etc/hotplug.d/block/10-mount
#!/bin/sh

# Copyright (C) 2009 OpenWrt.org  (C) 2010 OpenWrt.org.cn

blkdev='dirname $DEVPATH'
if [ 'basename $blkdev' != "block" ]; then

    device='basename $DEVPATH'
    case "$ACTION" in
        add)
                mkdir -p /mnt/$device
                # vfat & ntfs-3g check
                if  [ 'which fdisk' ]; then
                        isntfs='fdisk -l | grep $device | grep NTFS'
                        isvfat='fdisk -l | grep $device | grep FAT'
                        isfuse='lsmod | grep fuse'
                        isntfs3g='which ntfs-3g'
                else
                        isntfs=""
                        isvfat=""
                fi

                # mount with ntfs-3g if possible, else with default mount
                if [ "$isntfs" -a "$isfuse" -a "$isntfs3g" ]; then
                        ntfs-3g -o nls=utf8 /dev/$device /mnt/$device
                elif [ "$isvfat" ]; then
                        mount -t vfat -o iocharset=utf8,rw,sync,umask=000,dmask=000,fmask=000 /dev/$device /mnt/$device
                else
                        mount /dev/$device /mnt/$device
                fi
  if [ -f /dev/${device}/swapfile ]; then
   mkswap /dev/${device}/swapfile
   swapon /dev/${device}/swapfile
  fi
                ;;
        remove)
  if [ -f /dev/${device}/swapfile ]; then
   swapoff /dev/${device}/swapfile
  fi
                umount /dev/$device
                ;;
    esac

fi
添加运行权限
chmod 777 /etc/hotplug.d/block/10-mount

这样就完成了自动挂载
插入USB硬盘后就会自动挂载

手工挂载分区(将sda1修改为实际的设备)
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
手工挂载FAT分区(将sda1修改为实际的设备)
mkdir /mnt/sda1
mount -t vfat -o iocharset=utf8,rw,sync,umask=000,dmask=000,fmask=000 /dev/sda1 /mnt/sda1
手工挂载NTFS分区(将sda1修改为实际的设备)
mkdir /mnt/sda1
ntfs-3g -o nls=utf8 /dev/sda1 /mnt/sda1
卸载分区(将sda1修改为实际的挂载点)
unmount /mnt/sda1

进阶操作

解决USB共享时匿名用户只读问题

将USB存储通过SAMBA或FTP共享时,通过上述“手工挂载”一节所说的命令挂载后,即使分配匿名用户权限,也不可写。原因是由于vfat和ntfs格式的磁盘分区是不能通过chmod来更改用户权限的,为了使SMB和FTP匿名用户有写入的权限,使用mount命令挂载时需要加umask=000的参数(即参考“手工挂载FAT分区”一节的做法)。或者修改fstab中的config mount选项(mount相关知识):

config mount
option target /mnt/USB_Storage
option device /dev/sda1
option fstype auto
option options umask=000
option enabled 1
option enabled_fsck 0

这样,SMB的匿名用户就有写入的权限了。

挂载Swap分区
# 在/mnt/sda1/下创建一个64M的交换文件
dd if=/dev/zero of=/mnt/sda1/swapfile bs=1024 count=62142
# 将这个交换文件用作Swap分区
mkswap /mnt/sda1/swapfile
# 启用活动分区
swapon /mnt/sda1/swapfile
# 停止
swapoff /mnt/sda1/swapfile
openwrt 格盘
opkg update
opkg install e2fsprogs #安装格盘软件
mkfs.ext4 /dev/sda1 #格etx4
mkfs.ext3 /dev/sda1 #格etx3
mkfs.ext2 /dev/sda1 #格etx2
挂载windows共享文件 cifs
opkg install kmod-nls-utf8
opkg install kmod-fs-cifs
mkdir /mnt/share
mount -t cifs //192.168.1.2/tool /mnt/share -o username=administrator,password=123456,,nounix,noserverino,iocharset=utf8

mount相关知识

解决文件系统中中文无法正确显示问题

添加 iocharset=utf8 参数

为什么使用 umask = 000

umount 挂载的分区默认是没有写权限的,必须有root权限才能写。此时可以用参数 umask 来指定挂载windows分区后文件系统的默认权限(事实上,是默认没有的权限,即umask参数指出的值挂载后的文件将不具有),因为Windows分区里面的文件是没有权限这个概念的,所以要手动指定默认权限,于是,指定umask为000,就是不排除任何,即具有所有权限。

为什么需要 fmask, dmask

本例的使用场景中,只需 umask 这个全局权限就可以了,但在 Linux 桌面系统下,umask=000 使得文本文件也具有可执行权限,在文件管理器里面双击也要选择是查看还是执行,很不方便,就会有屏蔽掉文件可执行权限的需要。但如果简单设置为 umask=111,问题又来了,对于目录来说,可执行权限又有另外的意义,没有该权限根本无法进入该目录(但是可以读,即列出目录下的文件列表,也可以写,即可以在该目录下增加和删除文件,和重命名文件。于是就使用fmask和dmask参数,他们分别是对应文件和目录的 mask,于是,将目录设为可执行,文件不可执行(dmask=022,fmask=133),意思是,对目录:所有用户可执行(进入),其他人可读可执行(进入),只有自己可写(修改、添加、删除里面的文件(名));对文件:所有用户可读,自己可写,其他人不可写。

但本例中并不存在上述问题,dmask=000,fmask=000 即可。

mask 参数列表
参数(八进制) 被禁止的权限
0 允许所有权限
1 禁止执行权限
2 禁止写入权限
3 禁止写入权限和执行权限
4 禁止读取权限
5 禁止读取权限和执行权限
6 禁止读取权限和写入权限
7 禁止所有权限
参考链接

http://wiki.openwrt.org/zh-cn/doc/howto/usb.storage

http://blog.csdn.net/gubenpeiyuan/article/details/8330660

http://www.right.com.cn/forum/thread-54211-1-1.html

http://blog.sina.com.cn/s/blog_66a6a5ec01013z51.html

http://forum.ubuntu.org.cn/viewtopic.php?t=6015

https://en.wikipedia.org/wiki/Umask

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注