Proxmox VM Environment Storage 以及挂载

Proxmox (aka. PVE) 最直观的查看storage情况的途径就是WebUI。然而有的时候这个 WebUI有一些限制,比如具体挂载是怎么实现的,以及如何清楚的去除一个 storage,都不是很清楚。这篇文章算是个人摸索 Proxmox 在 Storage 方面的一些使用经验。

storage.cfg

Web UI 上面显示的 storage,是直接由这个 storage config file 决定的:

# Path:
/etc/pve/storage.cfg

# Example content
dir: local
        path /var/lib/vz
        content vztmpl,iso,rootdir
        prune-backups keep-all=1
        shared 0

zfspool: local-zfs
        pool rpool/data
        content images,rootdir
        sparse 1

zfspool: dpool
        pool dpool
        content images,rootdir
        mountpoint /dpool
        nodes pve

pbs: pbs
        datastore hdd-WD-4T-Red
        server 10.0.0.252
        content backup
        fingerprint <finger_print>
        prune-backups keep-all=1
        username root@pam

我这里给出的例子包括了三类,共4个存储

  • dir类:就是直接的文件系统挂载,这类就是支持QCOW2这种image的选择。有时我们也用这个类型存备份已经系统安装镜像。这里的 local 就是安装 Proxmox的时候,ZFS 直接给我们的,在 root 磁盘上面划分出来的。
    • 这给类别对新手最友好
    • 因为底层是 ZFS,但是因为已经是FS,而不是 block storage,所以需要跟 zvol 区分。
  • zfspool 类:这类实际上是 zvol,所以依旧是块存储而不是文件系统。主要是给 VM 做 image 用。不过实际使用中要慎重,很可能性能坑爹还可能有严重的写入放大。
  • pbs类:这类实际上是一个远程的 Proxmox Backup Server 服务器,就是做备份用的。这里的Fingerprint 应该是在创建这个 storage的时候填入的。

以上没有涉及 LVM 以及 LVM-thin,这两个其实也是块存储,使用方面可能类似 ZVOL (aka zfspool)。而且相对ZFS的ZVOL,LVM更是久经考验,如果担心写入放大,担心性能问题,而且有良好备份的话,用LVM应该是更稳妥的选择。

这个文件的删除,是需要使用PVE提供的CLI来做的,参考链接

简单来说要用:

pvesm remove <STORAGE_ID>

STORAGE_ID这里就是storage 的名字。至于常规的改动,应该能用WebUI就用WebUI。现在的版本可能连删除都可以在 WebUI里面做了。

Directory Mount 目录挂载

但是目前我们还没说目录是怎么挂载的。这部分只是针对于 DIR 类的storage。

Proxmox 没有用比较老旧的 /etc/fstab 来管理挂载,而是用了 SystemD,这样,目录挂载的处理跟一般的服务实际上是等同处理的。

这部分挂载的配置在 /etc/systemd/system/ 目录下,比如我之前有一个 storage, 是本地磁盘 EXT4 普通 DIR的挂载。其配置文件就在:

cat /etc/systemd/system/mnt-pve-hdd\\x2d4T\\x2dWD\\x2dRed.mount 

注意这里的 mnt-pve-hdd\\x2d4T\\x2dWD\\x2dRed.mount 应该就是 mnt-pve-hdd_4T_WD_Red.mount. 这里 hdd_4T_WD_Red 是我的storage 的名称。

打开这个文件,其内容大体是

[Install]
WantedBy=multi-user.target

[Mount]
Options=defaults
Type=ext4
What=/dev/disk/by-uuid/<UUID_xxx>
Where=/mnt/pve/hdd-4T-WD-Red

[Unit]
Description=Mount storage 'hdd-4T-WD-Red' under /mnt/pve

这里我们可以看到,这个 mount 操作,在每次启动时,是需要在 multi-user.target 这一节点前完成的。而Proxmox里面那些需要disk mount的服务,都会在 multi-user.target 之后才运行。

因为不用 /etc/fstab,所以不要尝试修改fstab来调整启动时磁盘的挂载。如果需要调整,也要用 systemD 的命令行 systemctl 来调整。

比如,启用一个挂载(比如你有一个硬盘,换到另一个 Proxmox 机器上,然后你需要把这个硬盘添加进 Proxmox 的storage,同时你要保留原有数据所以不能format)

systemctl enable mnt-pve-hdd\\x2d4T\\x2dWD\\x2dRed.mount

或者,如果要停用一个挂载(比如你要把原本在当前Proxmox上面的一个硬盘拿走,在删除了这个storage 以后,你还要停止这个磁盘的挂载)

systemctl disable mnt-pve-hdd\\x2d4T\\x2dWD\\x2dRed.mount

总结

  • storage.cfg 直接对应UI
    • 其内容修改,最好用web UI或者 pvesm 命令。尽量不要手动直接修改。
  • Directory的挂载是通过 SystemD (systemctl)完成的。所以其调整是通过修改systemctl的config文件以及sytemctl来控制的。
    • 其他一些storage类型可能也是类似的,但是没有特别研究了。