这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

网络共享

介绍在 OpenWRT 下进行网络共享

1 - 设置OpenWRT的nfs共享

通过 nfs 进行网络共享

准备工作

准备用 openwrt 这台机器兼职做下载和 nas 服务器。因此硬盘比较多,有用来下载/上传的,也有用来 nas 共享的。

直接格式化磁盘

有一块硬盘没有格式化就安装在 openwrt 了,看到 openwrt 的页面可以进行简单的磁盘操作:

  1. 打开 系统 -》磁盘管理 页面,找到该磁盘,点击修改
  2. 修改分区表格式:推荐GPT
  3. 创建分区,并格式化为 ext4 格式

安装 ntfs3g

部分已有的硬盘是 ntfs 格式,因为有数据,就继续保持 ntfs 格式了。好在 openwrt 下有 ntfs-3g 的支持,读写不是问题。

opkg update
opkg install ntfs-3g
Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest.
Installing ntfs-3g (2022.5.17-1-fuseint) to root...
Downloading https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages/ntfs-3g_2022.5.17-1-fuseint_x86_64.ipk
Configuring ntfs-3g.
Create '/etc/filesystems'.
Add 'ntfs-3g' to known filesystems.
Collected errors:
 * pkg_hash_check_unresolved: cannot find dependency kernel (= 5.15.88-1-9f9e11a5e946333b83ba37f6864e5c49) for kmod-fuseroot@BleachWrt:~#

内核版本不匹配, uname 可以看到目前的版本是 5.15.86,而上面要求 5.15.88:

uname -a
Linux BleachWrt 5.15.86 #0 SMP Thu Jan 12 16:00:15 2023 x86_64 GNU/Linux

在这里页面上搜索 kernel :

https://downloads.openwrt.org/snapshots/targets/x86/64/packages/

记下来地址,然后登陆到 openwrt 下手工下载安装:

wget https://downloads.openwrt.org/snapshots/targets/x86/64/packages/kernel_5.15.88-1-9f9e11a5e946333b83ba37f6864e5c49_x86_64.ipk

opkg install kernel_5.15.88-1-9f9e11a5e946333b83ba37f6864e5c49_x86_64.ipk
Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest.
Upgrading kernel on root from 5.15.86-1-6d22281f0efc3afbdd740ed895611758 to 5.15.88-1-9f9e11a5e946333b83ba37f6864e5c49...
Configuring kernel.

然后安装:

opkg install mount-utils ntfs-3g lsblk blockd block-mount

安全起见,重启一下 openwrt。

挂载 ntfs 分区

尝试挂载 ntfs 分区:

 mount -t ntfs-3g /dev/sda2 /mnt/sda2

$MFTMirr does not match $MFT (record 3).
Failed to mount '/dev/sda2': I/O error
NTFS is either inconsistent, or there is a hardware fault, or it's a
SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
then reboot into Windows twice. The usage of the /f parameter is very
important! If the device is a SoftRAID/FakeRAID then first activate
it and mount a different device under the /dev/mapper/ directory, (e.g.
/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation
for more details.
opkg update
opkg install ntfs-3g-utils

ntfsfix /dev/sda2

Mounting volume... $MFTMirr does not match $MFT (record 3).
FAILED
Attempting to correct errors...
Processing $MFT and $MFTMirr...
Reading $MFT... OK
Reading $MFTMirr... OK
Comparing $MFTMirr to $MFT... FAILED
Correcting differences in $MFTMirr record 3...OK
Processing of $MFT and $MFTMirr completed successfully.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/sda2 was processed successfully.

之后再 mount 就可以成功了,也可以看到磁盘下的文件了:

mount -t ntfs-3g /dev/sda2 /mnt/sda2
ls  /mnt/sda2

同样的方式处理其他几个要挂载的 ntfs 盘符:

ntfsfix /dev/sdb2
mount -t ntfs-3g /dev/sdb2 /mnt/sdb2
ls  /mnt/sdb2

ntfsfix /dev/sdc2
mount -t ntfs-3g /dev/sdc2 /mnt/sdc2
ls  /mnt/sdc2

ntfsfix /dev/sde2
mount -t ntfs-3g /dev/sde2 /mnt/sde2
ls  /mnt/sde2

注意还要设置访问权限,否则会出现连接上去后因为没有读权限导致 mount 的目录里面为空的情况:

chown nobody:nogroup /mnt/sda2
chmod -R 777  /mnt/sda2
chown nobody:nogroup /mnt/sdb2
chmod -R 777  /mnt/sdb2
chown nobody:nogroup /mnt/sdc2
chmod -R 777  /mnt/sdc2
chown nobody:nogroup /mnt/sde2
chmod -R 777  /mnt/sde2

注意:上面的 mount 命令只能保证这一次mount成功,openwrt 重启之后这些 mount 命令的结果也就消失了。因此还是需要找到一个能永久性 mount 盘符的方式。

https://openwrt.org/docs/guide-user/storage/fstab

先 blkid 找到各个盘符的 uuid,备用。

blkid
/dev/nvme0n1p1: SEC_TYPE="msdos" LABEL_FATBOOT="kernel" LABEL="kernel" UUID="1234-ABCD" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="ee937a51-f5d2-8f30-3541-d2b15aea9701"
/dev/nvme0n1p2: TYPE="squashfs" PARTUUID="ee937a51-f5d2-8f30-3541-d2b15aea9702"
/dev/loop0: LABEL="rootfs_data" UUID="735dbfe5-4bf8-439f-94cb-50ed2997f567" BLOCK_SIZE="4096" TYPE="f2fs"
/dev/nvme0n1p3: UUID="0e5f8ea0-e28a-4755-a378-88428a56cb07" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="3991a910-417a-45a1-b0d6-6688f4ba327f"
/dev/sdb2: LABEL="movie" BLOCK_SIZE="512" UUID="D2BE4708BE46E517" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="077af77b-159f-4601-9d8b-41ad3d7b0879"
/dev/sdc2: UUID="5e92052b-05b6-4ef0-ab8d-4e94fb57a67e" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Basic data partition" PARTUUID="be13e060-ac3a-4df5-9608-518dbed32f68"
/dev/sda2: LABEL="movie3" BLOCK_SIZE="512" UUID="EC588A335889FC98" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="f82cea53-7626-4246-8a1a-b92c6e7fe251"
/dev/sdd2: LABEL="movie2" BLOCK_SIZE="512" UUID="6E603CB9603C89BB" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="14062973-ee65-4f58-9a51-a4b418405350"
/dev/sde1: UUID="1a39276d-e359-49d3-874c-798d32d6b508" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="481e1446-14b8-4437-9783-48cf6b721724"
/dev/nvme0n1p128: PARTUUID="ee937a51-f5d2-8f30-3541-d2b15aea9780"

下面的命令可以得到目前的挂载情况:

block detect > /etc/config/fstab

修改 /etc/config/fstab , 设置对应的 mount 关系,基本原则就是将 uuid 对应的盘符挂载到 target 所示的路径。但是还是遇到问题,表现为 openwrt 无法自动挂载某些盘符。用 block mount 命令手工挂载时会报错:

block umount
block mount
block: mounting /dev/sda2 (ntfs) as /mnt/movie1 failed (22) - Invalid argument
block: mounting /dev/sdb2 (ntfs) as /mnt/movie2 failed (22) - Invalid argument
block: mounting /dev/nvme0n1p2 (squashfs) as /mnt/nvme0n1p2 failed (16) - Resource busy

奇怪的是此时用 mount 命令手工挂载是正常的:

mount -t ntfs-3g /dev/sda2 /mnt/movie1
mount -t ntfs-3g /dev/sdb2 /mnt/movie2

google一圈发现有人遇到类似问题,解决方法是把硬盘拿到 windows 下扫描一遍后再插回到 openwrt 就可以了。

chown nobody:nogroup /mnt/movie
chmod -R 777  /mnt/movie
chown nobody:nogroup /mnt/movie2
chmod -R 777  /mnt/movie2
chown nobody:nogroup /mnt/movie3
chmod -R 777  /mnt/movie3
chown nobody:nogroup /mnt/download
chmod -R 777  /mnt/download
chown nobody:nogroup /mnt/upload
chmod -R 777  /mnt/upload
chown nobody:nogroup /mnt/shared
chmod -R 777  /mnt/shared

客户端访问授权

可以直接通过命令行修改 /etc/config/nfs 文件( 特别注意不是 linux 下常见的 /etc/exports 文件):

/mnt/download   192.168.0.0/16(rw,sync,root_squash,all_squash,insecure,no_subtree_check)
/mnt/upload     192.168.0.0/16(rw,sync,root_squash,all_squash,insecure,no_subtree_check)
/mnt/shared     192.168.0.0/16(rw,sync,root_squash,all_squash,insecure,no_subtree_check)
/mnt/movie       192.168.0.0/16(rw,sync,no_subtree_check)
/mnt/movie2       192.168.0.0/16(rw,sync,no_subtree_check)
/mnt/movie3       192.168.0.0/16(rw,sync,no_subtree_check)

然后执行下面命令进行export:

sudo exportfs -a

这个操作也可以通过 openwrt 的界面来完成,打开 网络存储 -》nfs管理页面( http://192.168.0.1/cgi-bin/luci/admin/nas/nfs)操作即可。

备注:新版本的 /etc/config/nfs 文件格式有发生变化,建议还是用管理页面操作。

参考资料

2 - 设置OpenWRT的samba共享

通过 samba 进行网络共享

准备工作

准备 samba 用户

为 root 用户添加 samba 密码:

smbpasswd -a root

增加一个新的 linux 用户并设置 home 目录:

opkg update
opkg install shadow-useradd

useradd sky -g root
passwd sky
mkdir /home/sky
chown sky /home/sky/

并为其设置 samba 密码:

smbpasswd -a sky

确认 samba 版本

openwrt 默认安装了以下 samba 的包:

  • samba4-libs
  • samba4-server
  • autosamba
  • luci-app-samba4
  • luci-i18n-samba4-zh-cn

功能是预设提供的,因此只要配置好就行。

注意: 这里用的是 samba 4 版本。

准备共享目录

为 openwrt 虚拟机增加一个硬盘,大小暂时设置为 256g,用来作为一个共享目录,存放一些临时性的东西,方便日常跨机器共享文件。

在 openwrt 中挂载这个硬盘,分区,格式化为 ext4 格式,挂载目录为 /mnt/sda1

将整个分区都设置为 777,方便后续读写文件。

chmod -R 777 /mnt/sda1/

设置

页面设置

在 openwrt 的 网络存储 -》网络共享页面进行设置:

http://192.168.0.1/cgi-bin/luci/admin/nas/samba4

共享设置如下:

name 目录 容许用户
share /mnt/sda1 root,sky

不容许匿名用户,创建权限掩码 默认为 0666,目录权限掩码 默认为 0777

修改配置文件

vi /etc/config/samba4 可以直接修改配置文件,对应上面页面的功能设置。

页面修改之后,保存并应用,内容就会存储在这个配置文件中。

但是: 在 /etc/samba/smb.conf 文件中也有非常类似的设置,还不清楚这两个配置文件之间的从属关系

发现一个问题: 页面修改之后,我删除了某个内容,但重启还能看到删除的内容,只好手工登录上去,同时修改 /etc/config/samba4 和 /etc/samba/smb.conf 文件。

重启 samba4

设置完成之后,重启 samba4 :

service samba4 restart

使用情况

  • macbook 下正常访问
  • linux下报错:
    • 浏览目录时报错:failed to retrieve share list from server invalid argument
    • 可以通过 smb://192.168.0.1/download/ 这样的方式直接访问共享内容,不报错
  • windows下正常:
  • 高清播放器:

相关命令

# 启动服务
service samba4 start
# 停止服务
service samba4 stop
# 重启服务
service samba4 restart
# 服务状态
service samba4 status

# 配置文件检查
testparm -v

参考资料

3 - 设置CloudDrive2

通过 CloudDrive2 挂载 115 网盘

CloudDrive2 设置

安装 CloudDrive2

在 openwrt 上安装 CloudDrive2 插件,并进行配置。

可以通过 istore 进行安装,在 istore 中找到 CloudDrive2 插件,点击安装即可(注意这次安装的 openwrt 的 clouddrive2 插件)。

然后在 openwrt 下找到 CloudDrive2 插件,继续再安装(这次是安装 clouddrive2 的 docker 容器),全部默认,但要勾选上共享 /mnt 目录。

安装完成后,状态显示: clouddrive2 运行中。点击 “打开clouddrive2” 按钮,进入 clouddrive2 的 web 界面。

注册和登录

可以先注册一个 clouddrive2 的账号,然后登录。

CloudDrive2 系统设置

右上角点用户图表,菜单中选择 “设置”,进入 CloudDrive2 系统设置页面。

  • 目录缓存时间(秒): 修改为0,表示永不过期

  • 启用缓存持久化

添加 115 为云存储

通常 clouddrive2 的 web 界面地址为,其中端口默认是 19798:

http://192.168.3.1:19798/

右上角选择语言为中文。

云存储中,点击"添加",然后选择 “115open”,认证方式选择 “OAuth认证”。在点击 “使用以下方式授权 115open” 按钮,在弹出的页面中登录115并完成授权。

115open 中,点击管理:

  • 最大下载线程数: 默认2,修改为10(备注:发现改不了,只能用默认值2,估计是需要用付费版本)

  • 勾选 使用 HTTP 下载

  • 最小读取长度 (KB):: 2048 KB

  • 最大缓冲池大小 (MB): 256MB

挂载115网盘

进入 挂载 页面,点击 “添加挂载点”,选择:

  • 源目录:/115open

  • 挂载点: /mnt/CloudNAS/115open

此时,可以 ssh 登录 openwrt,或者在 openwrt 的页面上浏览目录 /mnt/CloudNAS/115open,就可以看到挂载的 115 网盘的文件。

openwrt 设置

修改 nfs export 设置:

vi /etc/exports

内容设置为:

/mnt/CloudNAS/115open 192.168.0.0/16(rw,async,no_root_squash,insecure,no_subtree_check,fsid=101)

重启 nfs server:

exportfs -arv
/etc/init.d/nfsd restart

正常此时 openwrt 上已经 mount 成功115网盘,可以看到网盘文件如:

ls -l /mnt/CloudNAS/115open
drwxr-xr-x    1 root     root             0 Nov 11 19:26 backup
drwxr-xr-x    1 root     root             0 Nov 14 04:37 data
drwxr-xr-x    1 root     root             0 Oct 21 23:29 game
drwxr-xr-x    1 root     root             0 Oct 21 23:45 movie
drwxr-xr-x    1 root     root             0 Nov 10 01:42 musiz
drwxr-xr-x    1 root     root             0 Oct 30 22:15 temp
drwxr-xr-x    1 root     root             0 Oct 21 23:29 tv
......

nfs client 设置

linux mint

先安装 nfs client:

sudo apt install nfs-client

查看 nfs server 的 export 信息:

$ showmount -e 192.168.3.1

Export list for 192.168.3.1:
/mnt/CloudNAS/115open 192.168.0.0/16

尝试 mount 到本地:

mkdir -p ~/temp/115
cd ~/temp/

sudo mount -v -t nfs -o vers=3,nolock,proto=tcp 192.168.3.1:/mnt/CloudNAS/115open ./115

mount 成功之后,可以查看 mount 后的 115 网盘的文件:

$ ls ./115
backup  data  game  movie  musiz  temp  tv

播放蓝光圆盘

进入 movie 目录,找到蓝光圆盘,以碟中碟8 为例,iso 文件大小为 101.0 GB。

右键点 iso 文件,弹出菜单中选择 “mount archive”, 加载 iso 文件后,进入 “BDMV/STREAM” 目录 ,找到最大的文件,如 00294.m2ts 大小为 99.8 GB。用播放器如 Celluloid 打开,即可播放。

打开 linux mint 的系统监控器(system monitor),可以看到播放时的网络流量。100 GB 的 4k 蓝光圆盘,播放时大概是 12 MB 上下的下载速度,也就是 100 兆的宽带带宽大体就足以满足 4k 蓝光圆盘的 115 网盘不下载直接播放。

播放了一段时间,大概几分钟,播放器就卡住了,系统监控器上看到网络流量为零。检查后发现 clouddrive2 的 115 云储存可以访问,openwrt 上的挂载也可以访问,但 openwrt 的 nfs server 出问题了。

重新启动 openwrt 的 nfs server,恢复正常。

检查了一下 openwrt 的 cpu 占用,非常低,我给了 openwrt 虚拟机4个小核,cpu 使用率一直在 0% 到 3% 之间跳动, cloud drive 会占用大概 470 MB 的内存。

windows 11

安装配置

打开控制面板,进入 “程序和功能”,点 “启用或者关闭 windows 功能”,找到 “nfs 服务”,勾选 “nfs客户端” 和 “管理工具”,安装完成后重启电脑。

重启后,打开 cmd,检查 nfs client 安装是否ok:

C:\Users\sky>mount --help
用法:  mount [-o options] [-u:username] [-p:<password | *>] <\\computername\sharename> <devicename | *>

-o rsize=size               设置读取缓冲区的大小(以 KB 为单位)-o wsize=size               设置写入缓冲区的大小(以 KB 为单位)-o timeout=time             设置 RPC 调用的超时值(以秒为单位)-o retry=number             设置软装载的重试次数。
-o mtype=soft|hard          设置装载类型。
-o lang=euc-jp|euc-tw|euc-kr|shift-jis|big5|ksc5601|gb2312-80|ansi
                            指定用于文件和目录名称的编码。
-o fileaccess=mode          指定文件的权限模式。
                            这些模式用于在 NFS 服务器上创建的
                            新文件。使用 UNIX 样式模式位指定。
-o anon                     作为匿名用户装载。
-o nolock                   禁用锁定。
-o casesensitive=yes|no     指定在服务器上执行区分大小写的文件查找。
-o sec=sys|krb5|krb5i|krb5p

C:\Users\sky>mount

本地    远程                                 属性
-------------------------------------------------------------------------------

简单起见,先关闭 windows 防火墙,在没有防火墙的干扰下先把 nfs 的功能跑起来。

查看 nfs 服务器的 export 情况:

$ showmount -e 192.168.3.1
导出列表在 192.168.3.1:
/mnt/CloudNAS/115open              192.168.0.0/16

在 cmd 中执行(不需要用管理员身份打开 cmd):

mount \\192.168.3.1\mnt\CloudNAS\115open Z:

如果成功,会显示:

Z: 现已成功连接到 \\192.168.3.1\mnt\CloudNAS\115open

命令已成功完成。

这是打开 z 盘符,就能看到 115 网盘的内容。

防火墙设置

再来解决防火墙的问题,开启防火墙

解决中文乱码问题

但现在还有个问题,挂载后的 115 网盘内容会有中文乱码,比如文件或者文件名。

打开 “控制面板” –> “时钟和区域” –> “更改日期、时间或者数字格式” –> “管理” , 找到 “非 unicode 程序中所使用的当前语言”,点击 “更改系统区域设置”,勾选 “Beta版:使用 unicode utf-8 提供全球语言支持”。

重新启动 windows 后再重新 mount ,发现乱码问题解决,能正常显示中文的文件和文件夹.

备注:4k 带杜比视界的 iso 蓝光原盘,无法用完美解码(potplayer)播放(哪怕升级到最新版本),也无法用 windows 11 自带的 iso 装载器装载。我安装 Leawo Blu-ray Player 之后可以正常播放,也能显示蓝光原盘的菜单。