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(本地) | zfspool | both 1 | no | yes | yes |
| 目录 | dir | file | no | yes 2 | yes |
| BTRFS | btrfs | file | no | yes | TP 5 |
| NFS | nfs | file | yes | yes 2 | yes |
| CIFS | cifs | file | yes | yes 2 | yes |
| Proxmox Backup | pbs | both | yes | n/a | yes |
| CephFS | cephfs | file | yes | yes | yes |
| LVM | lvm | block | no 3 | yes 4 | yes |
| LVM-thin | lvmthin | block | no | yes | yes |
| iSCSI/kernel | iscsi | block | yes | no | yes |
| iSCSI/libiscsi | iscsidirect | block | yes | no | yes |
| Ceph/RBD | rbd | block | yes | yes | yes |
| ZFS over iSCSI | zfs | block | yes | yes | yes |
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」能力的存储类型也都支持精简置备。
若存储写满 , 使用该存储上卷的客户机都会收到 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
多个存储配置指向同一底层存储会造成问题 —— 这种 「别名」配置会导致两个不同的 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可避免超时。
不建议在多个 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>
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、备份等)。
可通过 /etc/fstab 挂载其他存储 , 再为挂载点定义目录存储 —— 这样即可使用 Linux 支持的任意文件系统。
该后端只假定底层目录与 POSIX 兼容 , 意味着 存储级别无法做快照; 但对 qcow2 格式 VM 镜像可借助其内建快照能力绕开。
部分存储类型不支持 O_DIRECT , 因此不能在其上使用 cache=none , 请改用 writeback。
所有文件级存储后端使用如下默认目录布局:
| 内容类型 | 子目录 |
|---|---|
| VM 镜像 | images/<VMID>/ |
| ISO 镜像 | template/iso/ |
| 容器模板 | template/cache/ |
| 备份文件 | dump/ |
| Snippets | snippets/ |
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>
基镜像用于生成克隆 , 必须保持只读。后端会把访问模式改为 0444, 如果底层存储支持还会置 immutable 标志(chattr +i)。
7.5.3.存储特性 Storage Features
多数文件系统本身不支持快照 , 后端借助 qcow2 内建快照能力;克隆同样使用 qcow2 基镜像特性。
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| images rootdir vztmpl iso backup snippets | raw qcow2 vmdk subvol | no | qcow2 | qcow2 |
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
NFS 请求超时后默认无限重试 , 可能导致客户端长时间挂起。对只读内容可考虑使用 soft 选项 , 把重试限制为 3 次。
7.6.2.存储特性 Storage Features
NFS 本身不支持快照 , 后端通过 qcow2 特性实现快照与克隆。
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| images rootdir vztmpl iso backup snippets | raw qcow2 vmdk | yes | qcow2 | qcow2 |
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 snippets | raw qcow2 vmdk | yes | qcow2 | qcow2 |
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)与文件级(容器)。
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| backup | n/a | yes | n/a | n/a |
7.8.3.加密 Encryption
可选配置 AES-256-GCM 客户端加密。可通过 Web 界面或 CLI 的 encryption-key 选项启用。密钥保存在仅 root 可访问的 /etc/pve/priv/storage/<STORAGE_ID>.enc。
没有密钥就无法访问备份。 务必把密钥妥善保存在与被备份内容 分离 的地方。若把整个系统的密钥放在该系统本身 , 一旦系统损坏需恢复 , 密钥也会随之丢失。
建议把密钥保存在便于恢复的安全位置 —— 最佳位置是密码管理器;并可将密钥写入 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 密钥并解密备份。
master key 的保管规则与普通加密密钥相同 —— 没有私钥就无法恢复! paperkey 同样支持为 master 私钥生成纸质副本。
加密由客户端管理 , 因此同一个 PBS datastore 可同时存放未加密与使用不同密钥加密的备份;但不同密钥间 无法去重 , 通常建议为它们使用不同 datastore。
若场景不需要(例如本地可信网络中运行), 请避免使用加密 —— 从未加密的备份恢复总是更简单。
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 rootdir | raw subvol | no | yes | yes |
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 侧看起来占用完整卷大小 , 但在底层占用会相应减小。
卷链快照目前在 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 时 , 后端实现了正确的集群级锁。
对非共享本地存储 , 可用 LVM-thin 后端 —— 它支持快照与链式克隆。
| 内容类型 | 镜像格式 | 共享 | 快照 | 完整克隆 | 链式克隆 |
|---|---|---|---|---|---|
| images rootdir | raw, qcow2 | possible | yes 1 | yes | — |
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 rootdir | raw | no | yes | yes |
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
若打算在 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 none | raw | yes | no | no |
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
该后端 仅支持虚拟机 , 容器无法使用。
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| images | raw | yes | no | no |
7.14.Ceph RADOS 块设备(RBD) Ceph RADOS Block Devices (RBD)
存储池类型 : rbd
Ceph 是一种分布式对象存储 / 文件系统 , 致力于出色的性能、可靠性与可扩展性。 RADOS 块设备实现了功能丰富的块级存储 , 具备:
- 精简置备
- 可变大小卷
- 分布式、冗余(在多个 OSD 上条带)
- 完整快照与克隆
- 自我修复
- 无单点故障
- 可扩展至 EB 级
- 提供内核与用户态实现
小规模部署下 , 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 块设备 , 可选。
容器会 始终 使用 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
可使用 rbd 工具执行底层管理。
7.14.2.认证 Authentication
若 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
连接外部集群时建议创建 仅具备所需能力 的 keyring。更多细节见 Ceph 用户管理文档。
7.14.3.Ceph 客户端配置(可选) Ceph client configuration (optional)
连接外部 Ceph 存储时 , 不一定能在外部集群 config DB 上配置客户端专属选项。可在 keyring 旁放置一份同名 ceph.conf 以修改存储的客户端配置:
/etc/pve/priv/ceph/<STORAGE_ID>.conf
具体选项可见 RBD 配置参考。
Proxmox VE 会把 <STORAGE_ID>.conf 与存储配置合并 , 请勿轻率修改。
7.14.4.存储特性 Storage Features
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| images rootdir | raw | yes | yes | yes |
7.15.Ceph 文件系统(CephFS) Ceph Filesystem (CephFS)
存储池类型 : cephfs
CephFS 在 Ceph 集群上实现 POSIX 兼容的文件系统 , 继承了 Ceph 的冗余、可伸缩、自愈与高可用特性。
Proxmox VE 可直接管理 Ceph 部署 , 配置 CephFS 存储会更简单。现代硬件算力与内存充沛 , 合部署存储服务与 VM 不会显著影响性能。
要使用 CephFS 存储插件 , 必须添加我们的 Ceph 仓库替换 Debian 原装 Ceph 客户端 , 然后 apt update && apt dist-upgrade。
请确保 没有其他 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
若未禁用 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 snippets | none | yes | yes [1] | no |
[1] 目前无已知缺陷 , 但测试尚不充分 , 快照稳定性未正式保证。
7.16.BTRFS 后端 BTRFS Backend
存储池类型 : btrfs
表面上与目录存储类型非常相似(见 §7.5 目录后端概述)。主要区别是 :此类型下的 raw 磁盘会放入一个 subvolume, 以便支持快照 , 并在离线存储迁移时保留快照。
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)
此插件需要 具备 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 设备不应成为部署中的单点故障。
| 内容类型 | 镜像格式 | 共享 | 快照 | 克隆 |
|---|---|---|---|---|
| images | raw | yes | yes | no |