11
2024
07
16:56:40

bcachefs文件系统

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

1

# 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之前,请先评估其可靠性、性能和兼容性,以及与其他相关软件和工具的整合。最好在非关键环境中进行测试和评估。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/7051.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: