BTRFS
Warning
|
BTRFS集成目前在{pve}中是一个技术预览。 |
BTRFS 是一个现代的写时复制文件系统,由 Linux 内核原生支持,实现了如快照、内建 RAID 以及通过数据和元数据的校验和进行自我修复的功能。从 {pve} 7.0 开始,BTRFS 被引入作为根文件系统的可选项。
-
主系统设置几乎与传统基于ext4的设置相同。
-
快照
-
文件系统级别的数据压缩
-
写时复制克隆
-
RAID0、RAID1和RAID10
-
数据防损坏保护
-
自愈
-
原生支持的Linux内核
-
…
-
RAID 5/6级别是实验性的并且危险的
作为根文件系统的安装
当您使用{pve}安装程序进行安装时,可以选择BTRFS作为根文件系统。您需要在安装时选择RAID类型:
RAID0 |
也被称为“条带化”。这种卷的容量是所有磁盘容量的总和。但是RAID0没有增加任何冗余,因此单个驱动器的故障会导致卷不可用。 |
RAID1 |
也被称为“镜像”。数据会被一模一样地写入到所有磁盘中。这种模式至少需要两块相同大小的磁盘。其结果容量等同于单个磁盘的容量。 |
RAID10 |
RAID0和RAID1的组合。至少需要4个磁盘。 |
安装程序会自动分区磁盘,并在 /var/lib/pve/local-btrfs
创建一个额外的子卷。为了能够使用 {pve} 工具,安装程序会在 /etc/pve/storage.cfg
中创建以下配置条目:
dir: local path /var/lib/vz content iso,vztmpl,backup disable btrfs: local-btrfs path /var/lib/pve/local-btrfs content iso,vztmpl,backup,images,rootdir
这显式地禁用了默认的`local`存储,以支持在额外的子卷上的BTRFS特定存储条目。
btrfs`命令用于配置和管理BTRFS文件系统,在安装后,以下命令列出所有额外的子卷:
# btrfs subvolume list / ID 256 gen 6 top level 5 path var/lib/pve/local-btrfs
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 My-Storage /dev/sdb1 /dev/sdc1
挂载BTRFS文件系统
新的文件系统随后可以手动挂载,例如:
# mkdir /my-storage # mount /dev/sdb /my-storage
BTRFS也可以像任何其他挂载点一样被添加到`/etc/fstab`中,从而在启动时自动挂载。建议避免使用块设备路径,而是使用`mkfs.btrfs`命令打印的`UUID`值,尤其是在BTRFS设置中有多于一个磁盘时。
例如:
# ...其他挂载点因简略而省略 # using the UUID from the mkfs.btrfs output is highly recommended UUID=e2c0c3ff-2114-4f54-b767-3a203e49f6f3 /my-storage btrfs defaults 0 0
Tip
|
如果你不再拥有UUID,你可以使用`blkid`工具列出所有块设备的属性。 |
之后,你可以通过执行以下操作来触发第一次挂载:
mount /my-storage
在下次重启后,系统将会在启动时自动完成这项操作。
将BTRFS文件系统添加到{pve}
您可以通过网络界面将一个现有的BTRFS文件系统添加到{pve},或者使用命令行界面,例如:
pvesm add btrfs my-storage --path /my-storage
创建一个子卷
创建一个子卷将其链接到BTRFS文件系统中的一个路径,在那里它将显示为一个普通目录。
# btrfs subvolume create /some/path
之后 /some/path
将像一个普通目录一样工作。
删除子卷
与通过`rmdir`删除的目录不同,子卷在用`btrfs`命令删除时不需要为空。
# btrfs subvolume delete /some/path
创建一个子卷的快照
BTRFS实际上并不区分快照和普通子卷,所以进行快照实际上也可以被视为创建一个子卷的任意副本。按照惯例,{pve}在创建客户磁盘或子卷的快照时会使用只读标志,但这个标志后来也可以更改。
# btrfs subvolume snapshot -r /some/path /a/new/path
这将在`/a/new/path`的位置创建一个对`/some/path`子卷的只读"克隆"。对`/some/path`的任何未来修改在修改之前都会使被修改的数据被复制。
如果省略了只读(-r
)选项,两个子卷都将是可写的。
启用压缩
默认情况下,BTRFS不会压缩数据。要启用压缩,可以添加`compress`挂载选项。请注意,已经写入的数据在事后不会被压缩。
默认情况下,rootfs 将如下列在 /etc/fstab
文件中:
UUID=<uuid of your root file system> / btrfs defaults 0 1
您可以简单地将 compress=zstd
、compress=lzo
或 compress=zlib
追加到上面的 defaults
中,如下所示:
UUID=<uuid of your root file system> / btrfs defaults,compress=zstd 0 1
这个更改将在重启后生效。
检查空间使用情况
经典的`df`工具可能会对于一些BTRFS设置输出令人困惑的数值。为了获得更好的估算,请使用`btrfs filesystem usage /PATH`命令,例如:
# btrfs fi usage /my-storage