Chapter 07 · Proxmox VE Storage

第 7 章 Proxmox VE 存储

7.Proxmox VE 存储 Proxmox VE Storage

Proxmox VE 的存储模型极为灵活。虚拟机镜像既可以保存在一个或多个本地存储上 , 也可以放在共享存储(如 NFS、 iSCSI、 NAS、 SAN)上。不设上限 , 可配置任意多的存储池 , 并支持 Debian Linux 下所有可用的存储技术。

把 VM 放在共享存储上的一大好处是 :可在 零停机 的情况下在线迁移运行中的机器 —— 所有节点都能直接访问 VM 磁盘镜像 , 无需复制镜像数据 , 因此实时迁移非常快。

存储库(libpve-storage-perl)采用灵活的插件体系 , 对所有存储类型提供统一接口 , 便于后续扩展。

7.1.存储类型 Storage Types

存储类型基本分为两大类:

文件级存储(File level storage)
基于文件级的存储技术允许访问功能完备的 POSIX 文件系统 , 通常比块级存储更灵活 , 可存储任意类型的内容。 ZFS 可能是其中最先进的 , 完整支持快照与克隆。
块级存储(Block level storage)
可存放大块原始镜像。通常不能在这类存储上保存其他文件(ISO、备份等)。大多数现代块级存储实现支持快照与克隆。 Ceph RADOS 是一种分布式系统 , 将数据复制到不同节点并可作为 RBD 访问。

表 2 :可用存储类型

描述插件类型层级共享快照稳定
ZFS(本地)zfspoolboth 1noyesyes
目录dirfilenoyes 2yes
BTRFSbtrfsfilenoyesTP 5
NFSnfsfileyesyes 2yes
CIFScifsfileyesyes 2yes
Proxmox Backuppbsbothyesn/ayes
CephFScephfsfileyesyesyes
LVMlvmblockno 3yes 4yes
LVM-thinlvmthinblocknoyesyes
iSCSI/kerneliscsiblockyesnoyes
iSCSI/libiscsiiscsidirectblockyesnoyes
Ceph/RBDrbdblockyesyesyes
ZFS over iSCSIzfsblockyesyesyes

1 VM 磁盘镜像存于 ZFS 卷(zvol)数据集 , 提供块设备能力。 2 在基于文件的存储上 , 快照通过 qcow2 内建快照能力或 「卷链快照」实现(见 4)。 3 可以在 iSCSI 或 FC SAN 上叠加 LVM , 从而获得共享 LVM 存储。 4 自 Proxmox VE 9 起 , VM 可用基于卷链的快照 , 将快照数据独立成卷并层叠 , 详见 LVM 配置节。 5 技术预览 , 尽力支持。

7.1.1.精简置备 Thin Provisioning

多种存储以及 QEMU 的 qcow2 格式支持 精简置备。启用后只有客户机实际写入的块才会落到存储上。

例如创建一台有 32 GB 磁盘的 VM, 装完客户机操作系统后根文件系统只用了 3 GB , 那么存储端也只占用 3 GB , 尽管客户机看到的仍是 32 GB 磁盘。这样可创建大于可用块数的磁盘镜像 , 有需要时再扩容存储 , 而无需调整 VM 内部文件系统。

所有具备 「Snapshots」能力的存储类型也都支持精简置备。

WARN

若存储写满 , 使用该存储上卷的客户机都会收到 I/O 错误 , 可能导致文件系统不一致甚至数据损坏。建议避免过度置备 , 或密切监控可用空间。

7.2.存储配置 Storage Configuration

所有 Proxmox VE 相关存储配置保存在单一文本文件 /etc/pve/storage.cfg。由于它位于 /etc/pve/ 下 , 会自动复制到集群所有节点 , 因此所有节点共享同一份存储配置。

对共享存储这显然合理;对本地存储同样有用 —— 每个节点上都会存在该配置 , 但物理上独立 , 内容可完全不同。

7.2.1.存储池 Storage Pools

每个存储池有一个 <type>, 并以 <STORAGE_ID> 唯一标识。配置形如:

<type>: <STORAGE_ID>
        <property> <value>
        <property> <value>
        <property>
        ...

<type>: <STORAGE_ID> 行开始定义 , 后续为属性列表;多数属性需要值 , 部分有合理默认 , 此时可省略值。

安装后默认配置包含一个名为 local 的特殊存储池 , 指向 /var/lib/vz 且始终可用。安装器会根据安装时所选存储类型额外创建其他存储条目。

默认 /etc/pve/storage.cfg

dir: local
        path /var/lib/vz
        content iso,vztmpl,backup

# 基于 LVM 安装时的默认镜像存储
lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

# 基于 ZFS 安装时的默认镜像存储
zfspool: local-zfs
        pool rpool/data
        sparse
        content images,rootdir
WARN

多个存储配置指向同一底层存储会造成问题 —— 这种 「别名」配置会导致两个不同的 volid 指向同一磁盘镜像 , 而 Proxmox VE 假定卷 ID 与镜像一一对应。为不同内容类型使用别名配置尚可接受 , 但不推荐。

7.2.2.通用存储属性 Common Storage Properties

不同存储类型共用的若干属性:

nodes
此存储可用 / 可访问的集群节点名列表 , 用于限定存储的可用范围。
content
存储可承载的内容类型(虚拟磁盘镜像、 cdrom iso、容器模板、容器根目录等)。并非所有类型都支持所有内容。可选值 : images(QEMU/KVM 镜像)、 rootdir(容器数据)、 vztmpl(容器模板)、 backup(vzdump 备份)、 iso、 snippets(如客户机 hook 脚本)。
shared
标记为 「在所有节点(或 nodes 中列出的节点)上内容相同的单一存储」。它 不会 使本地存储自动对其他节点可见 , 仅是对已共享的存储做标注。
disable
完全禁用该存储。
prune-backups
备份保留策略 , 详见「备份保留」章节。
format
默认镜像格式(raw|qcow2|vmdk)。
preallocation
基于文件的存储中 raw / qcow2 预分配模式(off|metadata|falloc|full), 默认 metadata(对 raw 等同于 off)。配合网络存储与较大 qcow2 镜像时 , off 可避免超时。
WARN

不建议在多个 Proxmox VE 集群中共用同一存储池。某些存储操作需要独占访问 , 集群内能正确加锁 , 但跨集群锁无效。

7.3.卷 Volumes

我们使用特殊记法寻址存储数据 :卷由 <STORAGE_ID>、冒号、以及依赖于具体存储类型的卷名组成。合法示例:

local:230/example-image.raw
local:iso/debian-501-amd64-netinst.iso
local:vztmpl/debian-5.0-joomla_1.5.9-1_i386.tar.gz
iscsi-storage:0.0.2.scsi-14f504e46494c4500494b5042546d2d646744372d31616d61

获取卷在文件系统中的路径:

pvesm path <VOLUME_ID>

7.3.1.卷的属主关系 Volume Ownership

image 类型卷存在属主关系 —— 每个卷都归属某 VM 或容器。例如 local:230/example-image.raw 属于 VM 230。大多数后端将属主信息编码在卷名中。

删除 VM 或容器时 , 其名下所有关联卷都会被一并删除。

7.4.使用命令行界面 Using the Command-line Interface

建议您熟悉存储池与卷 ID 的底层概念 , 但实际使用中通常不需要手动执行底层操作 —— VM 与容器管理工具会完成分配和释放。尽管如此 , 命令行工具 pvesm(「Proxmox VE Storage Manager」)可胜任常见存储管理任务。

7.4.1.示例 Examples

添加存储池

pvesm add <TYPE> <STORAGE_ID> <OPTIONS>
pvesm add dir <STORAGE_ID> --path <PATH>
pvesm add nfs <STORAGE_ID> --path <PATH> --server <SERVER> --export <EXPORT>
pvesm add lvm <STORAGE_ID> --vgname <VGNAME>
pvesm add iscsi <STORAGE_ID> --portal <HOST[:PORT]> --target <TARGET>

禁用 / 启用 / 修改 / 删除存储池

pvesm set <STORAGE_ID> --disable 1
pvesm set <STORAGE_ID> --disable 0
pvesm set <STORAGE_ID> <OPTIONS>
pvesm set <STORAGE_ID> --shared 1
pvesm set local --format qcow2
pvesm set <STORAGE_ID> --content iso
pvesm remove <STORAGE_ID>

remove 仅移除存储配置 , 不删除数据 , 也不执行卸载 / 断开。

分配 / 释放卷

pvesm alloc <STORAGE_ID> <VMID> <name> <size> [--format <raw|qcow2>]
pvesm alloc local <VMID> '' 4G
pvesm free <VOLUME_ID>
WARN

pvesm free 会真正销毁卷内数据。

列出状态与内容

pvesm status
pvesm list <STORAGE_ID> [--vmid <VMID>]
pvesm list <STORAGE_ID> --vmid <VMID>
pvesm list <STORAGE_ID> --content iso
pvesm list <STORAGE_ID> --content vztmpl
pvesm path <VOLUME_ID>

卷导出(多用于 pvesm import 内部;导出流的 qcow2+size 格式不等同于 qcow2 , 导出文件不能直接挂到 VM):

pvesm export local:103/vm-103-disk-0.qcow2 qcow2+size target --with-snapshots 1

7.5.目录后端 Directory Backend

存储池类型 : dir

Proxmox VE 可将本地目录或本地挂载的共享用作存储。目录是文件级存储 , 可承载任意内容类型(虚拟磁盘、容器、模板、 ISO、备份等)。

NOTE

可通过 /etc/fstab 挂载其他存储 , 再为挂载点定义目录存储 —— 这样即可使用 Linux 支持的任意文件系统。

该后端只假定底层目录与 POSIX 兼容 , 意味着 存储级别无法做快照; 但对 qcow2 格式 VM 镜像可借助其内建快照能力绕开。

NOTE

部分存储类型不支持 O_DIRECT , 因此不能在其上使用 cache=none , 请改用 writeback。

所有文件级存储后端使用如下默认目录布局:

内容类型子目录
VM 镜像images/<VMID>/
ISO 镜像template/iso/
容器模板template/cache/
备份文件dump/
Snippetssnippets/

7.5.1.配置 Configuration

支持全部通用存储属性 , 并增加两个:

path
目录的绝对文件系统路径。
content-dirs(可选)
覆盖默认布局 , 逗号分隔列表形式 vtype=path , 其中 vtype 为允许的内容类型之一 , path 是相对于存储挂载点的路径。

配置示例

dir: backup
        path /mnt/backup
        content backup
        prune-backups keep-last=7
        max-protected-backups 3
        content-dirs backup=custom/backup/dir

上例定义名为 backup 的存储池 , 每台 VM 可存 7 份常规备份与 3 份受保护备份;备份实际路径为 /mnt/backup/custom/backup/dir/...。

7.5.2.文件命名约定 File naming conventions

vm-<VMID>-<NAME>.<FORMAT>
<VMID>
所属 VM。
<NAME>
不含空白的任意 ASCII 名;默认 disk-[N], 其中 [N] 为保持唯一的整数。
<FORMAT>
镜像格式(raw|qcow2|vmdk)。

将 VM 转为模板后 , 所有镜像会被改名以示只读(作为克隆基镜像):

base-<VMID>-<NAME>.<FORMAT>
NOTE

基镜像用于生成克隆 , 必须保持只读。后端会把访问模式改为 0444, 如果底层存储支持还会置 immutable 标志(chattr +i)。

7.5.3.存储特性 Storage Features

多数文件系统本身不支持快照 , 后端借助 qcow2 内建快照能力;克隆同样使用 qcow2 基镜像特性。

内容类型镜像格式共享快照克隆
images rootdir vztmpl iso backup snippetsraw qcow2 vmdk subvolnoqcow2qcow2

7.5.4.示例 Examples

# pvesm alloc local 100 vm-100-disk10.raw 4G
Formatting '/var/lib/vz/images/100/vm-100-disk10.raw', fmt=raw size=4294967296
successfully created 'local:100/vm-100-disk10.raw'

# pvesm path local:100/vm-100-disk10.raw
/var/lib/vz/images/100/vm-100-disk10.raw

# pvesm free local:100/vm-100-disk10.raw

7.6.NFS 后端 NFS Backend

存储池类型 : nfs

NFS 后端基于目录后端 , 共享其大部分特性 , 目录布局与文件命名约定一致。主要优势是可直接在配置中指定 NFS 服务器属性 , 由后端自动挂载 , 无需编辑 /etc/fstab; 后端还可探测服务器是否在线 , 并查询其已导出的共享。

7.6.1.配置 Configuration

支持通用存储属性(shared 总为开启), 并添加:

server
服务器 IP 或 DNS 名。为避免 DNS 延迟 , 通常首选 IP(除非 DNS 极其可靠 , 或已写入本地 /etc/hosts)。
export
NFS 导出路径(可通过 pvesm nfsscan 列出)。
path
本地挂载点(默认 /mnt/pve/<STORAGE_ID>/)。
content-dirs
覆盖默认目录布局 , 可选。
options
NFS 挂载选项(见 man nfs)。

配置示例

nfs: iso-templates
        path /mnt/pve/iso-templates
        server 10.0.0.10
        export /space/iso-templates
        options vers=3,soft
        content iso,vztmpl
NOTE

NFS 请求超时后默认无限重试 , 可能导致客户端长时间挂起。对只读内容可考虑使用 soft 选项 , 把重试限制为 3 次。

7.6.2.存储特性 Storage Features

NFS 本身不支持快照 , 后端通过 qcow2 特性实现快照与克隆。

内容类型镜像格式共享快照克隆
images rootdir vztmpl iso backup snippetsraw qcow2 vmdkyesqcow2qcow2

7.6.3.示例 Examples

# pvesm scan nfs <SERVER>

7.7.CIFS 后端 CIFS Backend

存储池类型 : cifs

CIFS 后端扩展了目录后端 , 免去手动挂载 CIFS 的麻烦。可通过 Proxmox VE API 或 Web UI 直接添加这类存储 , 享受服务器心跳检查、便捷导出共享选择等后端优势。

7.7.1.配置 Configuration

支持通用存储属性(shared 总为开启), 并额外提供:

server
必填。服务器 IP 或 DNS 名(建议使用 IP 以避免解析延迟)。
share
必填。要使用的 CIFS 共享(可由 pvesm scan cifs 或 Web UI 列出)。
username / password
可选。默认用户名为 guest; 密码存于仅 root 可读的 /etc/pve/priv/storage/<STORAGE_ID>.pw。
domain
用户域(工作组), 可选。
smbversion
SMB 协议版本 , 默认 3; 出于安全 不支持 SMB1。
path
本地挂载点 , 默认 /mnt/pve/<STORAGE_ID>/。
content-dirs / options
目录布局覆盖 / 额外 CIFS 挂载选项(见 man mount.cifs)。 Proxmox VE 会自动设置 soft , 以及根据配置自动设置 username、 credentials、 guest、 domain、 vers, 这些不应手动设置。
subdir
要挂载的共享子目录 , 默认为共享根。

配置示例

cifs: backup
        path /mnt/pve/backup
        server 10.0.0.11
        share VMData
        content backup
        options noserverino,echo_interval=30
        username anna
        smbversion 3
        subdir /data

7.7.2.存储特性 Storage Features

CIFS 存储级不支持快照 , 可借助 qcow2 后备文件获得快照与克隆能力。

内容类型镜像格式共享快照克隆
images rootdir vztmpl iso backup snippetsraw qcow2 vmdkyesqcow2qcow2

7.7.3.示例 Examples

# pvesm scan cifs <SERVER> [--username <USERNAME>] [--password]
# pvesm add cifs <STORAGE_ID> --server <SERVER> --share <SHARE> [--username <USERNAME>] [--password]

7.8.Proxmox Backup Server Proxmox Backup Server

存储池类型 : pbs

此后端把 Proxmox Backup Server 像普通存储一样直接集成到 Proxmox VE。可通过 API、 CLI 或 Web 界面添加。

7.8.1.配置 Configuration

支持通用存储属性(shared 总为开启), 并额外提供:

server
必填 , 服务器 IP 或 DNS 名。
port
可选 , 默认 8007。
username
必填。注意 必须包含 realm, 如 root@pam、 archiver@pbs。
password
必填 , 保存在仅 root 可读的 /etc/pve/priv/storage/<STORAGE_ID>.pw。
datastore
必填 , 目标 PBS datastore 的 ID。
fingerprint
PBS API TLS 证书指纹。自签证书或主机不信任其 CA 时必填 , 可在 PBS Dashboard 或 proxmox-backup-manager cert info 获取。
encryption-key
客户端加密备份数据所用密钥。当前仅支持无口令保护(不含 KDF)。保存在 /etc/pve/priv/storage/<STORAGE_ID>.enc。特殊值 autogen 会调用 proxmox-backup-client key create --kdf none 自动生成。
master-pubkey
用于加密备份 AES 密钥的 RSA 公钥。加密后的密钥副本会附加在每次备份中并存于 PBS 上 , 便于灾难恢复。保存在 /etc/pve/priv/storage/<STORAGE_ID>.master.pem, 需配合 encryption-key 使用。

配置示例

pbs: backup
        datastore main
        server enya.proxmox.com
        content backup
        fingerprint 09:54:ef:..snip..:88:af:47:fe:4c:3b:cf:8b:26:88:0b:4e:3c:b2
        prune-backups keep-all=1
        username archiver@pbs
        encryption-key a9:ee:c8:02:13:..snip..:2d:53:2c:98
        master-pubkey 1

7.8.2.存储特性 Storage Features

PBS 仅存储备份 , 可分为块级(VM)与文件级(容器)。

内容类型镜像格式共享快照克隆
backupn/ayesn/an/a

7.8.3.加密 Encryption

PBS 客户端加密流程

可选配置 AES-256-GCM 客户端加密。可通过 Web 界面或 CLI 的 encryption-key 选项启用。密钥保存在仅 root 可访问的 /etc/pve/priv/storage/<STORAGE_ID>.enc。

WARN

没有密钥就无法访问备份。 务必把密钥妥善保存在与被备份内容 分离 的地方。若把整个系统的密钥放在该系统本身 , 一旦系统损坏需恢复 , 密钥也会随之丢失。

建议把密钥保存在便于恢复的安全位置 —— 最佳位置是密码管理器;并可将密钥写入 U 盘放入保险柜作为备份;极端情况下还可把密钥打印为纸本锁存。 paperkey 子命令可生成 QR 编码版本:

# proxmox-backup-client key paperkey /etc/pve/priv/storage/<STORAGE_ID>.enc --output-format text > qrkey.txt

此外可使用单个 RSA master key pair 做密钥恢复 :所有执行加密备份的客户端配置同一公共 master 公钥 , 每次加密备份将随附一份用该公钥加密的 AES 密钥副本。保存好对应的 master 私钥 , 即便客户端系统已无法访问 , 仍能恢复 AES 密钥并解密备份。

WARN

master key 的保管规则与普通加密密钥相同 —— 没有私钥就无法恢复! paperkey 同样支持为 master 私钥生成纸质副本。

加密由客户端管理 , 因此同一个 PBS datastore 可同时存放未加密与使用不同密钥加密的备份;但不同密钥间 无法去重 , 通常建议为它们使用不同 datastore。

NOTE

若场景不需要(例如本地可信网络中运行), 请避免使用加密 —— 从未加密的备份恢复总是更简单。

7.8.4.示例 :通过 CLI 添加存储 Example: Add Storage over CLI

# pvesm scan pbs <SERVER> <USERNAME> [--password <PWD>] [--fingerprint <FP>]
# pvesm add pbs <STORAGE_ID> --server <SERVER> --datastore <DS> --username <USER> --fingerprint 00:B4:... --password

7.9.本地 ZFS 池后端 Local ZFS Pool Backend

存储池类型 : zfspool

该后端允许访问本地 ZFS 池(或池内的 ZFS 文件系统)。

7.9.1.配置 Configuration

支持通用属性 content、 nodes、 disable, 以及 ZFS 专属:

pool
指定 ZFS 池 / 文件系统 , 所有分配都发生其中。
blocksize
ZFS 块大小。
sparse
启用 ZFS 精简置备(卷保留量小于卷大小的稀疏卷)。
mountpoint
ZFS 池 / 文件系统的挂载点。修改此值不会影响 zfs 视角下的 dataset 挂载点属性;默认 /<pool>。

配置示例

zfspool: vmdata
        pool tank/vmdata
        content rootdir,images
        sparse

7.9.2.文件命名约定 File naming conventions

vm-<VMID>-<NAME>      // 普通 VM 镜像
base-<VMID>-<NAME>    // 模板 VM 镜像(只读)
subvol-<VMID>-<NAME>  // 容器 subvolume(ZFS 文件系统)

7.9.3.存储特性 Storage Features

ZFS 在快照与克隆方面可能是最先进的。 VM 镜像(raw)与容器数据(subvol)均以 ZFS dataset 承载 , 属性从父 dataset 继承 , 便于集中设置默认值。

内容类型镜像格式共享快照克隆
images rootdirraw subvolnoyesyes

7.9.4.示例 Examples

# zfs create tank/vmdata
# zfs set compression=on tank/vmdata
# pvesm scan zfs

7.10.LVM 后端 LVM Backend

存储池类型 : lvm

LVM 是位于磁盘与分区之上的轻量软件层 , 可把可用空间划分为较小的逻辑卷。另一典型用法是把 LVM 放在一个大的 iSCSI LUN 或 FC SAN 之上 —— 借此能方便地管理 LUN 内空间 , 而 iSCSI 协议本身并未定义空间分配的管理接口。

7.10.1.配置 Configuration

支持通用属性 , 并额外:

vgname
LVM 卷组名 , 必须指向已存在的卷组。
base
基卷。访问存储前自动激活 , 主要在卷组位于远程 iSCSI 时有用。
saferemove
Web UI 中的 「Wipe Removed Volumes」。删除 LV 时清零数据 , 防止新 LV 读取到残留 , 代价较高。支持 「write zeroes」的设备会使用 blkdiscard , 否则回退到 cstream。
saferemove-stepsize
清零步长(MiB , blkdiscard -p), 受底层上限约束 , 默认上限 32 MiB。
saferemove_throughput
清零吞吐(cstream -t), 默认最高 10 MiB/s。
snapshot-as-volume-chain
为 LVM 虚拟机启用 卷链快照。开启后 , 打快照会把当前状态固化为以该快照名命名的卷 , 并启动一个以该快照为后备的新卷。基于快照的新卷仅记录与后备卷的差异;当前快照卷是 厚置备 的 LVM LV。

此设计避开了原生 LVM 快照的重大 I/O 惩罚以及空间耗尽时的危险行为 , 在任意支持块存储的系统(包括 iSCSI 与 FC SAN)上都可用。虽然底层借助 qcow2 的 后备链 能力 , 但 不 使用 qcow2 自身的快照功能 —— 快照由 PVE 存储层管理。该开关仅影响新创建的虚拟磁盘卷。要高效支持卷链快照 , 底层存储应支持精简置备与 discard —— 每个快照在 PVE 侧看起来占用完整卷大小 , 但在底层占用会相应减小。

NOTE

卷链快照目前在 Proxmox VE 中为 技术预览。

配置示例

lvm: myspace
        vgname myspace
        content rootdir,images

7.10.2.文件命名约定 File naming conventions

基本与 ZFS 池后端一致:

vm-<VMID>-<NAME>      // 普通 VM 镜像

7.10.3.存储特性 Storage Features

LVM 属典型块存储。遗憾的是 , 原生 LVM 快照效率较低 —— 活动期间会干扰整个卷组上的所有写操作 , 造成 I/O 严重降级。因此 LVM 不支持链式克隆 , Proxmox VE 为此加入了 「卷链快照」。

LVM 的好处是可配合共享存储(如 iSCSI LUN)使用;当配置中标记 shared 时 , 后端实现了正确的集群级锁。

NOTE

对非共享本地存储 , 可用 LVM-thin 后端 —— 它支持快照与链式克隆。

内容类型镜像格式共享快照完整克隆链式克隆
images rootdirraw, qcow2possibleyes 1yes—

1 自 Proxmox VE 9 起 VM 可用卷链快照 , 详见 7.10.1。

7.10.4.示例 Examples

# pvesm scan lvm

7.11.LVM-thin 后端 LVM thin Backend

存储池类型 : lvmthin

LVM 通常在卷创建时分配块 ; LVM thin 池则在写入时才分配块 —— 这即 「精简置备」, 卷可远大于物理可用空间。管理可用标准 LVM CLI(详见 man lvmthin)。假设已有卷组 pve , 下列命令创建一个 100 GB 的 thin 池 data:

lvcreate -L 100G -n data pve
lvconvert --type thin-pool pve/data

7.11.1.配置 Configuration

vgname
LVM 卷组名。
thinpool
LVM thin 池名。

配置示例

lvmthin: local-lvm
        thinpool data
        vgname pve
        content rootdir,images

7.11.2.文件命名约定 File naming conventions

vm-<VMID>-<NAME>      // 普通 VM 镜像

7.11.3.存储特性 Storage Features

LVM thin 是块存储 , 高效支持快照与克隆;新卷自动清零。 thin 池不能跨节点共享 , 只能作为本地存储。

内容类型镜像格式共享快照克隆
images rootdirrawnoyesyes

7.11.4.示例 Examples

# pvesm scan lvmthin pve

7.12.Open-iSCSI initiator Open-iSCSI initiator

存储池类型 : iscsi

iSCSI 是使用广泛的存储连接技术 , 几乎所有存储厂商均支持 , 也有开源 target 方案(如基于 Debian 的 OpenMediaVault)。使用本后端需安装 open-iscsi 包(Debian 标准包 , 默认未装以节省资源):

# apt-get install open-iscsi

底层 iSCSI 管理任务可用 iscsiadm。

7.12.1.配置 Configuration

portal
iSCSI portal(IP 或 DNS 名 , 可选端口)。
target
iSCSI target。

配置示例

iscsi: mynas
        portal 10.10.10.1
        target iqn.2006-01.openfiler.com:tsn.dcb5aaaddd
        content none
NOTE

若打算在 iSCSI 之上叠加 LVM , 合理做法是设 content none, 以防直接用 iSCSI LUN 创建 VM。

7.12.2.文件命名约定 File naming conventions

iSCSI 协议未定义数据分配 / 删除接口 , 此类操作需在 target 侧完成且厂商相关。 target 只是把 LUN 编号导出 , 因此 Proxmox VE 的 iSCSI 卷名只编码了 Linux 内核视角下的 LUN 信息。

7.12.3.存储特性 Storage Features

iSCSI 是块存储 , 无管理接口 —— 通常最好把一个大 LUN 暴露出来并在其上构建 LVM。

内容类型镜像格式共享快照克隆
images nonerawyesnono

7.12.4.示例 Examples

pvesm scan iscsi <HOST[:PORT]>

7.13.用户态 iSCSI 后端 User Mode iSCSI Backend

存储池类型 : iscsidirect

功能与 Open-iSCSI 后端基本相同 , 但以用户态库实现 , 需安装 libiscsi-bin。不涉及内核驱动 , 可视为性能优化;代价是 不能在其上叠加 LVM, 所有空间分配都要在存储服务器侧管理。

7.13.1.配置 Configuration

配置项与 Open-iSCSI 相同。 示例:

iscsidirect: faststore
        portal 10.10.10.1
        target iqn.2006-01.openfiler.com:tsn.dcb5aaaddd

7.13.2.存储特性 Storage Features

NOTE

该后端 仅支持虚拟机 , 容器无法使用。

内容类型镜像格式共享快照克隆
imagesrawyesnono

7.14.Ceph RADOS 块设备(RBD) Ceph RADOS Block Devices (RBD)

存储池类型 : rbd

Ceph 是一种分布式对象存储 / 文件系统 , 致力于出色的性能、可靠性与可扩展性。 RADOS 块设备实现了功能丰富的块级存储 , 具备:

  • 精简置备
  • 可变大小卷
  • 分布式、冗余(在多个 OSD 上条带)
  • 完整快照与克隆
  • 自我修复
  • 无单点故障
  • 可扩展至 EB 级
  • 提供内核与用户态实现
NOTE

小规模部署下 , Ceph 服务可直接与 Proxmox VE 节点合部署。现代硬件 CPU / 内存充裕 , 同节点上同时跑存储服务与 VM 完全可行。

7.14.1.配置 Configuration

monhost
monitor 守护进程 IP 列表。可选 , 仅当 Ceph 不在当前 Proxmox VE 集群内时需要。
pool
Ceph 池名。
username
RBD 用户 ID。可选 , 仅当 Ceph 不在本集群时需要;仅填写用户 ID, 不加 client. 前缀。
krbd
强制通过 krbd 内核模块访问 RADOS 块设备 , 可选。
NOTE

容器会 始终 使用 krbd , 与该选项无关。

外部 Ceph 集群配置示例

rbd: ceph-external
        monhost 10.1.1.20 10.1.1.21 10.1.1.22
        pool ceph-external
        content images
        username admin
NOTE

可使用 rbd 工具执行底层管理。

7.14.2.认证 Authentication

NOTE

若 Ceph 本地部署在 Proxmox VE 集群上 , 添加存储时如下步骤会自动完成。

若使用 cephx 认证(默认启用), 需提供外部 Ceph 集群的 keyring。通过 CLI 配置时 , 先把 keyring 文件复制到 Proxmox VE 节点 :

# scp <cephserver>:/etc/ceph/ceph.client.admin.keyring /root/rbd.keyring

然后通过 pvesm 添加外部 RBD 存储并指定 --keyring:

# pvesm add rbd <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content images --keyring /root/rbd.keyring

通过 GUI 配置时 , 将 keyring 粘贴到相应字段即可。 keyring 保存在:

/etc/pve/priv/ceph/<STORAGE_ID>.keyring
NOTE

连接外部集群时建议创建 仅具备所需能力 的 keyring。更多细节见 Ceph 用户管理文档。

7.14.3.Ceph 客户端配置(可选) Ceph client configuration (optional)

连接外部 Ceph 存储时 , 不一定能在外部集群 config DB 上配置客户端专属选项。可在 keyring 旁放置一份同名 ceph.conf 以修改存储的客户端配置:

/etc/pve/priv/ceph/<STORAGE_ID>.conf

具体选项可见 RBD 配置参考。

NOTE

Proxmox VE 会把 <STORAGE_ID>.conf 与存储配置合并 , 请勿轻率修改。

7.14.4.存储特性 Storage Features

内容类型镜像格式共享快照克隆
images rootdirrawyesyesyes

7.15.Ceph 文件系统(CephFS) Ceph Filesystem (CephFS)

存储池类型 : cephfs

CephFS 在 Ceph 集群上实现 POSIX 兼容的文件系统 , 继承了 Ceph 的冗余、可伸缩、自愈与高可用特性。

NOTE

Proxmox VE 可直接管理 Ceph 部署 , 配置 CephFS 存储会更简单。现代硬件算力与内存充沛 , 合部署存储服务与 VM 不会显著影响性能。

要使用 CephFS 存储插件 , 必须添加我们的 Ceph 仓库替换 Debian 原装 Ceph 客户端 , 然后 apt update && apt dist-upgrade。

WARN

请确保 没有其他 Ceph 仓库, 否则安装会失败或节点上出现版本混用导致异常。

7.15.1.配置 Configuration

fs-name
CephFS 名称。
monhost
monitor 地址列表 , 可选 , 仅当 Ceph 不在本集群时需要。
path
本地挂载点 , 默认 /mnt/pve/<STORAGE_ID>/。
username
Ceph 用户 ID, 可选(当 Ceph 在本集群时默认 admin)。
subdir
要挂载的 CephFS 子目录 , 默认 /。
fuse
通过 FUSE 而非内核客户端访问 CephFS , 默认 0。

外部 Ceph 集群配置示例

cephfs: cephfs-external
        monhost 10.1.1.20 10.1.1.21 10.1.1.22
        path /mnt/pve/cephfs-external
        content backup
        username admin
        fs-name cephfs
NOTE

若未禁用 cephx , 别忘了设置客户端 secret 文件。

7.15.2.认证 Authentication

启用 cephx 认证时需提供外部 Ceph 集群的 secret。通过 CLI 配置时先复制到 Proxmox VE 节点:

# scp <cephserver>:/etc/ceph/cephfs.secret /root/cephfs.secret
# pvesm add cephfs <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content backup --keyring /root/cephfs.secret

通过 GUI 粘贴即可。与 RBD 不同 , 这里的 secret 只是密钥本身 , 不含 [client.userid] 段。 secret 保存在:

/etc/pve/priv/ceph/<STORAGE_ID>.secret

Ceph 管理员可用以下命令取得 secret(userid 为已配置可访问集群的客户端 ID):

# ceph auth get-key client.userid > cephfs.secret

7.15.3.存储特性 Storage Features

内容类型镜像格式共享快照克隆
vztmpl iso backup snippetsnoneyesyes [1]no

[1] 目前无已知缺陷 , 但测试尚不充分 , 快照稳定性未正式保证。

7.16.BTRFS 后端 BTRFS Backend

存储池类型 : btrfs

表面上与目录存储类型非常相似(见 §7.5 目录后端概述)。主要区别是 :此类型下的 raw 磁盘会放入一个 subvolume, 以便支持快照 , 并在离线存储迁移时保留快照。

NOTE

BTRFS 开文件时会遵循 O_DIRECT 标志 , 因此 VM 不应 使用 cache=none , 否则会出现校验和错误。

7.16.1.配置 Configuration

配置方式类似目录存储。把一个目录(并非其自身挂载点)作为 BTRFS 存储添加时 , 强烈建议 用 is_mountpoint 指定真实挂载点。例如 BTRFS 文件系统挂载于 /mnt/data2 , 想把其 pve-storage/ 子目录(推荐来自快照)加为名为 data2 的存储池:

btrfs: data2
        path /mnt/data2/pve-storage
        content rootdir,images
        is_mountpoint /mnt/data2

7.16.2.快照 Snapshots

对 subvolume 或 raw 文件打快照时 , 快照会被创建为同路径后附 @ 与快照名的只读 subvolume。

7.17.ZFS over iSCSI 后端 ZFS over ISCSI Backend

存储池类型 : zfs

该后端通过 SSH 访问一台远端 ZFS 池主机及其 iSCSI target。对每个客户机磁盘 , 它在远端建一个 ZVOL 并以 iSCSI LUN 形式导出 , 供 Proxmox VE 用作客户机磁盘。支持以下 iSCSI target 实现:

  • LIO(Linux)
  • IET(Linux)
  • ISTGT(FreeBSD)
  • Comstar(Solaris)
NOTE

此插件需要 具备 ZFS 能力的远端设备, 不能用它在普通存储设备 / SAN 上创建 ZFS 池。

7.17.1.配置 Configuration

远端 target 必须接受来自 Proxmox VE 节点的 SSH 连接。 Proxmox VE 通过无密码 SSH 私钥(保存在 /etc/pve/priv/zfs/<portal>_id_rsa)登录 , 用以创建 ZVOL 并经 iSCSI 导出。

生成 SSH 密钥并分发到 192.0.2.1:

mkdir /etc/pve/priv/zfs
ssh-keygen -f /etc/pve/priv/zfs/192.0.2.1_id_rsa
ssh-copy-id -i /etc/pve/priv/zfs/192.0.2.1_id_rsa.pub root@192.0.2.1
ssh -i /etc/pve/priv/zfs/192.0.2.1_id_rsa root@192.0.2.1

本后端支持的专属属性:

pool
iSCSI target 上的 ZFS 池 / 文件系统。
portal
iSCSI portal(IP 或 DNS 名 , 可选端口)。
target
iSCSI target。
iscsiprovider
远端所用 target 实现(LIO / IET / istgt / comstar)。
comstar_tg / comstar_hg
Comstar view 的 target group / host group。
lio_tpg
Linux LIO 的 target portal group。
nowritecache
在 target 上禁用写缓存。
blocksize / sparse
ZFS 块大小 / 精简置备。

配置示例

zfs: lio
        blocksize 4k
        iscsiprovider LIO
        pool tank
        portal 192.0.2.111
        target iqn.2003-01.org.linux-iscsi.lio.x8664:sn.xxxxxxxxxxxx
        content images
        lio_tpg tpg1
        sparse 1

zfs: solaris
        blocksize 4k
        target iqn.2010-08.org.illumos:02:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:tank1
        pool tank
        iscsiprovider comstar
        portal 192.0.2.112
        content images

zfs: freebsd
        blocksize 4k
        target iqn.2007-09.jp.ne.peach.istgt:tank1
        pool tank
        iscsiprovider istgt
        portal 192.0.2.113
        content images

zfs: iet
        blocksize 4k
        target iqn.2001-04.com.example:tank1
        pool tank
        iscsiprovider iet
        portal 192.0.2.114
        content images

7.17.2.存储特性 Storage Features

ZFS over iSCSI 提供可快照的共享存储;需注意 ZFS 设备不应成为部署中的单点故障。

内容类型镜像格式共享快照克隆
imagesrawyesyesno