OpenWrt搭建文件共享服务(NAS)

1. 硬盘挂载

1.1 安装USB、fs的内核模块

opkg update
opkg install kmod-usb-core kmod-usb-storage kmod-usb-ohci kmod-fs-ext2 kmod-fs-ext3 kmod-fs-vfat kmod-fuse ntfs-3g

1.2 配置自动挂载

  • 安装mount工具
    opkg install mount-utils

  • 编辑配置文件
    vi /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=0000,dmask=0000,fmask=
                else
                        mount /dev/$device /mnt/$device
                fi

                if [ -f /dev/${device}/swapfile ]; then
                    # make swap space
                    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
  • 修改可执行权限
    chmod 777 /etc/hotplug.d/block/10-mount

2. 硬盘自动休眠

2.1. 安装hdparm

opkg update
opkg install hdparm

2.2. hdparm测试:

hdparm -S 60 /dev/sda    (放到开机启动项就可以每次开机都生效!)
hdparm -y /dev/sda           (这个命令是立即休眠,测试硬盘是否休眠成功。)

说明:hdparm -S 60 /dev/sda 设置超时值(5分钟)使硬盘进入休眠模式(省电模式)(这个 S数值/12=分钟); /dev/sda 为挂载的硬盘路径,ls /dev/sda查看你的盘符。执行完hdparm -S 60 /dev/sda 这个命令时你的路由已经设置为5分钟休眠了。(注:5分钟硬盘无操作时省电模式,休眠时接到读写命令会自动唤醒进入工作模式)

附:** Linux hdparm 命令**
显示与设定硬盘的参数,语法:hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c ][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p ][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]
  补充说明:hdparm可检测,显示与设定IDE或SCSI硬盘的参数。
  测试各硬盘读取速度判断硬盘故障
  在服务端命令窗口中执行如下命令
  hdparm -t /dev/hda (IDE硬盘)
  hdparm -t /dev/sda (SATA、SCSI、硬RAID卡阵列)
  hdparm -t /dev/md0 (软RAID设备)
  测试结果在空载情况下应 >40M/s ,在负载情况下平均应 > 20M/s 为正常,如测试结果极低则需要进一步使用硬盘专用检测工具测试是否为硬盘故障。
  参数:

  -a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
  -A<0或1> 启动或关闭读取文件时的快取功能。
  -c 设定IDE32位I/O模式。
  -C 检测IDE硬盘的电源管理模式。
  -d<0或1> 设定磁盘的DMA模式。
  -f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
  -g 显示硬盘的磁轨,磁头,磁区等参数。
  -h 显示帮助。
  -i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
  -I 直接读取硬盘所提供的硬件规格信息。
  -k<0或1> 重设硬盘时,保留-dmu参数的设定。
  -K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
  -m<磁区数> 设定硬盘多重分区存取的分区数。
  -n<0或1> 忽略硬盘写入时所发生的错误。
  -p 设定硬盘的PIO模式。
  -P<磁区数> 设定硬盘内部快取的分区数。
  -q 在执行后续的参数时,不在屏幕上显示任何信息。
  -r<0或1> 设定硬盘的读写模式。
  -S<时间> 设定硬盘进入省电模式前的等待时间。
  -t 评估硬盘的读取效率。
  -T 平谷硬盘快取的读取效率。
  -u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
  -v 显示硬盘的相关设定。
  -W<0或1> 设定硬盘的写入快取。
  -X<传输模式> 设定硬盘的传输模式。
  -y 使IDE硬盘进入省电模式。
  -Y 使IDE硬盘进入睡眠模式。
  -Z 关闭某些Seagate硬盘的自动省电功能。

3. 安装文件共享服务(samba)

关于samba:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。而SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

3.1. 安装Samba服务

执行如下命令:

opkg update
opkg install samba36-server

注:上面的 samba36-server 是本文发布时的Samba服务软件包名称,其中数字36表示3.6.X版本,以后Samba版本更新的话可能找不到这个软件包,这个时候执行 opkg list | grep samba 搜一下就好。

3.2. 配置samba

3.2.1 挂载点配置

方式一:luci控制台


Paste_Image.png

方式二:修改配置文件
配置文件路径为 /etc/samba/smb.conf ,将 [global] 中的 invalid users = root 注掉,修改后文件内容如下:

[global]
netbios name = |NAME|
display charset = |CHARSET|
interfaces = |INTERFACES|
server string = |DESCRIPTION|
unix charset = |CHARSET|
workgroup = |WORKGROUP|
browseable = yes
deadtime = 30
domain master = yes
encrypt passwords = true
enable core files = no
guest account = nobody
guest ok = yes
\# invalid users = root
local master = yes
load printers = no
map to guest = Bad User
max protocol = SMB2
min receivefile size = 16384
null passwords = yes
obey pam restrictions = yes
os level = 20
passdb backend = smbpasswd
preferred master = yes
printable = no
security = user
smb encrypt = disabled
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY IPTOS_LOWDELAY
syslog = 2
use sendfile = yes
writeable = yes
3.2.2 配置共享目录

方式一:luci控制台


Paste_Image.png

方式二:修改配置文件/etc/samba/smb.conf
例如要添加一个名称为 airport 的共享,共享路径为 /mnt/usb,允许root用户读写操作,在 /etc/samba/smb.conf 配置文件中增加如下信息:

[airport]
        path = /mnt/usb
        valid users = root
        read only = no
        guest ok = yes
        create mask = 0777
        directory mask = 0777
3.2.3 配置共享密码

Samba的共享用户密码是单独配置的,执行下面的命令将root添加为共享用户,同时按照命令提示设置共享密码。

smbpasswd -a root

3.3. 启动samba

配置完成后,启动Samba服务即可。
/etc/init.d/samba start
samba操作命令介绍

* start Start the service
* stop  Stop the service
* restart   Restart the service
* reload    Reload configuration files (or restart if that fails)
* enable    Enable service autostart
* disable   Disable service autostart

4 使用

  • Mac
    打开finder找到如下:
    Paste_Image.png

如果没找到,则cmd+k


Paste_Image.png
  • Android
    ES文件管理器:局域网-扫描
    图片发自简书App

    魅族内置文件浏览器:网上邻居
    S70418-235633(1).jpg

    S70418-235650.jpg

推荐阅读更多精彩内容