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

186 天前
 fonlan

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

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

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

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

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

NFS 与 SMB ,主要是部署不方便,如果不组虚拟局域网,异地访问很麻烦,而且安全性也有问题。
fonlan
185 天前
@freechuzhuo 我现在用的就是类似的命令,不过因为我用的不是 LXC 容器,是虚拟机所以我是用`qm set 104 --virtio1 /dev/disk/by-id/ata-xxx`这种命令直接把硬盘挂载到虚拟机上去的,但这样的话这块硬盘只有这个虚拟机能用,我现在是想把这块硬盘再共享给其他虚拟机
fonlan
185 天前
@laminux29 主要对 NFS 能达到的性能不太了解,网上搜到的一个测试结果是千兆内网下只能达到 11MB 的写入速度,虽然不太相信只能到这么点速度但还是想先找找有没有别的 PVE 原生不依赖网络的共享方法😅
allplay
185 天前
PXE 里面开一个 LXC ,专门映射磁盘,给虚拟机内所有的 LXC 或 docker 使用
laminux29
185 天前
@fonlan 建议使用 SSHFS ,各种特性综合起来没有短板的选手,可以代替 SMB 、NFS 。
bt7vip
185 天前
我的存储管理方案
硬盘挂载到 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
185 天前
@bt7vip #10 嗯,又查了一圈,似乎内网不加密的情况下确实是 NFS 性能最好,我暂时不需要 SAMBA 和 FTP ,我内网用的更多的是 Webdav ,感觉性能比 SAMBA 好
tingfeng1
29 天前
@laminux29 打扰一下,请问是不是服务端打开 ssh server, 然后客户端装个 sshfs ,就可以挂载了
laminux29
28 天前
@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
28 天前
@laminux29 非常感谢,想问一下第一条的自动更新是指更新什么
laminux29
27 天前
@tingfeng1 自动更新时间,也就是自动同步时间。

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

对于 Windows 来说,是加一条计划任务,让系统每隔 1 小时甚至 1 分钟执行一次:w32tm /resync
tingfeng1
27 天前
@laminux29 明白了

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

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

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

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

© 2021 V2EX