Raspberry Pi 挂载 U盘 用 SAMBA 实现局域网共享
Raspberry Pi 的性能不是很好,但是做一些小服务已经足够,特别是对于家用… Raspberry Pi 3B 有4个USB口,身边也有不用的旧的TF卡,Class4的,还能用,拿来做共享硬盘吧。
准备
移动硬盘 或 TF卡及适配器,exFAT格式。
原理
挂载移动硬盘 然后让SMB访问它就可以了。
步骤
1. 挂载移动硬盘
把硬盘插到USB口里面,打开终端。用 root身份 查看硬碟列表。
$ sudo fdisk --list
# 执行后输出的尾部会看到新的硬盘,从容量可以识别到。
Disk /dev/sda: 14.6 GiB, 15707668480 bytes, 30679040 sectors
Disk model: Mass-Storage
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 30679039 30676992 14.6G 7 HPFS/NTFS/exFAT
记住设备号 /dev/sda1
,下次插上硬盘时,设备号可能变化,可以用 修改fstab 的方法实现开机自动挂载。
注意!fstab编辑不当会导致无法开机!表现出挂载出问题导致系统初始化失败,最后找了一台Ubuntu系统挂载系统盘改了回来解决。
假设我想把U盘挂到 /mnt/portable
上。
# 创建目录,-p 表示如果目录已存在则跳过,也可以用来创建多层子目录
sudo mkdir -p /mnt/portable
# 用 root 身份挂载
sudo mount /dev/sda1 /mnt/portable
2. 准备 docker 镜像
这里用到 Trnape 构建好的脚本镜像: Samba file server for Raspberry Pi
$ docker pull trnape/rpi-samba
3. 启动临时容器
先启动临时容器查看是否工作正常 按照 Trnape 的 README.md,脚本的选项如下。
参数 | 示例值 | 说明 |
---|---|---|
-u | X:Y | 添加用户X,密码Y |
-s | A : B : C : D | A共享名,B目录,C为读写权限,D为所有者 |
启动临时容器:
$ docker run \
-p 445:445 \
-v /mnt/portable:/share/data \
trnape/rpi-samba \
-u "guest:guest" \
-s "Public:/share/data:rw:guest"
启动后新开一个 文件管理器 访问,输入用户名guest
密码guest
即可访问共享目录。
由于移动硬盘是exFAT格式,不支持Linux的文件权限,尝试chmod
时会报错,程序中断。
解决办法是弹出脚本修改指令,在后面加上 || true
即可忽略错误。
# 程序中断
chown root:root /share/data
# 程序跳过中断,继续运行
chown root:root /share/data || true
4. 配置纯访客用户访问(无密码)
镜像内置的脚本只实现了用户鉴权配置,用访客身份会被拒绝。所以要把脚本文件弹出来手动修改。
获取运行脚本 run.sh
-
方法1: 直接到仓库下载 run.sh
-
方法2: 运行镜像打印脚本
$ docker run \
--rm \
--entrypoint /bin/bash \
trnape/rpi-samba \
-c 'cat /run.sh'
修改脚本
打开 run.sh
找到这行chown,在后面加上 || true
可以跳过exFAT格式 Operation not permitted
错误。
# 找到这里
chown smbuser "$sharepath"
# 改成
chown smbuser "$sharepath" || true
继续查找,修改 samba 配置。
[global]
workgroup = WORKGROUP
# 在后面添加
# guest 账户不需要密码
map to guest = Bad Password
# 允许 guest 账户
guest ok = yes
# guest 账户以 smbuser 用户登录
guest account = smbuser
smbuser
是镜像内建的用户,用 smbuser
就不用添加其他用户了。
编辑完了在当前目录再次试运行
$ docker run \
-p 445:445 \
-v /mnt/portable:/share/data \
trnape/rpi-samba \
-s "Public:/share/data:rw:smbuser"
再次访问 samba 服务器,不用再输入密码了。