LEDE 文件共享
在 LEDE 上开启文件共享。当然也能在 Docker 里搭建,会稍微简单一点。这里简要地说明从 0 开始,格式化磁盘,挂载磁盘,配置文件共享,解决容易遇上的一些问题,以及在其他系统上挂载共享的方法。总体而言比较简单。
环境准备
Windows 11
Windows 操作系统
OpenWrt LEDE
Ubuntu、Debian 系都行
NVMe 硬盘盒 256GB
USB 硬盘盒,3.5、2.5、mSATA 和 NVMe 都行
比较熟悉 Shell
不熟也行,备份好数据,多试试就好
准备磁盘
确认 usb 连接好,并挂载上了,这里涉及到格式化的命令,绝对不要直接复制黏贴,否则容易格式化删掉分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| opkg update
opkg install usbutils
lsusb
lsblk
fdisk -l
parted /dev/sda1 mklabel gpt
parted /dev/sda1 mkpart sub ext4 0% 100%
partprobe /dev/sda1
lsblk
|
SAMBA
Samba 是在 Linux 上实现 SMB(Server Messages Block)协议的软件,SMB 协议是 Windows 的局域网通信协议,虽然说历年上出现很多 POC(比方说永恒之蓝),只要注意更新,一般不会有什么问题。
smb 协议的优点:
- 全平台兼容
- 可以作为网络驱动器映射,可以直接安装软件(不建议)
配置
具体使用方法也不太复杂,但不要复制黏贴,容易出错,建议读完脚本里面的注释再运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| opkg update
opkg install luci-app-samba4
useradd -s /usr/sbin/nologin samba
smbpasswd -a samba
cat >> /etc/samba/smb.conf <<<-EOF [samba] path = /mnt/sda1 valid users = samba hosts allow = 10.22.33.0/24 create mask = 0774 directory mask = 0774 read only = no vfs objects = io_uring EOF
testparm
service samba4 restart
chown samba -R /mnt/sda1
ls -ld /mnt/sda1
ls -l /mnt/sda1
|
以上脚本可以直接执行,但是要注意修改几个地方:
samba
服务需要设置密码- 挂载的目录
/mnt/sda1
需用 lsblk
查看 - 配置中的
[samba]
可以自定义,是共享名,也就是指定了 \\10.22.33.1\samba
共享位置的 - 参数
hosts allow
建议设置为局域网,不会设置可以去掉(不建议)。 - 不喜欢
samba
为用户名在 useradd -s /usr/sbin/nologin <username>
可以自己修改
问题
几个容易遇上的问题:
- 在 Windows 下可以正常挂载,但是其他地方无法挂载
考虑降低 smb
版本
1 2 3
| server min protocol = NT1
|
- 始终无法访问文件,看不到文件
检查分区格式,确保不是 NTFS 文件系统,有 BUG,详见 准备磁盘 篇
检查目录是否配置正确
- 报错无权限
检查权限,详见 SAMBA 篇:
- 文件夹权限是对的,但总是访问不了文件
检查给对用户了吗?
- 还是访问不了,怎么办
ping 一下,还在吗?
1 2 3 4 5 6
| ping 10.22.33.1 ``
配置中路径写对了吗? ```text \\10.22.33.1\samba
|
用户名和密码填对了吗?
防火墙打开了吗?
- 过一会,挂载的驱动器会掉,无法访问
部分 NVMe 硬盘盒设置了自动休眠,供电不足也会导致自动休眠,
请确保硬盘盒没有问题,或者修改硬盘盒固件
- 上电不读盘,或者是 samba 映射空间突然变小。
lsblk
找得到 /dev/sda
,但是 fdisk -l
读不到分区
在系统启动完毕后,重置下 USB 端口
一般是系统启动期间供电不足导致的,初步推断:
- 电源供电不足
- 电路设计,不允许接收更大的电流做电源输入
- 挂载外设逻辑有误,应当在系统启动,并稳定运行后,开始给外设上电
1 2 3 4 5 6 7 8 9
| # 找到 USB 设备
lsusb | grep 9210 #Bus 004 Device 002: ID 0bda:9210 Realtek RTL9210B-CG
# 重置设备
usbreset 004/002 #Resetting RTL9210B-CG ... ok
|
- 上电不读盘,
lsblk
找得到 /dev/sda
,但是 fdisk -l
读不到分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 表现为设备连上 lsusb | grep 9210 # 9210 是我这个硬盘盒芯片型号,不同的盒子不一定一样 #Bus 008 Device 002: ID 0bda:9210 Realtek RTL9210B-CG
# 找不到分区信息 fdisk -l | grep sda #(空)
# 根本没有映射分区表 cat /proc/partitions | grep sda #(空)
# 并且,同时表现为,读不出分区, lsblk | grep sda #sda 8:0 0 0B 0 disk
# 这是正常的情况 lsblk | grep sda #sda 8:0 0 238.5G 0 disk #└─sda1 8:1 0 238.5G 0 part
# 一般重启后可以解决(可以看 dmesg 内核日志) dmesg | grep sda
|
- 上电不读盘,
lsblk
找得到 /dev/sda
,但是 fdisk -l
读不到分区,重启后还是不行
这是磁盘读不到,只需要拔插 USB 接口就行,一般是硬盘供电不足,导致上电初始化卡住,发生在断电后和路由一起重启上电
异常输出,带 failed
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| > dmesg | grep sda [ 8.809930] sd 0:0:0:0: [sda] Read Capacity(16) failed: Result: hostbyte=0x00 driverbyte=DRIVER_OK [ 8.810768] sd 0:0:0:0: [sda] Sense Key : 0xb [current] [ 8.811240] sd 0:0:0:0: [sda] ASC=0x0 ASCQ=0x0 [ 14.809704] sd 0:0:0:0: [sda] Read Capacity(10) failed: Result: hostbyte=0x00 driverbyte=DRIVER_OK [ 14.810611] sd 0:0:0:0: [sda] Sense Key : 0xb [current] [ 14.811105] sd 0:0:0:0: [sda] ASC=0x0 ASCQ=0x0 [ 14.811542] sd 0:0:0:0: [sda] 0 512-byte logical blocks: (0 B/0 B) [ 14.812105] sd 0:0:0:0: [sda] 0-byte physical blocks [ 18.809426] sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled [ 20.809298] sd 0:0:0:0: [sda] Asking for cache data failed [ 20.809839] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 20.811499] sd 0:0:0:0: [sda] Preferred minimum I/O size 512 bytes not a multiple of physical block size (0 bytes) [ 20.812438] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (0 bytes) [ 20.814540] sd 0:0:0:0: [sda] Attached SCSI disk
|
这是连接正常后的输出
1 2 3 4 5 6 7 8 9
| > dmesg | grep sda [ 1357.401057] sd 0:0:0:0: [sda] 500118192 512-byte logical blocks: (256 GB/238 GiB) [ 1357.402926] sd 0:0:0:0: [sda] Write Protect is off [ 1357.403410] sd 0:0:0:0: [sda] Mode Sense: 37 00 00 08 [ 1357.406496] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1357.408302] sd 0:0:0:0: [sda] Preferred minimum I/O size 512 bytes [ 1357.408868] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes [ 1357.420625] sda: sda1 [ 1357.421187] sd 0:0:0:0: [sda] Attached SCSI disk
|
SMB 挂载
Windows 下挂载
Windows 下使用 PowerShell 直接映射网络驱动器:
1 2 3 4 5 6 7 8
| Get-PSDrive -PSProvider "FileSystem"
$cred = Get-Credential -Credential samba
New-PSDrive -Name "Z" -Root "\\10.22.33.1\samba" -Persist -PSProvider "FileSystem" -Credential $cred
|
Linux 下挂载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # 安装 cifs sudo apt install cifs-utils # 安装中文支持,避免目录乱码 sudo apt language-pack-zh-hans-base # 应用中文支持 sudo locale-gen # 如果还是有问题,需要重启下计算机
# 创建目录 sudo mkdir ~/local_share
# 查看当前用户的 id 和 gid id
# 挂载 到当前用户下 sudo mount -t cifs //10.22.33.1/samba/ /home/aero/smb/ -o rw,uid=1000,gid=1000,vers=3.0,username=samba # 带有密码,不推荐。 #sudo mount -t cifs //10.22.33.1/samba/ /home/aero/smb/ -o rw,uid=1000,gid=1000,vers=3.0,username=samba,password=<your_pass>
# 因为 samba 没有密码保护的措施,因此建议每次挂载都输入密码 # 当然,对于不重要,对安全性没有追求的来说,可以直接带着密码写进去 # 写在鉴权文件中是明文,因此写哪儿都一样,不过是浪费别个半分钟罢了。
# 卸载 #sudo umount /home/aero/smb
|