Proxmox VE 共享存储方案 - VirtIO-FS 的搭建与配置

前言

博主最近把自己的服务器从 Windows Server 2025 换成了 Debian 13 + Proxmox VE 的组合. 由于先前使用 Windows 的时候, 数据虽然经过分类, 但 Hyper-V 虚拟机和其他数据文件还是处于一个磁盘内的. 于是, 在换到 Proxmox VE 后就有了多虚拟机互通磁盘的需求. 但是, 文件共享的协议有很多种, 配置难度也不尽相同. 这篇文章将会为你介绍 VirtIO-FS 协议, 并教你如何配置.

为什么选择 VirtIO-FS

  • 高性能: 绕过了传统的网络协议栈, 使用共享内存在宿主与虚拟机之间通信, 并直接利用虚拟机的 vCPU 来处理文件操作, 性能无限接近于磁盘原生性能.
  • 高兼容性: 支持 Linux 5.4 以上内核与 Windows, 同时对 POSIX (如符号链接, 硬链接, 权限, 锁等) 协议有高度的支持. (存疑: 部分 AI 貌似不是很赞同对 POSIX 的支持)
  • 高同步性: 一方对文件的修改另一方立即可见
  • 配置简单: 用户友好型, 配置十分简单
  • 生态完美: 在 Proxmox VE 的 Web UI 中可以直接配置 VirtIO-FS 共享, 操作便利, 统一管理

示例环境

  • OS: Debian 13
  • Proxmox VE: Proxmox VE 9.1.2 x86_64

声明

在进行操作之前请确保数据安全性, 在操作过程中造成的的任何数据损失与本文章及创作者无关.


开整

1. 挂载磁盘

  • 使用以下指令列出磁盘列表
ls /dev | grep -i sd

你会看到类似下面的输出

sda
sda1
sdb
sdc
sdc1
sdd
sde
sde1
sdf
sdf1
sdg
sdg1
sdh
sdh1
sdh2
sdh3
sdh4
sdh5
sdh6
其中, sd<letter> 代表的是整个磁盘. 即像 sda 一样的是一整个磁盘. sd<letter><number> 代表的是磁盘上的分区, 即 sda1 代表的是 sda 磁盘上的 1 号分区.
  • 在挂载目录中创建挂载点并挂载磁盘
sudo mkdir /mnt/<diskName>
sudo mount /dev/<partition> /mnt/<diskName>
<diskName>: 分区名称, 可随意填写
<partition>: 分区代号, 如 sda1

注意: 一个挂载点只可挂载一个分区, 而不是一整个磁盘.

  • 确认好分区后, 修改 fstab 以确保分区开机自动挂载

    sudo vim /etc/fstab

    这里可以参考博主的 fstab:

    # =========================
    # System partitions
    # =========================
    
    UUID=b21896ae-beed-4437-aff5-fb211062cbd9 /               ext4    errors=remount-ro 0 1
    UUID=AEDB-EAD3                            /boot/efi       vfat    umask=0077          0 1
    UUID=43b2adb9-e081-4b2b-897d-b2245f93348d /srv            ext4    defaults            0 2
    UUID=6a7e3626-1e06-4896-9248-55189d9702c3 /var            ext4    defaults            0 2
    UUID=c32ce32a-417f-465a-b26d-12c9e9d67a70 none            swap    sw                  0 0
    
    
    # =========================
    # Data partitions (NTFS)
    # =========================
    
    UUID=2E26E857F9477815 /mnt/Data         ntfs3 defaults,noatime,uid=1000,gid=1000,nofail 0 0
    UUID=20E085F238CE9570 /mnt/BrokenDisk   ntfs3 defaults,noatime,uid=1000,gid=1000,nofail 0 0
    UUID=51F8DF7BA9CECE74 /mnt/BackupData   ntfs3 defaults,noatime,uid=1000,gid=1000,nofail 0 0
    UUID=FB426E0A0790E389 /mnt/Media        ntfs3 defaults,noatime,uid=1000,gid=1000,nofail 0 0
    UUID=99ABE9C8F7DF98C7 /mnt/FileStorage  ntfs3 defaults,noatime,uid=1000,gid=1000,nofail 0 0
  • 关闭即将要操作的虚拟机, 保存好后输入以下命令来生效更改
sudo systemctl daemon-reload
sudo mount -a
  • 如果没有报错, 那么挂载磁盘就成功了

注: 如果你的分区文件系统为 NTFS, 且在关闭虚拟机之前一直处于直通状态, 那么你可能会遇到无法挂载的情况, 如图 1-1 所示

图 1-1
图 1-1

如果遇到了这种情况, 可以使用以下命令进行修复:

sudo ntfsfix -d /dev/<partition>

2. 添加 VirtIO-FS 节点

  • 登录 Proxmox VE Web UI, 定位到 datacenter(数据中心), 找到 Directory Mappings(目录映射), 如图 2-1
    图2-1
    图2-1
  • 点击 Add(添加), 按需填写参数, 添加 VirtIO-FS 节点. 可以参考如图 2-2 所示博主的配置
    图 2-2
    图 2-2
  • 填写完信息后点击 Create(创建), 即可完成 VirtIO-FS 节点的创建
  • 定位到你想操作的虚拟机的硬件页面, 如图 2-3 所示
    图 2-3
    图 2-3
  • 点击 Add(添加) --> Virtiofs, 添加你期望的 VirtIO-FS 节点

    注: 一般情况下无需改动参数, 在你修改参数之前请明白自己在做什么并了解后果.

3. 修改虚拟机挂载点

  • 启动虚拟机, 使用以下命令打开 fstab
sudo vim /etc/fstab
  • 按照如下格式挂载磁盘
<mapName>  </path/to/mountPoint>   defaults,nofail    0 0

注意:

  • 请勿在挂载参数后填写 uid 以及 gid, 因为 VirtIO-FS 默认是不接受用户及用户组参数的, 如果填写了会导致挂载失败.
  • VirtIO 的权限指标完全遵从宿主机. 如果你想确保虚拟机有足够的权限访问盘内文件, 那么请将该用户的 uid 以及 gid 修改为与宿主机挂载磁盘使用的用户的对应参数相同

这里可以参考博主的配置:

FileStorage     /mnt/FileStorage        virtiofs        defaults,nofail 0 0
Data            /mnt/Data               virtiofs        defaults,nofail 0 0
Media           /mnt/Media              virtiofs        defaults,nofail 0 0
BackupData      /mnt/BackupData         virtiofs        defaults,nofail 0 0
  • 保存后使用该命令进行挂载
sudo mount -a

如没有报错信息, 则证明挂载成功.


结语

  • 感谢阅读, 如果你觉得有用, 请分享给有需要的人
  • 博主并非专业人士, 如有错误与疏漏, 欢迎提出!
Proxmox VE 共享存储方案 - VirtIO-FS 的搭建与配置
https://blog.nanami.tech/archives/200/
本文作者 Madobi Nanami
发布时间 2025-12-24
许可协议 CC BY-NC-SA 4.0
发表新评论