265 lines
4.4 KiB
Markdown
265 lines
4.4 KiB
Markdown
#wsl #ubuntu #nas #mount
|
||
## 背景
|
||
|
||
- **环境**: Windows 11 + WSL2 (Ubuntu 24)
|
||
- **硬件**: Lenovo ThinkBook 16, Synology DS718 NAS
|
||
- **目标**: 在 Ubuntu 中访问 NAS 上的 `/volume1/music` 共享文件夹
|
||
- **Windows 路径**: `\\192.168.3.17\music`
|
||
|
||
## 踩过的坑
|
||
|
||
### 1. CIFS 方案失败 ❌
|
||
|
||
#### 尝试方法
|
||
|
||
```bash
|
||
sudo apt install cifs-utils
|
||
sudo mkdir -p /mnt/nas-music
|
||
sudo mount -t cifs //192.168.3.17/music /mnt/nas-music -o username=shenwei,password=your_password
|
||
```
|
||
|
||
#### 错误信息
|
||
|
||
```
|
||
mount error(95): Operation not supported
|
||
```
|
||
|
||
#### 原因分析
|
||
|
||
- 虽然内核支持 CIFS (`grep -i cifs /proc/filesystems` 有输出)
|
||
- 但 WSL2 内核被配置为禁止旧 SMB 版本
|
||
- dmesg 显示: `vers=2.0 mount not permitted when legacy dialects disabled`
|
||
- Synology NAS 只支持 SMB 2.0 及更低版本,与 WSL2 不兼容
|
||
|
||
#### 相关错误日志
|
||
|
||
```
|
||
CIFS: VFS: \\192.168.3.17 Dialect not supported by server
|
||
CIFS: VFS: vers=2.0 mount not permitted when legacy dialects disabled
|
||
```
|
||
|
||
### 2. SSHFS 方案问题 ⚠️
|
||
|
||
#### 尝试方法
|
||
|
||
```bash
|
||
sudo apt install sshfs
|
||
sudo sshfs shenwei@192.168.3.17:/volume1/music /mnt/nas-music -o allow_other
|
||
```
|
||
|
||
#### 错误信息
|
||
|
||
```
|
||
read: Connection reset by peer
|
||
```
|
||
|
||
#### 原因
|
||
|
||
可能是 Synology SSH 配置的限制或 sshfs 参数兼容性问题
|
||
|
||
#### 建议
|
||
|
||
如果 SSH 能连接但 sshfs 有问题,可尝试:
|
||
|
||
- 用密钥认证而不是密码
|
||
- 调整参数: `-o reconnect,ServerAliveInterval=15`
|
||
- 但不如直接用 drvfs 稳定
|
||
|
||
---
|
||
|
||
## ✅ 最终成功方案:在 Windows 挂载后,WSL2 中访问
|
||
|
||
### 第 1 步:在 Windows 中挂载 NAS(已完成)
|
||
|
||
PowerShell (管理员):
|
||
|
||
```powershell
|
||
net use Z: \\192.168.3.17\music /user:shenwei your_password
|
||
```
|
||
|
||
验证:
|
||
|
||
```powershell
|
||
dir Z:\
|
||
```
|
||
|
||
### 第 2 步:在 WSL2 Ubuntu 中挂载 Windows 驱动器
|
||
|
||
创建挂载点:
|
||
|
||
```bash
|
||
sudo mkdir -p /mnt/z
|
||
```
|
||
|
||
挂载 Z: 驱动器:
|
||
|
||
```bash
|
||
sudo mount -t drvfs Z: /mnt/z
|
||
```
|
||
|
||
验证:
|
||
|
||
```bash
|
||
ls /mnt/z/test
|
||
```
|
||
|
||
输出示例:
|
||
|
||
```
|
||
20260815
|
||
@eaDir
|
||
albums
|
||
new
|
||
test
|
||
另外处理
|
||
张国荣音乐合集1978-2007 140CD FLAC
|
||
英文经典
|
||
```
|
||
|
||
### 第 3 步:永久自动挂载(可选)
|
||
|
||
编辑 `/etc/fstab`:
|
||
|
||
```bash
|
||
sudo nano /etc/fstab
|
||
```
|
||
|
||
在末尾添加:
|
||
|
||
```
|
||
Z: /mnt/z drvfs defaults 0 0
|
||
```
|
||
|
||
保存 (Ctrl+O → Enter → Ctrl+X)
|
||
|
||
测试:
|
||
|
||
```bash
|
||
sudo mount -a
|
||
```
|
||
|
||
以后每次启动 WSL2,Z: 驱动器会自动挂载到 `/mnt/z`
|
||
|
||
---
|
||
|
||
## 使用示例
|
||
|
||
### 在 Python 中访问 NAS 文件
|
||
|
||
```python
|
||
import os
|
||
from pathlib import Path
|
||
|
||
# NAS 路径
|
||
nas_music_path = Path("/mnt/z")
|
||
|
||
# 列出所有目录
|
||
for item in nas_music_path.iterdir():
|
||
print(item.name)
|
||
|
||
# 处理音乐文件
|
||
for flac_file in nas_music_path.glob("**/*.flac"):
|
||
print(f"处理: {flac_file}")
|
||
```
|
||
|
||
### 在 Bash 中访问 NAS 文件
|
||
|
||
```bash
|
||
# 列出文件
|
||
ls /mnt/z/albums
|
||
|
||
# 复制文件
|
||
cp /mnt/z/albums/artist/album.flac /home/user/music/
|
||
|
||
# 批量处理
|
||
for file in /mnt/z/**/*.flac; do
|
||
echo "处理: $file"
|
||
done
|
||
```
|
||
|
||
### 在 Docker 容器中使用
|
||
|
||
在 `docker-compose.yml` 中挂载:
|
||
|
||
```yaml
|
||
volumes:
|
||
- /mnt/z:/nas-music:ro
|
||
```
|
||
|
||
容器内访问:
|
||
|
||
```bash
|
||
ls /nas-music/albums
|
||
```
|
||
|
||
---
|
||
|
||
## 性能和稳定性对比
|
||
|
||
|方案|稳定性|性能|易用性|备注|
|
||
|---|---|---|---|---|
|
||
|CIFS|❌|-|-|WSL2 不支持低版本 SMB|
|
||
|SSHFS|⚠️|中|中|可能有兼容性问题|
|
||
|**drvfs**|✅|快|✅|**推荐方案**|
|
||
|
||
---
|
||
|
||
## 故障排查
|
||
|
||
### 问题 1: 挂载点不存在
|
||
|
||
```bash
|
||
# 解决
|
||
sudo mkdir -p /mnt/z
|
||
```
|
||
|
||
### 问题 2: 权限不足
|
||
|
||
```bash
|
||
# 加 sudo
|
||
sudo mount -t drvfs Z: /mnt/z
|
||
```
|
||
|
||
### 问题 3: Z: 驱动器在 Windows 中不可用
|
||
|
||
```powershell
|
||
# Windows PowerShell (管理员) 中重新挂载
|
||
net use Z: \\192.168.3.17\music /user:shenwei your_password
|
||
```
|
||
|
||
### 问题 4: WSL2 中 Z: 驱动器挂载失败
|
||
|
||
```bash
|
||
# 查看 dmesg 日志
|
||
sudo dmesg | tail -20
|
||
|
||
# 尝试卸载后重新挂载
|
||
sudo umount /mnt/z
|
||
sudo mount -t drvfs Z: /mnt/z
|
||
```
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
**最简单和最稳定的方案**:
|
||
|
||
1. **Windows 中**: `net use Z: \\192.168.3.17\music`
|
||
2. **WSL2 中**: `sudo mount -t drvfs Z: /mnt/z`
|
||
3. **Ubuntu 中访问**: `/mnt/z/test`
|
||
|
||
不需要配置复杂的 CIFS 或 SSHFS,直接利用 Windows 已有的网络共享,通过 WSL2 的 drvfs 驱动访问,**稳定、快速、可靠**。
|
||
|
||
---
|
||
|
||
## 相关文件路径
|
||
|
||
- Windows 网络路径: `\\192.168.3.17\music`
|
||
- Windows 驱动器: `Z:\`
|
||
- WSL2 挂载点: `/mnt/z`
|
||
- 音乐文件实际位置: `/mnt/z/albums/...`
|
||
|
||
---
|
||
|
||
**更新时间**: 2026-08-16
|
||
**验证环境**: WSL2 Ubuntu 24, Synology DS718 |