网络共享
1 - 设置OpenWRT的nfs共享
准备工作
准备用 openwrt 这台机器兼职做下载和 nas 服务器。因此硬盘比较多,有用来下载/上传的,也有用来 nas 共享的。
直接格式化磁盘
有一块硬盘没有格式化就安装在 openwrt 了,看到 openwrt 的页面可以进行简单的磁盘操作:
- 打开 系统 -》磁盘管理 页面,找到该磁盘,点击修改
- 修改分区表格式:推荐GPT
- 创建分区,并格式化为 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 用户
为 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 设置
安装 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 之后可以正常播放,也能显示蓝光原盘的菜单。