作者:吴业亮
博客:wuyeliang.blog.csdn.net

Bcachefs是一个新兴的文件系统,旨在提供高性能、可靠性和可扩展性。它是由Linux内核开发者Kent Overstreet领导的团队开发的,设计目标是成为一个强大的通用文件系统。

以下是Bcachefs的一些特点和优势:

  • 高性能:Bcachefs采用了许多先进的技术和算法,以实现高性能的数据访问。它使用了类似于Btrfs和ZFS的写时复制(Copy-on-Write)技术,提供了快速的读写操作和高效的存储利用率。

  • 可靠性:Bcachefs内建了强大的数据完整性和错误修复机制。它通过校验和和内部树结构来保护数据免受损坏,并提供了自动的错误检测和修复功能。

  • 高度可扩展:Bcachefs支持多种高级功能,例如快照(Snapshots)、压缩、数据压缩、在线扩容等。这些功能使得文件系统能够适应不同的应用场景和需求,并提供高度灵活的存储管理。

  • 兼容性:Bcachefs被设计为与现有Linux文件系统兼容,并适应于现有的Linux存储堆栈。它与现有的工具、软件和文件系统特性兼容,可以平滑地与其他文件系统(如EXT4、XFS等)进行交互。

注意
尽管Bcachefs具有很多有吸引力的特点,但它仍然被认为是实验性的,尚未正式集成到主线Linux内核中。因此,使用Bcachefs时应格外注意,并确保在非关键环境中进行测试和评估。

更多有关Bcachefs的详细信息可以在其官方网站(https://bcachefs.org/)上找到。

一、环境信息:

1、通过Fedora-Server-dvd-x86_64-37-1.7.iso fedora Server Edition安装

# cat /etc/fedora-release 
Fedora release 34 (Thirty Four)

2、下载地址

https://repo.huaweicloud.com/fedora/releases/34/Server/x86_64/iso/Fedora-Server-dvd-x86_64-34-1.2.iso

3、内核版本

# uname  -a
Linux fedora 5.11.12-300.fc34.x86_64 #1 SMP Wed Apr 7 16:31:13 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

4、规格

类别 大小
cpu 32核
内存 64G
磁盘 120G

二、准备环境

1、安装开发工具

# yum -y groupinstall "development tools"

2、安装依赖

# yum -y install ncurses-devel openssl-devel elfutils-libelf-devel bc rsync rpmdevtools python3 libaio-devel libsodium-devel     libblkid-devel libzstd-devel zlib-devel userspace-rcu-devel     lz4-devel libuuid-devel valgrind-devel keyutils-libs-devel     findutils fuse3-devel systemd-devel cargo clang-devel   libattr-devel openssl

其中ncurses-devel是make menuconfig文本界面窗口依赖包

3、升级rust

# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

注意:

需要重启或者重新ssh登录一次

三、下载源码

1、下载bcachefs内核代码和bcachefs-tools源码

# export GIT_SSL_NO_VERIFY=1
或者
# git config --global http.sslVerify false

# git clone https://evilpiepirate.org/git/bcachefs-tools.git
# git clone https://evilpiepirate.org/git/bcachefs.git

四、编译rpm包

1、生成config

# cd bcachefs
# make menuconfig

2、开启bcachefs所有的参数

# cat .config| grep -i bcachefs
CONFIG_BCACHEFS_FS=y
CONFIG_BCACHEFS_QUOTA=y
CONFIG_BCACHEFS_POSIX_ACL=y
CONFIG_BCACHEFS_DEBUG=y
CONFIG_BCACHEFS_TESTS=y
CONFIG_BCACHEFS_LOCK_TIME_STATS=y

3、禁用debug

scripts/config --disable DEBUG_INFO

4、编译内核rpm包

make -j `nproc` rpm-pkg 

##同时构建源和二进制RPM软件包

make -j `nproc` binrpm-pkg

##仅构建二进制RPM软件包

5、成功标志:

Wrote: /root/rpmbuild/SRPMS/kernel-6.1.0+-1.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-headers-6.1.0+-1.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-6.1.0+-1.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/kernel-devel-6.1.0+-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.9y9Ufn
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd kernel-6.1.0+
+ rm -rf /root/rpmbuild/BUILDROOT/kernel-6.1.0+-1.x86_64
+ RPM_EC=0
++ jobs -p
+ exit 0

在/root/rpmbuild/RPMS/x86_64可以看到对应的rpm包,在/root/rpmbuild/SRPMS是src包

6、编译bcachefs-tools

# cd bcachefs-tools
# make rpm

7、编译成功之后

# cd /root/rpmbuild/RPMS/x86_64
# ll
total 1736
-rw-r--r--. 1 root root 1774489 Mar  9 12:53 bcachefs-tools-v0.1_654_gd1def9a-1.fc37.x86_64.rpm

五、安装rpm包
1、更新内核

# cd kernel-bcachefs 
# yum install *.rpm

2、更新grub

# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-6.1.0+"
args="ro rd.lvm.lv=fedora_fedora/root rhgb quiet"
root="/dev/mapper/fedora_fedora-root"
initrd="/boot/initramfs-6.1.0+.img"
title="Fedora (6.1.0+) 34 (Server Edition)"
id="39e4ea3df0894617a65b08b509a624e2-6.1.0+"
index=1
kernel="/boot/vmlinuz-5.11.12-300.fc34.x86_64"
args="ro rd.lvm.lv=fedora_fedora/root rhgb quiet"
root="/dev/mapper/fedora_fedora-root"
initrd="/boot/initramfs-5.11.12-300.fc34.x86_64.img"
title="Fedora (5.11.12-300.fc34.x86_64) 34 (Server Edition)"
id="39e4ea3df0894617a65b08b509a624e2-5.11.12-300.fc34.x86_64"
index=2
kernel="/boot/vmlinuz-0-rescue-39e4ea3df0894617a65b08b509a624e2"
args="ro rd.lvm.lv=fedora_fedora/root rhgb quiet"
root="/dev/mapper/fedora_fedora-root"
initrd="/boot/initramfs-0-rescue-39e4ea3df0894617a65b08b509a624e2.img"
title="Fedora (0-rescue-39e4ea3df0894617a65b08b509a624e2) 34 (Server Edition)"
id="39e4ea3df0894617a65b08b509a624e2-0-rescue"
 
 
 
[root@fedora ~]# grubby --set-default /boot/vmlinuz-6.1.0+
The default is /boot/loader/entries/39e4ea3df0894617a65b08b509a624e2-6.1.0+.conf with index 0 and kernel /boot/vmlinuz-6.1.0+
 
[root@fedora ~]# reboot

3、安装bcachefs-tools

# cd bcachefs-tools
# yum localinstall  bcachefs-tools-v0.1_654_gd1def9a-1.fc37.x86_64.rpm

4、验证

# lsmod| grep bcachefs
bcachefs 1540096 2
mean_and_variance 16384 1 bcachefs
lz4_compress 36864 1 bcachefs

六、bcachefs文件系统管理

1、单盘管理

[root@fedora ~]# bcachefs format /dev/sdb
[root@fedora ~]# mount -t bcachefs /dev/sdb /mnt/
[root@fedora ~]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           3.9G     0  3.9G   0% /dev/shm
tmpfs                           1.6G  972K  1.6G   1% /run
/dev/mapper/fedora_fedora-root   79G  4.4G   75G   6% /
tmpfs                           3.9G     0  3.9G   0% /tmp
/dev/sda1                      1014M  232M  783M  23% /boot
tmpfs                           796M     0  796M   0% /run/user/0
/dev/sdb                        9.2G  1.8M  9.0G   1% /mnt

2、cache模式
格式化设备,其中sdb是ssd,sdc是hdd

# bcachefs format /dev/sd[bc] \
    --foreground_target /dev/sdb \
    --promote_target /dev/sdb \
    --background_target /dev/sdc

挂载设备

# mount -t bcachefs /dev/sdb:/dev/sdc /mnt

查看分区

# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           3.9G     0  3.9G   0% /dev/shm
tmpfs                           1.6G  972K  1.6G   1% /run
/dev/mapper/fedora_fedora-root   79G  4.4G   75G   6% /
tmpfs                           3.9G     0  3.9G   0% /tmp
/dev/sda1                      1014M  232M  783M  23% /boot
tmpfs                           796M     0  796M   0% /run/user/0
/dev/sdb:/dev/sdc               101G  2.8M   99G   1% /mnt

查看配置

# bcachefs show-super /dev/sdb
# bcachefs fs usage /mnt
Filesystem: 23d36eb5-e376-4e42-92b6-0214e2613468
Size:                   108662672896
Used:                      932446208
Online reserved:                   0
 
Data type       Required/total  Devices
btree:          1/1             [sdb]                        2883584
 
(no label) (device 0):           sdb              rw
                                data         buckets    fragmented
  free:                            0           40616
  sb:                        3149824              13        258048
  journal:                  83886080             320
  btree:                     2883584              11
  user:                            0               0
  cached:                          0               0
  parity:                          0               0
  stripe:                          0               0
  need_gc_gens:                    0               0
  need_discard:                    0               0
  erasure coded:                   0               0
  capacity:              10737418240           40960
 
(no label) (device 1):           sdc              rw
                                data         buckets    fragmented
  free:                            0          406387
  sb:                        3149824              13        258048
  journal:                 838860800            3200
  btree:                           0               0
  user:                            0               0
  cached:                          0               0
  parity:                          0               0
  stripe:                          0               0
  need_gc_gens:                    0               0
  need_discard:                    0               0
  erasure coded:                   0               0
  capacity:             107374182400          409600
[root@fedora ~]#

3、Ein etwas anderes Beispiel als RAID6 mit verschiedenen Schreib-/Lesecaches:(2副本+纠删码+cache模式)

# bcachefs format \
--group=ssd /dev/sdb /dev/sdc
--group=nvme /dev/sdh /dev/sdi
--group=hdd /dev/sdd /dev/sde /dev/sdf /dev/sdg \
--replicas=2 --erasure_code \
--foreground_target=ssd \
--background_target=hdd \
--promote_target=nvme
# mount -t bcachefs /dev/sdb:/dev/sdc:/dev/sdh:/dev/sdi:/dev/sdd:/dev/sde:/dev/sdf:/dev/sdg /mnt

4、RAID1(2副本)

# bcachefs format --replicas=2 /dev/sdb /dev/sdc
# mount -t bcachefs /dev/sda1:/dev/sdb1 /mnt

5、erasure Coding

erasure Coding ist eine Art RAID5/6, genaueres dazu gib es hier https://www.storage-insider.de/was-ist-erasure-coding-a-589045/

6、RAID5 (2副本+1纠删码)

# bcachefs format --replicas=2 --erasure_code /dev/sdb /dev/sdc /dev/sdd

7、RAID6 (三副本+1纠删码)

# bcachefs format --replicas=3 --erasure_code /dev/sdb /dev/sdc /dev/sdd /dev/sde

einen Ordner anders behandeln
mittels bcachefs setattr kann man für bestimmte Ordner/Dateien die Eigenschaften ändern, im folgenden Beispiel möchten wir das unsere PostgreSQL eine NVMe als Lese-/Schreibcache nimmt und da sich SQL gut Komprimnieren lässt machen wir das auch gleich

# bcachefs setattr --foreground_target=/dev/nvme1 --background_target=/dev/nvme2 --compression=lz4 /var/lib/postgresql/

七、总结:

虽然Bcachefs有一些吸引人的特点,但它也有一些缺点和限制,这些需要在考虑使用它时加以注意。以下是一些常见的Bcachefs的缺点:

  • 实验性:Bcachefs仍然处于开发阶段,尚未被正式纳入主线Linux内核。这意味着它可能不如其他稳定的文件系统那样经过广泛的实际应用和测试。尽管在测试和验证中取得了良好的结果,但使用Bcachefs时需要注意实验性和可能的不稳定性。

  • 不成熟的工具和生态系统:随着Bcachefs的普及,与其相关的工具和生态系统的发展可能相对较慢。这可能导致在管理、维护和故障排除方面缺乏一些成熟的工具和支持。

  • 不适用于旧硬件:Bcachefs设计时考虑到了现代硬件的特性和需求,因此可能不适合较旧的硬件平台。对于一些较老的系统,可能缺乏对Bcachefs的支持或性能可能不如预期。

  • 不同版本的兼容性:由于Bcachefs仍在开发中,不同版本之间可能存在不兼容性。这可能导致在升级或切换Bcachefs版本时出现问题。

  • 不支持某些高级功能:尽管Bcachefs提供了许多高级功能,但并不支持所有现有文件系统的功能。某些特定的功能或用例可能无法得到满足。

重要提示:在决定使用Bcachefs之前,建议仔细考虑该文件系统的实验性质、目前的开发状态以及您的具体需求。在生产环境中使用Bcachefs之前,请先评估其可靠性、性能和兼容性,以及与其他相关软件和工具的整合。最好在非关键环境中进行测试和评估。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐