目录
Toggle3.5. 外部指标服务器
目前支持的有:
外部指标服务器定义保存在/etc/pve/status.cfg中,并且可以通过 Web 界面进行编辑。
3.5.1. 石墨服务器配置
默认情况下,Proxmox VE 通过 UDP 发送数据,因此必须将 Graphite 服务器配置为接受此数据。这里可以为不使用标准1500 MTU的环境配置最大传输单元 (MTU) 。
您还可以将插件配置为使用 TCP。为了不阻塞重要的pvestatd统计收集守护进程,需要超时来应对网络问题。
3.5.2. Influxdb 插件配置
以下是 influxdb 的示例配置(在您的 influxdb 服务器上):
[[UDP]] 启用=真 绑定地址 = "0.0.0.0:8089" 数据库=“proxmox” 批量大小 = 1000 批处理超时=“1s”
通过此配置,您的服务器将侦听端口 8089 上的所有 IP 地址,并将数据写入proxmox数据库中
或者,可以将插件配置为使用 InfluxDB 2.x 的 http(s) API。InfluxDB 1.8.x 确实包含此 v2 API 的向前兼容的 API 端点。
要使用它,请将influxdbproto设置为http或https(取决于您的配置)。默认情况下,Proxmox VE使用组织proxmox和bucket/db proxmox (可以分别使用配置组织和存储桶进行设置)。
由于 InfluxDB 的 v2 API 仅可通过身份验证使用,因此您必须生成一个可以写入正确存储桶并设置它的令牌。
在 1.8.x 的 v2 兼容 API 中,您可以使用user:password作为令牌(如果需要),并且可以省略组织,因为这在 InfluxDB 1.x 中没有意义。
您还可以使用timeout设置来设置 HTTP 超时(默认为 1 秒),以及使用 max -body-size设置(这对应于同名的 InfluxDB 设置)来设置最大批量大小(默认为 25000000 字节)。
3.6. 磁盘健康监控
尽管建议使用强大且冗余的存储,但它对于监控本地磁盘的运行状况非常有帮助。
从 Proxmox VE 4.3 开始,安装并需要包 smartmontools [ 1 ] 。这是一套用于监视和控制本地硬盘SMART系统的工具。
您可以通过发出以下命令来获取磁盘的状态:
# smartctl -a /dev/sdX
其中 /dev/sdX 是本地磁盘之一的路径。
如果输出显示:
SMART 支持为:已禁用
您可以使用以下命令启用它:
# smartctl -s on /dev/sdX
有关如何使用 smartctl 的更多信息,请参阅man smartctl。
默认情况下,smartmontools 守护进程 smartd 处于活动状态并启用,每 30 分钟扫描 /dev/sdX 和 /dev/hdX 下的磁盘以查找错误和警告,如果检测到问题,则向 root 发送电子邮件。
有关如何配置 smartd 的更多信息,请参阅man smartd和 man smartd.conf。
如果您将硬盘与硬件 raid 控制器一起使用,则很可能有工具可以监视 raid 阵列中的磁盘以及阵列本身。有关这方面的更多信息,请咨询您的 raid 控制器的供应商。
3.7. 逻辑卷管理器 (LVM)
大多数人直接将 Proxmox VE 安装在本地磁盘上。Proxmox VE安装CD提供了多种本地磁盘管理选项,当前默认设置使用LVM。安装程序允许您为此类设置选择单个磁盘,并使用该磁盘作为卷组( VG ) pve的物理卷。以下输出来自使用小型 8GB 磁盘的测试安装:
#PV PV VG Fmt Attr PSize PFree /dev/sda3 pve lvm2 a-- 7.87g 876.00m # VG VG #PV #LV #SN Attr VSize VFree PVE 1 3 0 WZ--n- 7.87g 876.00m
安装程序在此 VG 内分配三个逻辑卷(LV ):
# lvs LV VG Attr LSize 池原始数据% Meta% 数据 PVE twi-a-tz-- 4.38g 0.00 0.63 根pve-wi-ao---- 1.75g 交换pve-wi-ao---- 896.00m
- 根
-
格式为ext4,并包含操作系统。
- 交换
-
交换分区
- 数据
-
该卷使用LVM-thin,用于存储VM镜像。LVM-thin 更适合此任务,因为它为快照和克隆提供了有效的支持。
对于 Proxmox VE 4.1 之前的版本,安装程序会创建一个名为“data”的标准逻辑卷,该卷安装在/var/lib/vz处。
从版本 4.2 开始,逻辑卷“data”是一个 LVM 精简池,用于存储基于块的来宾映像,而/var/lib/vz只是根文件系统上的一个目录。
3.7.1. 硬件
我们强烈建议使用硬件 RAID 控制器(带 BBU)进行此类设置。这提高了性能,提供了冗余,并使磁盘更换更容易(可热插拔)。
LVM本身不需要任何特殊的硬件,对内存的要求也很低。
3.7.2. 引导装载程序
我们默认安装两个引导加载程序。第一个分区包含标准 GRUB 引导加载程序。第二个分区是EFI系统分区(ESP),它 可以在 EFI 系统上启动。
3.7.3. 创建卷组
假设我们有一个空磁盘/dev/sdb,我们要在其上创建一个名为“vmdata”的卷组。
请注意,以下命令将销毁/dev/sdb上的所有现有数据。 |
首先创建一个分区。
# sgdisk -N 1 /dev/sdb
创建物理卷(PV),无需确认,元数据大小为 250K 。
# pvcreate --metadatasize 250k -y -ff /dev/sdb1
在/dev/sdb1上创建名为“vmdata”的卷组
# vgcreate vmdata /dev/sdb1
3.7.4. 为/var/lib/vz创建额外的 LV
这可以通过创建新的薄 LV 轻松完成。
# lvcreate -n <名称> -V <大小[M,G,T]> <VG>/<LVThin_pool>
一个现实世界的例子:
# lvcreate -n vz -V 10G pve/数据
现在必须在 LV 上创建文件系统。
# mkfs.ext4 /dev/pve/vz
最后必须安装它。
确保/var/lib/vz为空。在默认安装中并非如此。 |
为了使其始终可访问,请在/etc/fstab中添加以下行。
# echo '/dev/pve/vz /var/lib/vz ext4 默认 0 2' >> /etc/fstab
3.7.5。调整精简池的大小
使用以下命令调整 LV 和元数据池的大小:
# lvresize --size +<大小[\M,G,T]> --poolmetadatasize +<大小[\M,G]> <VG>/<LVThin_pool>
当扩展数据池时,元数据池也必须扩展。 |
3.7.6。创建 LVM 精简池
必须在卷组之上创建精简池。如何创建卷组请参见 LVM 部分。
# lvcreate -L 80G -T -n vmstore vmdata
3.8. Linux 上的 ZFS
ZFS 是由 Sun Microsystems 设计的组合文件系统和逻辑卷管理器。从 Proxmox VE 3.4 开始,ZFS 文件系统的本机 Linux 内核移植作为可选文件系统引入,同时也作为根文件系统的附加选择。无需手动编译 ZFS 模块 – 所有软件包都包含在内。
通过使用 ZFS,可以通过低预算硬件实现最大的企业功能,而且还可以通过利用 SSD 缓存甚至仅 SSD 设置来实现高性能系统。ZFS 可以通过适度的 CPU 和内存负载以及轻松的管理来取代成本密集型的硬件 raid 卡。
-
使用 Proxmox VE GUI 和 CLI 轻松配置和管理。
-
可靠的
-
防止数据损坏
-
文件系统级别的数据压缩
-
快照
-
写时复制克隆
-
各种RAID级别:RAID0、RAID1、RAID10、RAIDZ-1、RAIDZ-2、RAIDZ-3、dRAID、dRAID2、dRAID3
-
可以使用SSD作为缓存
-
自愈
-
持续完整性检查
-
专为高存储容量而设计
-
通过网络异步复制
-
开源
-
加密
-
……
3.8.1. 硬件
ZFS 严重依赖内存,因此至少需要 8GB 才能启动。在实践中,请根据您的硬件/预算尽可能多地使用。为了防止数据损坏,我们建议使用高质量 ECC RAM。
如果您使用专用缓存和/或日志磁盘,则应使用企业级 SSD。这可以显着提高整体性能。
不要在具有自己的缓存管理的硬件 RAID 控制器之上使用 ZFS。ZFS 需要直接与磁盘通信。HBA 适配器或类似以“IT”模式闪烁的 LSI 控制器更合适。 |
如果您正在尝试在 VM 内安装 Proxmox VE(嵌套虚拟化),请不要对该 VM 的磁盘使用virtio ,因为 ZFS 不支持它们。请改用 IDE 或 SCSI(也适用于virtio SCSI 控制器类型)。
3.8.2. 作为根文件系统安装
使用 Proxmox VE 安装程序进行安装时,可以选择 ZFS 作为根文件系统。安装时需要选择RAID类型:
RAID0 |
也称为“条带化”。该卷的容量是所有磁盘容量的总和。但 RAID0 不添加任何冗余,因此单个驱动器故障会导致卷无法使用。 |
磁盘阵列1 |
也称为“镜像”。数据以相同的方式写入所有磁盘。该模式需要至少2块相同大小的磁盘。所得容量是单个磁盘的容量。 |
RAID10 |
RAID0 和 RAID1 的组合。至少需要 4 个磁盘。 |
RAIDZ-1 |
RAID-5 的变体,单奇偶校验。至少需要 3 个磁盘。 |
RAIDZ-2 |
RAID-5 的变体,双奇偶校验。至少需要 4 个磁盘。 |
RAIDZ-3 |
RAID-5 的变体,三重奇偶校验。至少需要 5 个磁盘。 |
安装程序会自动对磁盘进行分区,创建一个名为rpool的 ZFS 池,并在 ZFS 子卷 rpool/ROOT/pve-1上安装根文件系统。
创建另一个名为rpool/data 的子卷来存储 VM 映像。为了将其与 Proxmox VE 工具一起使用,安装程序在/etc/pve/storage.cfg中创建以下配置条目:
zfspool:本地 zfs 池 rpool/数据 疏 内容图像,rootdir
安装后,您可以使用 zpool命令查看 ZFS 池状态:
# zpool状态 池:r池 状态: 在线 扫描:无要求 配置: 名称 状态 读写 CKSUM rpool 在线 0 0 0 镜像-0 在线 0 0 0 sda2 在线 0 0 0 sdb2 在线 0 0 0 镜像-1 在线 0 0 0 sdc 在线 0 0 0 sdd 在线 0 0 0 错误:无已知数据错误
zfs命令用于配置和管理 ZFS 文件系统。以下命令列出安装后的所有文件系统:
#zfs 列表 使用的名称 AVAIL REFER MONTPOINT 资源池 4.94G 7.68T 96K /资源池 rpool/根 702M 7.68T 96K /rpool/根 rpool/ROOT/pve-1 702M 7.68T 702M / rpool/数据 96K 7.68T 96K /rpool/数据 rpool/交换 4.25G 7.69T 64K -
3.8.3. ZFS RAID 级别注意事项
选择 ZFS 池的布局时需要考虑几个因素。ZFS 池的基本构建块是虚拟设备或 vdev。池中的所有 vdev 均等使用,并且数据在它们之间条带化 (RAID0)。有关 vdev 的更多详细信息,请查看zpool(8)联机帮助页。
表现
每种vdev类型都有不同的性能行为。感兴趣的两个参数是 IOPS(每秒输入/输出操作数)和可写入或读取数据的带宽。
写入数据时,就两个参数而言,镜像 vdev (RAID1) 的行为大致类似于单个磁盘。读取数据时,性能将随着镜像中磁盘的数量线性扩展。
常见的情况是有 4 个磁盘。将其设置为 2 个镜像 vdev (RAID10) 时,该池在 IOPS 和带宽方面将具有与两个单个磁盘相同的写入特性。对于读取操作,它类似于 4 个单个磁盘。
就具有大量带宽的 IOPS 而言,任何冗余级别的 RAIDZ 的行为大致类似于单个磁盘。多少带宽取决于 RAIDZ vdev 的大小和冗余级别。
对于正在运行的虚拟机,IOPS 在大多数情况下是更重要的指标。
尺寸、空间使用和冗余
虽然由镜像vdev组成的池将具有最佳性能特征,但可用空间将是可用磁盘的 50%。如果镜像 vdev 由 2 个以上磁盘组成,例如在 3 路镜像中,则数量较少。每个镜像至少需要一个运行状况良好的磁盘才能使池保持正常运行。
N 个磁盘的RAIDZ类型 vdev的可用空间大致为 NP,其中 P 为 RAIDZ 级别。RAIDZ 级别指示有多少个任意磁盘可以发生故障而不丢失数据。一个特殊情况是具有 RAIDZ2 的 4 磁盘池。在这种情况下,通常最好使用 2 个镜像 vdev 以获得更好的性能,因为可用空间相同。
使用任何 RAIDZ 级别时的另一个重要因素是用于 VM 磁盘的 ZVOL 数据集的行为方式。对于每个数据块,池需要奇偶校验数据,其大小至少是由 池的ashift值定义的最小块大小的大小。偏移量为 12 时,池的块大小为 4k。ZVOL 的默认块大小为 8k。因此,在 RAIDZ2 中,写入的每个 8k 块将导致另外写入两个 4k 奇偶校验块,即 8k + 4k + 4k = 16k。这当然是一种简化的方法,实际情况会略有不同,元数据、压缩等在此示例中未考虑。
检查 ZVOL 的以下属性时可以观察到此行为:
-
卷大小
-
refreservation(如果池未精简配置)
-
使用(如果池是精简配置且不存在快照)
# zfs 获取卷大小、保留、已使用 <池>/vm-<vmid>-disk-X
volsize是磁盘呈现给 VM 时的大小,而 refreservation显示池上的保留空间,其中包括奇偶校验数据所需的预期空间。如果池是精简配置的,则 refreservation将设置为 0。观察该行为的另一种方法是比较 VM 内已用磁盘空间和已用属性。请注意,快照会扭曲该值。
有一些选项可以应对空间使用的增加:
-
增加volblocksize以提高数据奇偶校验比
-
使用镜像vdev 代替RAIDZ
-
使用ashift=9(块大小为512字节)
volblocksize属性只能在创建 ZVOL时设置。可以在存储配置中更改默认值。执行此操作时,需要对 guest 虚拟机进行相应调整,并且根据用例,写放大问题只是从 ZFS 层转移到 guest 虚拟机。
创建池时使用ashift=9可能会导致性能下降,具体取决于下面的磁盘,并且以后无法更改。
镜像 vdev(RAID1、RAID10)对 VM 工作负载具有有利的行为。使用它们,除非您的环境具有可接受 RAIDZ 性能特征的特定需求和特征。
3.8.4. ZFS dRAID
在 ZFS dRAID(分簇 RAID)中,热备用驱动器参与 RAID。它们的备用容量被保留并用于在一个驱动器发生故障时进行重建。根据配置,在驱动器发生故障时,与 RAIDZ 相比,这可以提供更快的重建速度。更多信息可以在 OpenZFS 官方文档中找到。[ 2 ]
dRAID 适用于 dRAID 中超过 10-15 个磁盘。在大多数使用情况下,对于较少数量的磁盘来说,RAIDZ 设置应该更好。 |
GUI 需要比最少磁盘多一个的磁盘(即 dRAID1 需要 3 个)。它还期望添加一个备用磁盘。 |
-
dRAID1或dRAID:需要至少 2 个磁盘,其中一个磁盘可能出现故障,数据就会丢失
-
dRAID2:需要至少 3 个磁盘,其中两个磁盘可能会出现故障,数据也会丢失
-
dRAID3:至少需要 4 个磁盘,其中三个磁盘可能出现故障,数据就会丢失
其他信息可以在手册页上找到:
# man zpoolconcepts
备件和数据
备用磁盘的数量告诉系统在发生磁盘故障时应保留多少磁盘。默认值为 0 个备件。如果没有备件,重建将不会获得任何速度优势。
data定义冗余组中的设备数量。默认值为 8。除非磁盘 – 奇偶校验 – 备件等于小于 8 的值,否则将使用较小的数字。一般来说,较少数量的数据设备会带来更高的 IOPS、更好的压缩比和更快的重新同步,但定义较少的数据设备会降低池的可用存储容量。
3.8.5。引导装载程序
Proxmox VE 使用proxmox-boot-tool来管理引导加载程序配置。有关详细信息,请参阅有关Proxmox VE 主机引导加载程序的章节。
3.8.6。ZFS 管理
本节为您提供一些常见任务的使用示例。ZFS本身非常强大并且提供了很多选项。管理 ZFS 的主要命令是zfs和zpool。这两个命令都附带了很棒的手册页,可以通过以下方式阅读:
# 男人 zpool # 男人 zfs
创建一个新的zpool
要创建新池,至少需要一个磁盘。ashift应具有与基础磁盘相同的扇区大小(ashift的2次幂)或更大。
# zpool create -f -o ashift=12 <池> <设备>
池名称必须遵守以下规则:
|
要激活压缩(请参阅ZFS 中的压缩部分):
# zfs 设置压缩=lz4 <池>
使用 RAID-0 创建新池
至少 1 个磁盘
# zpool create -f -o ashift=12 <池> <设备1> <设备2>
使用 RAID-1 创建新池
至少 2 个磁盘
# zpool create -f -o ashift=12 <池> 镜像 <设备1> <设备2>
使用 RAID-10 创建新池
至少 4 个磁盘
# zpool create -f -o ashift=12 <池> 镜像 <设备1> <设备2> 镜像<设备3> <设备4>
使用 RAIDZ-1 创建新池
至少 3 个磁盘
# zpool create -f -o ashift=12 <池> raidz1 <设备1> <设备2> <设备3>
使用 RAIDZ-2 创建新池
至少 4 个磁盘
# zpool create -f -o ashift=12 <池> raidz2 <设备1> <设备2> <设备3> <设备4>
创建一个带有缓存的新池(L2ARC)
可以使用专用缓存驱动器分区来提高性能(使用 SSD)。
作为<device>,可以使用更多设备,如“使用 RAID* 创建新池”中所示。
# zpool create -f -o ashift=12 <池> <设备> 缓存 <缓存设备>
创建一个带有日志(ZIL)的新池
可以使用专用缓存驱动器分区来提高性能(SSD)。
作为<device>,可以使用更多设备,如“使用 RAID* 创建新池”中所示。
# zpool create -f -o ashift=12 <池> <设备> log <日志设备>
将缓存和日志添加到现有池
如果您有一个没有缓存和日志的池,请首先使用parted或gdisk在SSD上创建2个分区。
始终使用 GPT 分区表。 |
日志设备的最大大小应约为物理内存大小的一半,因此通常很小。SSD 的其余部分可以用作缓存。
# zpool add -f <池> log <设备部分1> 缓存<设备部分2>
更换发生故障的设备
# zpool Replace -f <池> <旧设备> <新设备>
根据 Proxmox VE 的安装方式,它可以使用systemd-boot或 通过proxmox-boot-tool [ 3 ]的 grub或普通的grub作为引导加载程序(请参阅 主机引导加载程序)。您可以通过运行来检查:
# proxmox-boot-tool 状态
复制分区表、重新颁发 GUID 和替换 ZFS 分区的第一步是相同的。为了使系统可以从新磁盘引导,需要不同的步骤,具体取决于所使用的引导加载程序。
# sgdisk <健康可启动设备> -R <新设备> # sgdisk -G <新设备> # zpool Replace -f <池> <旧 zfs 分区> <新 zfs 分区>
使用zpool status -v命令监视新磁盘的重新同步过程的进度。 |
# proxmox-boot-tool format <新磁盘的 ESP> # proxmox-boot-tool init <新磁盘的 ESP>
ESP代表 EFI 系统分区,自版本 5.4 起,它被设置为由 Proxmox VE 安装程序设置的可启动磁盘上的分区 #2。有关详细信息,请参阅 设置新分区以用作同步 ESP。 |
# grub-install <新磁盘>
普通grub仅适用于安装了 Proxmox VE 6.3 或更早版本的系统,且尚未手动迁移到使用proxmox-boot-tool。 |
3.8.7. 配置电子邮件通知
ZFS 附带一个事件守护进程ZED,它监视 ZFS 内核模块生成的事件。该守护进程还可以发送有关 ZFS 事件(例如池错误)的电子邮件。较新的 ZFS 软件包在单独的zfs-zed软件包中提供守护程序,该软件包默认情况下应该已安装在 Proxmox VE 中。
您可以使用您喜欢的编辑器通过文件/etc/zfs/zed.d/zed.rc配置守护程序。电子邮件通知所需的设置是 ZED_EMAIL_ADDR ,默认设置为root 。
ZED_EMAIL_ADDR="根"
请注意,Proxmox VE 将发送给root 的邮件转发到为 root 用户配置的电子邮件地址。
3.8.8. 限制 ZFS 内存使用
默认情况下, ZFS 将50%的主机内存用于自适应替换缓存(ARC)。为 ARC 分配足够的内存对于 IO 性能至关重要,因此请谨慎减少内存。根据一般经验,至少分配2 GiB Base + 1 GiB/TiB-Storage。例如,如果您有一个具有 8 TiB可用存储空间的池,那么您应该为 ARC使用10 GiB内存。
您可以通过直接写入zfs_arc_max模块参数来更改当前启动的 ARC 使用限制(重新启动会再次重置此更改):
echo "$[10 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max
要永久更改ARC 限制,请将以下行添加到 /etc/modprobe.d/zfs.conf:
选项 zfs zfs_arc_max=8589934592
此示例设置将使用限制为 8 GiB ( 8 * 2 30 )。
如果您所需的zfs_arc_max值低于或等于 zfs_arc_min(默认为系统内存的 1/32),则zfs_arc_max将被忽略,除非您还将zfs_arc_min设置为最多zfs_arc_max – 1。 |
echo "$[8 * 1024*1024*1024 - 1]" >/sys/module/zfs/parameters/zfs_arc_min echo "$[8 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max
此示例设置(暂时)将总内存超过 256 GiB 的系统上的 使用量限制为 8 GiB ( 8 * 2 30 ),在这种情况下,仅单独设置zfs_arc_max是行不通的。
如果您的根文件系统是 ZFS,则每次此值更改时都必须更新 initramfs: # 更新 initramfs -u -k all
您必须重新启动才能激活这些更改。 |
3.8.9。ZFS 上的交换
在 zvol 上创建的交换空间可能会产生一些问题,例如阻塞服务器或产生高 IO 负载,这在启动到外部存储的备份时经常出现。
我们强烈建议您使用足够的内存,这样您通常就不会遇到内存不足的情况。如果您需要或想要添加交换,最好在物理磁盘上创建一个分区并将其用作交换设备。您可以在安装程序的高级选项中为此目的留出一些可用空间。此外,您可以降低“swapiness”值。对于服务器来说,一个好的值是 10:
# sysctl -w vm.swappiness=10
要使交换持久化,请使用您选择的编辑器打开/etc/sysctl.conf并添加以下行:
虚拟机交换性 = 10
价值 | 战略 |
---|---|
vm.swappiness = 0 |
内核只会交换以避免内存不足的情况 |
vm.swappiness = 1 |
无需完全禁用的最小交换量。 |
虚拟机交换性 = 10 |
当系统中有足够的内存时,有时建议使用此值来提高性能。 |
虚拟机交换性 = 60 |
默认值。 |
虚拟机交换性 = 100 |
内核将积极地交换。 |
3.8.10. 加密的 ZFS 数据集
Linux 版本 0.8.0 上的 ZFS 引入了对数据集本机加密的支持。从 Linux 版本上的早期 ZFS 升级后,可以为每个池启用加密功能:
# zpool 获取特征@加密罐 名称 财产 价值 来源 坦克功能@加密禁用本地 # zpool 设置 feature@cryption=enabled # zpool 获取特征@加密罐 名称 财产 价值 来源 坦克功能@加密启用本地
目前不支持使用 Grub 从包含加密数据集的池启动,并且仅有限支持在启动时自动解锁加密数据集。不支持加密的旧版 ZFS 将无法解密存储的数据。 |
建议在启动后手动解锁存储数据集,或者编写自定义单元以将启动时解锁所需的密钥材料传递给zfs load-key。 |
在启用生产数据加密之前建立并测试备份程序。如果关联的密钥材料/密码/密钥文件丢失,则无法再访问加密数据。 |
创建数据集/zvol 时需要设置加密,并且默认继承到子数据集。例如,要创建加密数据集 Tank/encrypted_data并将其配置为 Proxmox VE 中的存储,请运行以下命令:
# zfs create -o 加密 = on -o keyformat = 密码坦克/加密数据 输入密码: 重新输入密码: # pvesm 添加 zfspool crypto_zfs -pool Tank/encrypted_data
在此存储上创建的所有来宾卷/磁盘都将使用父数据集的共享密钥材料进行加密。
要实际使用存储,需要加载关联的密钥材料并安装数据集。这可以通过以下步骤一步完成:
# zfs mount -l坦克/加密数据 输入“tank/encrypted_data”的密码:
还可以使用(随机)密钥文件,而不是通过在创建时或在现有数据集上使用zfs change-key设置keylocation和keyformat属性来提示输入密码:
# dd if=/dev/urandom of=/path/to/keyfile bs=32 count=1 #zfs更改密钥-o keyformat =原始-o keylocation =文件:///路径/到/密钥文件坦克/加密数据
使用密钥文件时,需要特别注意确保密钥文件免遭未经授权的访问或意外丢失。没有密钥文件,就不可能访问明文数据! |
在加密数据集下创建的来宾卷将相应地设置其 cryptoroot属性。每个加密根只需加载一次密钥材料,即可供其下的所有加密数据集使用。
有关更多详细信息和高级用法,请参阅cryptoroot、crypto、keylocation、keyformat和 keystatus属性、zfs load-key、zfs unload-key和zfs change-key命令以及man zfs的加密部分。
3.8.11. ZFS 中的压缩
当对数据集启用压缩时,ZFS 会尝试在写入之前压缩所有新块,并在读取时解压缩它们。已经存在的数据不会被追溯压缩。
您可以通过以下方式启用压缩:
# zfs set compression=<算法> <数据集>
我们建议使用lz4算法,因为它增加的 CPU 开销非常小。其他算法如lzjb和gzip-N,其中N是从1(最快)到9 (最佳压缩比)的整数,也可用。根据算法和数据的可压缩程度,启用压缩甚至可以提高 I/O 性能。
您可以随时通过以下方式禁用压缩:
# zfs 设置压缩=关闭 <数据集>
同样,只有新区块才会受到此更改的影响。
3.8.12. ZFS专用设备
从 0.8.0 版本开始,ZFS 支持特殊设备。池中的特殊设备用于存储元数据、重复数据删除表和可选的小文件块。
特殊设备可以提高由慢速旋转硬盘和大量元数据更改组成的池的速度。例如,涉及创建、更新或删除大量文件的工作负载将受益于特殊设备的存在。ZFS 数据集还可以配置为将整个小文件存储在特殊设备上,这可以进一步提高性能。对于特殊设备使用快速 SSD。
特殊设备的冗余应与池的冗余相匹配,因为特殊设备是整个池的故障点。 |
将特殊设备添加到池中的操作无法撤消! |
# zpool create -f -o ashift=12 <池> 镜像 <设备1> <设备2> 特殊镜像<设备3> <设备4>
# zpool add <池> 特殊镜像 <设备1> <设备2>
ZFS 数据集公开special_small_blocks=<size>属性。size可以是 0以禁止在特殊设备上存储小文件块,也可以是512B到1M范围内的 2 的幂。设置属性后,小于大小的新文件块将被分配在特殊设备上。
如果special_small_blocks的值大于或等于数据集的recordsize(默认128K ),所有数据将被写入特殊设备,所以要小心! |
在池上设置special_small_blocks属性将更改所有子ZFS数据集的该属性的默认值(例如池中的所有容器将选择小文件块)。
# zfs 设置special_small_blocks=4K <池>
# zfs setspecial_small_blocks=4K <池>/<文件系统>
# zfs setspecial_small_blocks=0 <池>/<文件系统>
3.8.13. ZFS 池功能
ZFS 中磁盘格式的更改仅在主要版本更改之间进行,并通过features指定。所有功能以及一般机制都在zpool-features(5)联机帮助页中详细记录。
由于启用新功能可能会导致旧版本的 ZFS 无法导入池,因此管理员需要通过 在池上运行zpool Upgrade来主动完成此操作(请参阅zpool-upgrade(8)联机帮助页)。
除非您需要使用其中一项新功能,否则启用它们没有任何好处。
事实上,启用新功能有一些缺点:
-
如果 rpool 上激活了新功能,则仍使用grub 引导的 ZFS 上具有 root 权限的系统将变得无法引导,因为 grub 中 ZFS 的实现不兼容。
-
使用较旧的内核启动时,系统将无法导入任何升级的池,该内核仍附带旧的 ZFS 模块。
-
启动较旧的 Proxmox VE ISO 来修复非启动系统同样不起作用。
如果您的系统仍然使用 grub启动,请勿升级您的 rpool ,因为这将使您的系统无法启动。这包括在 Proxmox VE 5.4 之前安装的系统,以及使用旧版 BIOS 引导启动的系统(请参阅 如何确定引导加载程序)。 |
# zpool 升级 <池>
3.9. BTRFS
BTRFS 集成目前是Proxmox VE 中的技术预览。 |
BTRFS 是 Linux 内核原生支持的现代写时复制文件系统,通过数据和元数据的校验和实现快照、内置 RAID 和自我修复等功能。从 Proxmox VE 7.0 开始,BTRFS 被引入作为根文件系统的可选选择。
-
主系统设置几乎与传统的基于 ext4 的设置相同
-
快照
-
文件系统级别的数据压缩
-
写时复制克隆
-
RAID0、RAID1 和 RAID10
-
防止数据损坏
-
自愈
-
Linux 内核原生支持
-
……
-
RAID 级别 5/6 是实验性的且危险的
3.9.1. 作为根文件系统安装
使用 Proxmox VE 安装程序进行安装时,可以选择 BTRFS 作为根文件系统。安装时需要选择RAID类型:
RAID0 |
也称为“条带化”。该卷的容量是所有磁盘容量的总和。但 RAID0 不添加任何冗余,因此单个驱动器故障会导致卷无法使用。 |
磁盘阵列1 |
也称为“镜像”。数据以相同的方式写入所有磁盘。该模式需要至少2块相同大小的磁盘。所得容量是单个磁盘的容量。 |
RAID10 |
RAID0 和 RAID1 的组合。至少需要 4 个磁盘。 |
安装程序会自动对磁盘进行分区并在/var/lib/pve/local-btrfs处创建额外的子卷。为了将其与 Proxmox VE 工具一起使用,安装程序在 /etc/pve/storage.cfg中创建以下配置条目:
目录:本地 路径 /var/lib/vz 内容 iso、vztmpl、备份 禁用 btrfs:本地 btrfs 路径 /var/lib/pve/local-btrfs 内容 iso、vztmpl、备份、图像、rootdir
这会显式禁用默认本地存储,转而使用附加子卷上的 btrfs 特定存储条目。
btrfs命令用于配置和管理btrfs文件系统,安装后,以下命令列出所有附加子卷:
# btrfs 子卷列表 / ID 256 gen 6 顶级 5 路径 var/lib/pve/local-btrfs
3.9.2. BTRFS 管理
本节为您提供一些常见任务的使用示例。
创建 BTRFS 文件系统
要创建 BTRFS 文件系统,请使用mkfs.btrfs 。-d和-m参数分别用于设置元数据和数据的配置文件。使用可选的-L参数,可以设置标签。
一般支持以下模式:single、raid0、raid1、 raid10。
在单个磁盘/dev/sdb上创建带有标签 My-Storage 的BTRFS 文件系统:
# mkfs.btrfs -m single -d single -L My-Storage /dev/sdb
或者在/dev/sdb1和/dev/sdc1两个分区上创建 RAID1 :
# mkfs.btrfs -m raid1 -d raid1 -L 我的存储 /dev/sdb1 /dev/sdc1
挂载 BTRFS 文件系统
然后可以手动安装新的文件系统,例如:
# mkdir /我的存储 # 挂载 /dev/sdb /my-storage
BTRFS 也可以像任何其他安装点一样添加到/etc/fstab中,在启动时自动安装它。建议避免使用块设备路径,而使用mkfs.btrfs命令打印的UUID值,尤其是 BTRFS 设置中有多个磁盘。
例如:
# ...为了简洁起见,省略了其他挂载点 # 强烈建议使用 mkfs.btrfs 输出中的 UUID UUID=e2c0c3ff-2114-4f54-b767-3a203e49f6f3 /my-storage btrfs 默认值 0 0
如果您不再有可用的 UUID,您可以使用blkid工具列出块设备的所有属性。 |
之后,您可以通过执行以下命令触发第一次挂载:
挂载/我的存储
下次重新启动后,系统将在启动时自动完成此操作。
将 BTRFS 文件系统添加到 Proxmox VE
您可以通过 Web 界面或使用 CLI 将现有的 BTRFS 文件系统添加到 Proxmox VE,例如:
pvesm 添加 btrfs my-storage --path /my-storage
创建子卷
创建子卷会将其链接到 btrfs 文件系统中的路径,在该路径中它将显示为常规目录。
# btrfs 子卷创建 /some/path
之后/some/path将像常规目录一样运行。
删除子卷
与通过rmdir删除的目录相反,子卷不需要为空即可通过btrfs命令删除。
# btrfs 子卷删除 /some/path
创建子卷的快照
BTRFS 实际上并不区分快照和普通子卷,因此拍摄快照也可以被视为创建子卷的任意副本。按照惯例,Proxmox VE 在创建来宾磁盘或子卷的快照时将使用只读标志,但以后也可以更改该标志。
# btrfs 子卷快照 -r /some/path /a/new/path
这将在/a/new/path的 /some/path上创建子卷的只读“克隆” 。以后对/some/path 的任何修改都会导致修改前的数据被复制。
如果省略只读 ( -r ) 选项,则两个子卷都将是可写的。
启用压缩
默认情况下,BTRFS 不压缩数据。要启用压缩, 可以添加压缩安装选项。请注意,已写入的数据在事后不会被压缩。
默认情况下,rootfs 将列在/etc/fstab中,如下所示:
UUID=<根文件系统的 uuid> / btrfs 默认值 0 1
您可以简单地将compress=zstd、compress=lzo或compress=zlib附加到 上面的默认值,如下所示:
UUID=<根文件系统的 uuid> / btrfs 默认值,compress=zstd 0 1
此更改将在重新启动后生效。
检查空间使用情况
对于某些 btrfs 设置,经典df工具可能会输出令人困惑的值。为了更好地估计,请使用btrfs 文件系统使用 /PATH命令,例如:
# btrfs fi 用法 /my-storage