170 lines
5.5 KiB
Markdown
170 lines
5.5 KiB
Markdown
好的,我们来把整个过程中的问题点和最终解决方案做一个清晰的总结,方便你日后参考。
|
||
|
||
---
|
||
|
||
## 📋 完整问题回顾与解决总结
|
||
|
||
### 一、环境背景
|
||
- **宿主机**:M4 芯片 Mac(ARM64 架构)
|
||
- **虚拟机软件**:UTM
|
||
- **虚拟机系统**:Ubuntu 22.04.5 LTS(ARM64 架构)
|
||
- **目标**:配置宿主机与 Ubuntu 虚拟机的共享文件夹
|
||
|
||
---
|
||
|
||
### 二、问题与解决过程全记录
|
||
|
||
#### 阶段1:获取 ARM64 镜像
|
||
**问题**:在清华镜像站 `ubuntu-releases/22.04.5/` 只看到 `amd64` 镜像,找不到 `arm64`。
|
||
|
||
**原因**:`amd64` 和 `arm64` 镜像分开放置:
|
||
- `amd64` → `ubuntu-releases/`
|
||
- `arm64` → `ubuntu-ports/` 或 `ubuntu-cdimage/`
|
||
|
||
**解决方案**:
|
||
- **下载安装镜像**:前往 `https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/releases/22.04.5/release/`,选择 `ubuntu-22.04.5-live-server-arm64.iso`(标准版,支持 ≤64GB 内存)。
|
||
- **配置 APT 软件源**:使用 `http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/` 作为 `jammy` 的软件源地址。
|
||
|
||
---
|
||
|
||
#### 阶段2:尝试 VirtIO-FS 共享(失败)
|
||
**问题**:执行 `sudo mount -t virtiofs share ~/shared` 报错:
|
||
```
|
||
mount: /home/cyy/shared: wrong fs type, bad option, bad superblock on share...
|
||
```
|
||
|
||
**排查过程**:
|
||
1. 尝试安装 `virtiofsd`:`sudo apt install virtiofsd` 提示 `E: Unable to locate package virtiofsd`。
|
||
2. 启用 `universe` 仓库后仍找不到该包。
|
||
|
||
**结论**:`virtiofsd` 在 Ubuntu 22.04 ARM64 架构的软件源中**不存在**,`virtiofs` 方案在 ARM64 上不可用。
|
||
|
||
---
|
||
|
||
#### 阶段3:改用 SPICE WebDAV 共享(成功)
|
||
**最终方案**:使用 UTM 推荐的 **SPICE WebDAV** 方式。
|
||
|
||
**步骤**:
|
||
|
||
1. **在 Ubuntu 中安装 WebDAV 相关软件包**:
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install spice-vdagent spice-webdavd davfs2
|
||
```
|
||
|
||
2. **在 UTM 中启用 WebDAV**(虚拟机需关机状态):
|
||
- 编辑虚拟机 → “共享”选项卡
|
||
- 确保 “SPICE WebDAV” 已启用
|
||
- 添加要共享的 macOS 文件夹
|
||
|
||
3. **在 Ubuntu 中挂载**:
|
||
```bash
|
||
# 创建挂载点
|
||
mkdir -p ~/shared
|
||
# 挂载(关键:使用 uid/gid 指定用户权限,并跳过认证)
|
||
sudo mount -t davfs http://127.0.0.1:9843 ~/shared -o uid=1000,gid=1000
|
||
```
|
||
**⚠️ 注意**:提示 `Username:` 和 `Password:` 时,**直接按回车跳过**,不要输入任何内容。
|
||
|
||
---
|
||
|
||
#### 阶段4:解决权限问题(Permission denied)
|
||
|
||
**问题表现**:
|
||
- 挂载后只能以 `root` 写入,普通用户 `cyy` 无法创建文件。
|
||
- 执行 `touch ~/shared/test.txt` 报 `Permission denied`。
|
||
|
||
**原因**:
|
||
- 挂载时未指定 `uid`/`gid`,默认以 `root` 身份挂载。
|
||
- 用户输入了认证信息(`cyy`/密码),导致挂载状态异常。
|
||
|
||
**解决方案**:
|
||
|
||
1. **卸载时确保不在挂载目录内**:
|
||
```bash
|
||
cd ~
|
||
sudo umount ~/shared
|
||
```
|
||
如果提示 `target is busy`,使用惰性卸载:
|
||
```bash
|
||
sudo umount -l ~/shared
|
||
```
|
||
|
||
2. **重新挂载并指定用户权限**:
|
||
```bash
|
||
sudo mount -t davfs http://127.0.0.1:9843 ~/shared -o uid=1000,gid=1000
|
||
```
|
||
**认证环节必须直接回车跳过**。
|
||
|
||
3. **验证**:
|
||
```bash
|
||
touch ~/shared/test.txt
|
||
ls -l ~/shared
|
||
```
|
||
|
||
---
|
||
|
||
#### 阶段5:配置文件语法错误排查
|
||
|
||
**问题**:修改 `/etc/davfs2/davfs2.conf` 后挂载报错:
|
||
```
|
||
/sbin/mount.davfs: /etc/davfs2/davfs2.conf:78: unknown option
|
||
```
|
||
|
||
**原因**:`davfs2` 的全局配置文件不支持 `uid`/`gid` 选项(某些版本限制)。
|
||
|
||
**解决方案**:
|
||
- **方式一**(推荐):注释掉配置文件中添加的 `uid`/`gid` 行,改用**命令行参数**指定:
|
||
```bash
|
||
sudo sed -i '78,79s/^/#/' /etc/davfs2/davfs2.conf
|
||
```
|
||
- **方式二**:将 `uid`/`gid` 写入 `/etc/fstab`(见下文永久挂载方案)。
|
||
|
||
---
|
||
|
||
### 三、最终稳定方案总结
|
||
|
||
#### ✅ 每次手动挂载(已验证)
|
||
```bash
|
||
cd ~ # 先退出挂载目录
|
||
sudo umount ~/shared # 如果已挂载,先卸载
|
||
sudo mount -t davfs http://127.0.0.1:9843 ~/shared -o uid=1000,gid=1000
|
||
# 遇到 Username/Password 提示时,直接按 Enter 跳过
|
||
```
|
||
|
||
#### ✅ 永久挂载(推荐)
|
||
编辑 `/etc/fstab`,添加一行:
|
||
```
|
||
https://127.0.0.1:9843 /home/cyy/shared davfs rw,noauto,user,uid=1000,gid=1000 0 0
|
||
```
|
||
之后每次挂载只需:
|
||
```bash
|
||
mount ~/shared
|
||
```
|
||
无需 `sudo`,无认证提示,权限自动生效。
|
||
|
||
---
|
||
|
||
### 四、关键经验与避坑指南
|
||
|
||
| 问题 | 原因 | 正确做法 |
|
||
|------|------|----------|
|
||
| 找不到 `arm64` 镜像 | 镜像分开放置 | 去 `ubuntu-cdimage` 或 `ubuntu-ports` 找 |
|
||
| `virtiofsd` 无法安装 | ARM64 软件源无此包 | 放弃 `virtiofs`,改用 SPICE WebDAV |
|
||
| 挂载后无法写入 | 未指定 `uid`/`gid` | 挂载时用 `-o uid=1000,gid=1000` |
|
||
| 认证弹窗干扰 | 输入了用户名/密码 | **直接回车跳过**(本地服务无需认证) |
|
||
| 卸载提示 `busy` | 终端在挂载目录内 | 先 `cd ~`,再 `umount` |
|
||
| 配置文件报错 | `davfs2.conf` 不支持 `uid`/`gid` | 注释掉,改用命令行或 `/etc/fstab` |
|
||
|
||
---
|
||
|
||
### 五、最终环境状态
|
||
|
||
- ✅ UTM 虚拟机运行 Ubuntu 22.04.5 ARM64
|
||
- ✅ SPICE WebDAV 共享文件夹正常工作
|
||
- ✅ 普通用户 `cyy` 可读写共享目录
|
||
- ✅ 可选用 `fstab` 自动挂载方案
|
||
|
||
---
|
||
|
||
如果你后续需要配置 YOLOv8 环境或其他开发工具,这份总结可以作为你的基础环境配置文档。有问题随时再问! 🚀 |