文件共享和传输的协议有很多种,但是hoowa为了让大家使用最常用的,hoowa选择了介绍Windows文件共享服务器和FTP文件传输服务器的实现方法。Windows文件共享服务器更适合局域网内部进行文件共享管理,简单方便容易。FTP文件服务器适合局域网及公网远程文件共享服务。
还记得我们之前讲解过如何加载外部存储器吗? 那么,如果你使用的是32G的TF卡又或者使用的是另外一块外置硬盘,也是可以顺利完成整个操作的。毕竟如果数据比较多使用一个外置硬盘是更适合的选择。
另外,各位也可以上网选购那些大容量存储设备,比如USB接口的磁盘阵列,实现中小企业的大容量存储。很划算的!
本节非必学,可以跳过!!!
只有需要加载第二块或更多的外置磁盘时才需要阅读本节。
在这里hoowa是使用他的U盘做演示的,如果你的/overlay挂载的外部存储器容量不够,就参考本节。这里hoowa采用EXT4文件系统(也可选择速度更快的EXT3文件系统,不过稳定性EXT4高一些)。
但是本文全部文章都不推荐选择NTFS文件系统,不是别的原因主要是因为没有经过优化在OpenWRT中性能很低且CPU占用高。而大文件操作FAT32又不支持,所以就EXT系列了。
root@SmartRouter:/# fdisk -l
这个/dev/sdc1的容量是4G正好是hoowa的那个U盘。记住之前章节讲的看你自己的设备符号是什么,不能直接抄啊。
以前都学过,这里就不废话了。如果记不住,翻翻"扩充RAM和FLASH"再学习下。
开始分区
进入Command模式:Command (m for help)
p:查看当前磁盘状况
d:删除分区
n:新建分区
w:提交分区修改
开始格式化
在这里因为我们已经使用了FLASH可写分区挂载了第一块外置磁盘,为了简化操作流程难度。我们就直接修改当前系统下的/etc/config/fstab即可。
取得外置磁盘的UUID编号(当前hoowa的是/dev/sdb1分区):
因为我们的盘是/dev/sdc1,所以UUID就是"61f4d556-c4c2-4603-bd72-7174a6782787"了。
修改当前系统下的fstab配置,使用VI或UCI修改fstab配置文件(以下UCI举例):
root@SmartRouter:/# uci add fstab mount
cfg084d78
上面这个cfg044d78是hoowa这台机器在创建mount时候产生的唯一值,因为mount是属于匿名段(还记得之前章节里介绍过UCI部分的匿名段吗)。
也就是说后续的增加参数操作使用这个cfg084d78代表当前mount操作就行,请注意啊各位,这个cfg开头的名字在每台机器上都不一样各位不要直接抄这部分的指令啊,要变通修改为自己的。
UUID填写刚才blkid取到的那个UUID,其他参数参考了"扩充RAM和FLASH"那章的写法:
root@SmartRouter:/# uci set fstab.cfg084d78.uuid=62d9ed48-02b2-47ea-a4f5-8e1adfc18b1e
root@SmartRouter:/# uci set fstab.cfg084d78.target=/mnt/extdisk
root@SmartRouter:/# uci set fstab.cfg084d78.fstype=ext4
root@SmartRouter:/# uci set fstab.cfg084d78.options=rw,sync
root@SmartRouter:/# uci set fstab.cfg084d78.enable=1
root@SmartRouter:/# uci set fstab.cfg084d78.enabled_fsck=0
root@SmartRouter:/# uci commit fstab
创建挂载点的文件夹:
root@SmartRouter:/# mkdir -p /mnt/extdisk
查看是否成功:
重新启动,确认挂载成功(重启后因为磁盘比较多所以挂载时间稍长):
root@SmartRouter:/# reboot
……
大家有看到吗?这里的挂载extdisk已经成功了,但是磁盘符号变成/dev/sdb2了.但是有UUID,所以没关系。
这就是因为内核启动的顺序发生变化。但是由于我们采用了uuid的挂载方法,所以设备符号不论怎么变化都能找到你要的那个磁盘和分区。
如果你一个硬盘就够了,那么就按照本节操作下,创建一个/mnt/extdisk文件夹即可。
创建必要的文件夹:
root@SmartRouter:/# mkdir -p /mnt/extdisk
最好给文件夹设置权限为777,保证任何进程都具备写能力:
root@SmartRouter:/# chmod 777 /mnt/extdisk/
root@SmartRouter:/home# opkg update
root@SmartRouter:/home# opkg install samba36-server
/etc/config/samba配置结构:
#samba主配置
config 'samba'
......
#samba文件共享配置
config 'sambashare'
......
/etc/config/samba的config 'samba'段 可选参数:
键 值 必须设置 说明
charset 字符串 否 文件名编码类型,可选参数: UTF-8, cp936
name 字符串 是 服务器的名称,随意填写英文字符
workgroup 字符串 是 工作组,默认应为: WORKGROUP
description 字符串 否 该服务器的描述信息,随意填写英文字符
homes 数值 是 是否共享用户文件夹,默认为0,可选参数: 0 否, 1 是
/etc/config/samba的config 'sambashare'段 可选参数:
键 值 必须设置 说明
name 字符串 是 共享的名称
path 字符串 是 共享的文件路径
users 字符串 否 如果包含这个参数将允许特定访客访问,比如: 'hoowa,jimmy'
read_only 字符串 是 是否只读共享,可选参数: yes/no
guest_ok 字符串 否 指定是否支持访客模式
create_mask 数值 否 设置被创建文件的权限, 默认为: 0744
dir_mask 数值 否 设置被创建的文件夹的权限,默认为: 0755
简单设置windows共享模式的配置举例(使用VI或UCI编辑):
如果要开机每次都启动需要如下设置:
root@SmartRouter:/etc/config# /etc/init.d/samba enable
如果要当前马上打开samba支持:
root@SmartRouter:/etc/config# /etc/init.d/samba start
你的电脑一定要直接连接你的开发板,通过WiFi或通过LAN连接,因为Windows文件共享在Wan口上是被防火墙封闭的,这也是为了安全性考虑。
开始--->运行--->输入智能路由的文件共享访问地址"\\192.168.1.1\shares\"
点击确认后将弹出文件夹
这个时候你可以像操作本地硬盘一样对这个网络磁盘进行文件操作。
如果查看你的网上邻居你会发现(如下图):
可能有的朋友问了,那怎么实现复杂的根据帐号管理啊?哎呀,兄弟们那太复杂了,在家里用,在小公司用弄那么多帐号麻烦不麻烦。
如果大家真的想设置,我也不拦着,大家可以查看标准linux的samba配置。
这里hoowa跟大家讲下openwrt特别的地方,在openwrt下samba的配置是:
/etc/config/samba
/etc/samba/smb.conf.template
而服务启动时候的配置是/var/etc/smb.conf 这个文件是通过以上两个文件在服务启动时动态生成的。因此,修改上面任何一个文件的修改都要通过重启服务生效:
root@SmartRouter:/# /etc/init.d/samba restart
如果需要设置帐号和密码可以使用smbpasswd -a 增加用户,使用smbpasswd -x 删除用户。
关于带账户的部分就讲这么多了,也算给大家一个例题,看看你能不能搞定咯。
有时候,可能你需要远程共享服务,因此使用ftp是最简易的方式。并且它也支持本地和网络。在这里我们使用Pure-FTPD,它是一个快速、高效、轻便、安全的FTP服务器,非常适合在OpenWRT下使用。
root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install pure-ftpd
/etc/config/pure-ftpd配置结构:
config pure-ftpd
......
/etc/config/pure-ftpd的config 'pure-ftpd'段 可选参数:
键 值 必须设置 说明
port 数值 是 FTP服务器的端口,默认为21,值范围在: 10-65535
noanonymous 数值 是 禁止匿名访问,可选参数:0 不禁止, 1禁止
chrooteveryone 数值 否 是否允许FTP使用者访问整个服务器,可选参数:0 不允许, 1允许
maxclientsperip 数值 否 同一IP最大允许客户端数量,默认为: 10
maxclientsnumber 数值 否 最大允许客户端数量,默认为: 4
peruserlimits 字符串 否 单一用户最大量限制,格式为: "单一用户:单一匿名用户",默认为: 3:4
umask 字符串 否 设置创建文件和文件夹的权限,格式为: "文件:文件夹",默认为: 133:022,如果填写 000:000 表示完整权限
authentication 字符串 是 有效账户验证类型,设置为puredb:/etc/pureftpd.pdb 表示采用独立账户验证
enabled 字符串 是 是否启动pure-ftpd,可选参数:0 不启动, 1 启动
fortunesfile 字符串 否 欢迎词文件,默认可以不填
dontresolve 数值 否 不进行解析处理,可以提高速度,可选参数: 0 不禁止, 1禁止
passiveportrange 字符串 否 被动模式的端口范围,格式为: "开始:结束",数据范围为: 10-65535
开启Pure-ftpd服务并且关闭匿名访问,同时限制用户离开自己的主目录:
在上一步我们制定了验证用的账户文件为/etc/pureftpd.pdb,这个文件是由pure-pw指令生成的。可以通过该程序产生ftp账户,并且对应到一个系统账户上。
增加FTP新账户: pure-pw useradd [账户名称] -u [对应系统账户] -d [FTP服务器文件路径]
删除FTP账户: pure-pw userdel [账户名称]
修改FTP账户密码: pure-pw passwd [账户名称]
列表全部FTP账户: pure-pw list
生效数据: pure-pw mkdb
在这里创建一个账户hoowa 并且设置系统账户为nobody这样跟Samba就一致了,同时设置路径为/mnt/extdisk。创建过程中要输入两次该账户的密码:
root@SmartRouter:/etc# pure-pw useradd hoowa -u nobody -d /mnt/extdisk/
Password:
Enter it again:
生效数据:
root@SmartRouter:/etc# pure-pw mkdb
如果要开机每次都启动需要如下设置:
root@SmartRouter:/etc/config# /etc/init.d/pure-ftpd enable
如果要当前马上启动pure-ftpd服务:
root@SmartRouter:/etc/config# /etc/init.d/pure-ftpd start
如果修改了配置文件,所有FTP客户端都要重新连接所做修改才生效
如果你不需要外网访问FTP可以跳过这一节。
默认情况在防火墙中下WAN口是不能对外开放FTP服务的。如果要允许WAN口直接访问系统的FTP服务,需要设置路由规则。
在以上配置中FTP我们使用了21号端口,另外被动模式(目前使用最广泛的FTP传输模式)使用了50000到51000范围的端口,因此我们都要在防火墙规则上允许WAN口的访问进入。
通过UCI设置新的路由规则:
root@SmartRouter:/# uci add firewall rule
cfg1992bd
记录下来cfg1992bd那个值他代表当前的rule,请注意啊各位,这个cfg开头的名字在每台机器上都不一样各位不要直接抄这部分的指令啊,要变通修改为自己的啊:
root@SmartRouter:/# uci set firewall.cfg1992bd.name='wan-ftp'
root@SmartRouter:/# uci set firewall.cfg1992bd.src='wan'
root@SmartRouter:/# uci set firewall.cfg1992bd.dest_port='21 50000-51000'
root@SmartRouter:/# uci set firewall.cfg1992bd.target='ACCEPT'
root@SmartRouter:/# uci set firewall.cfg1992bd.proto='tcp'
root@SmartRouter:/# uci commit firewall
重新读取防火墙配置:
root@SmartRouter:/# /etc/init.d/firewall reload
WinSCP是一个强大的客户端软件,他支持SFTP,FTP,SCP三种模式,这里我们就使用他的FTP功能进行测试连接。
在你的电脑上打开WinSCP软件,点击新建。
输入主机名,用户名,密码,文件协议选择FTP。点击登入既可登入系统。主机名如果是wifi或lan连接到开发板上,那么一般填写开发板的lan ip就行,如果你在之前的章节没有修改过lan ip他就应该是192.168.1.1。
如不出意外现在你可以通过FTP上载和下载文件,并且可以跟samba一起工作了。如果公司或则家庭内部就直接用samba,如果是手机,或是远程连接就使用ftp就可以了。
在文章最后,我们简单的回顾一下我们使用过的磁盘相关指令。
系统支持的格式化文件系统类型指令:
root@SmartRouter:/# mkfs.ext2 格式化EXT2文件系统
root@SmartRouter:/# mkfs.ext3 格式化EXT3文件系统
root@SmartRouter:/# mkfs.ext4 格式化EXT4文件系统
查看外置USB设备指令:
root@SmartRouter:/# lsusb
查看当前已经加载磁盘的情况:
root@SmartRouter:/# df
查看当前加载了什么东西:
root@SmartRouter:/# mount
查看当前系统的所有存储设备分区情况:
root@SmartRouter:/# fdisk -l
最后,大家现在可以开始提问,在雷锋网(公众号:雷锋网)文章评论、公众号「宅客」:letshome、QQ群:196302618、邮箱:DIYRouter#163.com都可以提交,问题我将会在下章的时候统一解答。需要提醒下,我并不是高手,我回答问题有三个原则:1、我会的我直接回答 2、我不太会的我看着回答 3、我不会的我瞎忽悠 所以我给的答案是否正确需要大家自行判断。