在 PVE 的不同虚拟机/LXC 容器之间共享磁盘

2023-11-04 10:30:11 +08:00
 fonlan

趁着双十一入手了 EQ12 当软路由,装了一块 NVME 做系统盘,又用 SATA 口挂了一块 2T 的 SSD 做下载盘。

计划是用一个虚拟机运行 qBittorrent 做下载器,另外运行一个或多个虚拟机/LXC 容器来跑 jellyfin 、alist 之类的服务。所以这几个虚拟机之间需要能同时访问这块 2T 的 SSD 作为数据源。

现在 PVE 装好了,但是没找到合适的的协议来共享磁盘,NFS 应该可以,但 NFS 可能有性能损失。这方面有什么比较好的实践吗?

4491 次点击
所在节点    服务器
19 条回复
freechuzhuo
2023-11-04 10:55:25 +08:00
pct set 125(lxcid) -mp1 /mnt/sda1,mp=/mnt/sda1
pve 里挂载
zhouzm
2023-11-04 13:50:41 +08:00
推荐 samba
Jisxu
2023-11-04 14:01:40 +08:00
pve 宿主机或者单独一个 omv 给这块 2t 的盘开 smb server ,其他所有要用硬盘的机器都用 smb 协议挂载,你用 nfs 协议也可以,看哪个方便
iloveayu
2023-11-04 14:37:44 +08:00
你的想法可以实现,如果你对安全要求没那么高,只是家用 那 nfs 可以了,这是最方便配置和稳定的,并且可以多用户同时写入。
根据我古早的记忆,smb 多用户同时写可能会出些莫名其妙的问题,不知道现在怎么样了。
laminux29
2023-11-04 15:28:22 +08:00
你都软路由,小主机了,还考虑 NFS 性能损失???实在搞不清你的思路。

我倒是喜欢 SSHFS ,第一是方便部署,能跨内外网,能方便端口映射,而且协议本身自带加密,不用再去考虑加密问题。

NFS 与 SMB ,主要是部署不方便,如果不组虚拟局域网,异地访问很麻烦,而且安全性也有问题。
fonlan
2023-11-04 16:56:07 +08:00
@freechuzhuo 我现在用的就是类似的命令,不过因为我用的不是 LXC 容器,是虚拟机所以我是用`qm set 104 --virtio1 /dev/disk/by-id/ata-xxx`这种命令直接把硬盘挂载到虚拟机上去的,但这样的话这块硬盘只有这个虚拟机能用,我现在是想把这块硬盘再共享给其他虚拟机
fonlan
2023-11-04 17:13:44 +08:00
@laminux29 主要对 NFS 能达到的性能不太了解,网上搜到的一个测试结果是千兆内网下只能达到 11MB 的写入速度,虽然不太相信只能到这么点速度但还是想先找找有没有别的 PVE 原生不依赖网络的共享方法😅
allplay
2023-11-04 17:26:17 +08:00
PXE 里面开一个 LXC ,专门映射磁盘,给虚拟机内所有的 LXC 或 docker 使用
laminux29
2023-11-04 18:44:50 +08:00
@fonlan 建议使用 SSHFS ,各种特性综合起来没有短板的选手,可以代替 SMB 、NFS 。
bt7vip
2023-11-04 19:16:44 +08:00
我的存储管理方案
硬盘挂载到 PVE ,同时加入到 storage 中,方便查看剩余空间和直接备份虚拟机或容器。


起一个特权 lxc>strange ,命名为 A ,挂载硬盘新建一个目录穿透到这个 strange ,在容器中部署 NFS server ,共享出去。


因为 NFS 和 samba 需要特权容器,我有洁癖,所以后面用于接入 strange 的 CLI 全是起的虚拟机。


起一个虚拟机,命名为 B ,挂载 NFS 共享,用于 pt 下载。


起一个虚拟机,命名为 C ,挂载 NFS ,同时部署 samba severe ,用于共享给局域网或虚拟局域网,samba 是有很多缺点,但是挡不住可以在 win10 以上直接加载 iOS 文件,香的一批。


起一个虚拟机,命名为 D ,挂载 NFS ,部署 vsFTPd ,用于 FTP 只读共享。


其中最主要的不是多层结构,是权限下落,不用一路 777 ,仍然安全落到 PVE 下挂载硬盘的子目录切权限可靠。


B C D 服务可随时下线上线重新部署,丝毫不影响其他服务的运行。


B C D 服务都是单独服务用户,即使被入侵,也只是在服务影响之内。交叉文件除外。


以上方案在加一个 wire guard 组网,体验直线上升,Windows 起个 robocopy 备份异地文件,异地挂载 samba ,随时随地登录 PVE 管理,在起个 grafana 做个大屏展示。


目前遇到的问题是:samba 和 FTP 对 emoji 表情符号不支持,下载的 ytb 视频会因为表情符号导致文件丢失。
fonlan
2023-11-05 10:21:33 +08:00
@bt7vip #10 嗯,又查了一圈,似乎内网不加密的情况下确实是 NFS 性能最好,我暂时不需要 SAMBA 和 FTP ,我内网用的更多的是 Webdav ,感觉性能比 SAMBA 好
tingfeng1
299 天前
@laminux29 打扰一下,请问是不是服务端打开 ssh server, 然后客户端装个 sshfs ,就可以挂载了
laminux29
299 天前
@tingfeng1

1.SSH Server OS 与 SSH Client OS 都要设置时间自动更新,建议 1 小时一次。Linux 用 crontab ,Windows 用任务计划就行。

2.对于 OS 为 Linux 的 SSH Client OS ,需要在 Linux SSH Client OS 上设置对 SSH Server OS 的证书免密登录。

3.在 SSH Server OS 创建专门的文件夹,作为 SSHFS 的仓库目录。

4.对于 OS 为 Linux 的 SSH Client OS ,安装 sshfs:
apt install -y sshfs
然后创建测试目录,进行临时挂载远程 SSHFS 目录测试。测试成功后,删除这个测试目录。
最后编辑 /etc/fstab ,实现开机自动挂载。

5.对于 OS 为 Windows 的 SSH Client OS ,按顺序:
安装 WinFSP;
安装 SSHFS-Win;
安装 SSHFS-Win-Manager-Setup;
以上 3 款软件都在 Github 且免费。
tingfeng1
298 天前
@laminux29 非常感谢,想问一下第一条的自动更新是指更新什么
laminux29
298 天前
@tingfeng1 自动更新时间,也就是自动同步时间。

对于 Linux 来说,是让 crontab 每隔 1 小时甚至 1 分钟执行一次:ntpdate -d -v 0.centos.pool.ntp.org

对于 Windows 来说,是加一条计划任务,让系统每隔 1 小时甚至 1 分钟执行一次:w32tm /resync
tingfeng1
298 天前
@laminux29 明白了
Feather0314
249 天前
wsl2 使用的 9p 貌似性能最佳,但是文档少的可怜,linux VM 共享还好,Window VM 弄不成。也不知道咋解决
Feather0314
249 天前
或者有没有人尝试过 virtiofs 。貌似也是一个很好的解决方案
insomnia417
238 天前
unraid 解决方案可能更好 原生 SHFS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/988523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX