文章目录
A、Bcache简介
# bcache简介
bcache 是一个 Linux 内核块层超速缓存。可使用一个或多个高速磁盘(例如 SSD)作为一个或多个速度低速磁盘的超速缓存。
# bcache目前的支持情况
须linux kernel 大于3.10,kernel 5.7之后修复了大量bug,目前对bcache支持最好的发行版是SUSE Linux、OpenEuler
# 主要功能
1,单个cache device 可以带多个 backing device
2,在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。
3,SSD 拥塞时限制传至 SSD 的流量。
4,高效的写回实施方案。脏数据始终按排序顺序写出。(SSD 友好(支持 COW,减少写放大,保持顺序性))
5、backing device 可以在运行时 attach/detache
6、支持在运行时修改 cache mode
7、支持发现并 bypass 顺序读写
8、IO sensitivity (REQ_SYNC/REQ_META/REQ_FLUSH/REQ_FUA)
# bucket size(储存桶大小:默认值为128KB)这是cache device的概念
储存桶大小应与cache device 的擦除块大小(erase block size)匹配,以便减少写放大现象。
# block size(块大小:默认值512B),该值应与bcaking device 扇区大小相匹配
表示cache设备数据块大小应 与 backing设备的扇区大小( hardware sector size)匹配,(HDD通常为 512B 或 SSD通常为 4kB)
# 若是linux kernel 的pagesize 大小不是4KB(即4096),那么重启后,bcache设备是未注册状态,需手工注册,当然x86下基本默认都是4KB
如何查看linux kernel 的pagesize
root@2ceph03:~# getconf PAGESIZE
4096
# BACKING DEVICE 相关目录
实际设备目录: /sys/block/<bdev>/bcache
以下目录软链接到实际设备目录:
/sys/block/bcache*/bcache
/sys/fs/bcache/<cset-uuid>/bdev*
# bcache的相关介绍文章
https://wiki.archlinuxcn.org/wiki/Bcache
https://www.modb.pro/db/93044
https://antidebug.cn/bcache/ # 推荐
https://markrepo.github.io/maintenance/2018/09/10/bcache/
https://evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt
https://www.kernel.org/doc/html/latest/admin-guide/bcache.html # 推荐
https://billtian.github.io/digoal.blog/2016/09/19/01.html 推荐
https://www.kernel.org/doc/Documentation/bcache.txt
https://www.cnblogs.com/zimufeng/p/6640439.html 推荐
https://gist.github.com/NUABO/08e1aa3c0e40b62eb00b78b22858c091 # 推荐
B、Bcache 的错误处理
bcache尝试透明地处理来自/来自cache device 的IO错误,而不影响正常操作;如果它看到太多错误(阈值是可配置的,默认为 0),它会关闭缓存设备并将所有支持设备切换到直通模式
- 对于从cache device 的读取,如果出错,我们只需重试从backing device 读取。
- 对于writethrough下的写入,如果对cache device 的写入发生错误,会使缓存中该 lba 处的数据无效(即,与我们对绕过缓存的写入所做的操作相同)
- 对于writeback下的写入,我们目前将该错误传递回文件系统/用户空间。这可以改进 - 我们可以将其作为跳过缓存的写入来重试,这样我们就不必在写入时出错。
- 当我们分离(即detach) cache device 和 backing device时,(如果我们在写回模式下运行)首先尝试刷新所有脏数据。
C、Bcache 的垃圾回收
由于Bcache 在存储数据和元数据时,均是追加写,因此需要及时进行垃圾回收,回收存储空间以备后续申请使用。
1、Bcache 何时触发垃圾回收
每写入缓存总容量的1/16数据量后,触发一次垃圾回收
2、如何进行垃圾回收(通过扫描B+tree中的bkey引用的存储通来进行的)
1、跳过无效bkey。
2、对于脏bkey,进行moving gc操作,将缓存数据移动到其他bucket中,提示bucket存储密度。
3、对于干净的bkey,将其置为无效,并将它引用的bucket对应的数据结构中的引用计数为-1。
4、当某个bucket的引用计数为0时,这个bucket就可以被回收了。
回收后的空闲bucket,被记录在不同优先级的free list中
3、Bcacahe 更加积极的脏数据回写
1、当脏数据达到cache device容量的10%,启动回写线程。
2、脏数据越多,分给回写线程的带宽越多,则业务IO的性能会下降。
3、当脏数据超过cache device 容量的40%,部分IO请求会跳过缓存直接访问后端设备。会进一步降低业务IO性能用以保证回写线程能够处理更多的脏数据
4、当脏数据超过cache device 容量的70%,后续业务IO将直接跳过缓存,避免垃圾回收和空间分配算法死锁。
因此:Bcache的整体IO性能会随着缓存脏数据的增加而逐步可预期的降低,避免了断崖式IO突降。直至降至backing device的IO性能。
D、Bcache 的4个缓存策略 + Bcache 缓存的4个状态
# bcache的四个cache模式
writethrough: # 直写策略(默认策略),必须cache 和 backing都写入成功, 才算写入成功,适用于读多写少的场景,对写入场景提升不大, 可以保证数据的强一致性
writeback: # 回写策略,数据先写cache,只要cache写入成功, 写入请求立即返回成功. cache中的脏数据会由后台线程定时刷写到backing盘中. 因此对于写入, 该策略会有明显的性能提升(除非到了SSD的性能瓶颈). 但是可能会造成数据丢失, 比较适用于底层有独立供电的RAID卡的服务器或者对数据一致性要求不是很高的场景
writearound: # 绕写策略,(测试,顺序写吞吐率有所提高)数据写入时, 绕过cache, 直接写入到bcaking盘中. 可以防止cache因写I/O而填满, 导致以后不可重新读取. 缺点是: 当数据第一次读取, 由于写入时绕过了cache, 因此会有cache从backing加载数据的操作
none: # 忽略cache device,直接写 backing device
# bcache 缓存的4个状态
# state的几个状态:
no cache: # 该backing device没有attach任何caching device
clean: # 一切正常,缓存是干净的
dirty: # 一切正常,已启用回写,缓存是脏的
inconsistent: # 遇到问题,后台设备与缓存设备不同步
B、如何创建backing device 和 cache device
B1、安装bcache-tools
apt install bcache-tools
B2、make-bcache 用法介绍
# bcache 设备种类
1. backing device: 指后端设备。名字叫做bcacheX,若lsblk 只看到一个bcache0,那么这就是backing device,因为没有绑定 backing device的cache device 是不会显示为bcache0的
2. cache device: 指缓存设备,通常为SSD。
# make-bcache用法介绍
root@2ceph02:~# make-bcache
Please supply a device
Usage: make-bcache [options] device
-C, --cache Format a cache device # 创建cache device
-B, --bdev Format a backing device # 创建backing device,可以跟多个
-b, --bucket bucket size
-w, --block block size (hard sector size of SSD, often 2k)
-o, --data-offset data offset in sectors
--cset-uuid UUID for the cache set
--writeback enable writeback
--discard enable discards
--cache_replacement_policy=(lru|fifo)
-h, --help display this help and exit
B3、使用bcache分为三个步骤
# 使用bcache分为三个步骤:
1. 创建backing和cache设备
2. 注册backing和cache设备 # 所有设备在使用之前都需要注册。
3. 绑定backing和cache设备 # 一个cache设备可以绑定到多个backing设备,但是一个backing设备不可以绑定多个cache设备。
B4、开始创建backing device 和 cache device
# 1、创建backing device(后端设备可以是整个设备、一个分区或任何其他标准块设备)
#make-bcache -B /dev/vdb # 不指定cache策略,默认是writethrough
make-bcache -B /dev/vdb --writeback
# 2、创建cache device
make-bcache -C /dev/vde
# 额外介绍:上面使用了默认的块大小和储存桶大小,分别为 512 B 和 128 KB(合理配置这两个值可以降低 写放大问题)
如果使用具有 4k 扇区的(backing device)硬盘和具有 2 MB 擦除块大小的 (cache device)SSD,创建命令如下:
make-bcache --block 4k --bucket 2M -C /dev/vde
# 3、获取cache device 的 cset.uuid 信息
root@2ceph03:~# bcache-super-show /dev/vde1 | grep cset.uuid
cset.uuid 4e7b51b6-2402-41ca-a9ed-8e27b62ad0ed
# 4、将cache device 附加给 后端backing device (即bcacheX)
# 此操作,只需执行一次,下次重新启动时,只需重新注册所有 bcache 设备即可(正常情况重启后无需再次注册)
echo "4e7b51b6-2402-41ca-a9ed-8e27b62ad0ed" > /sys/block/bcache0/bcache/attach
# 5、使用 lsblk 查看关联情况
vdd 252:48 0 60G 0 disk
└─bcache0 251:0 0 60G 0 disk
vde 252:64 0 80G 0 disk
├─vde1 252:65 0 40G 0 part
│ ├─bcache0 251:0 0 60G 0 disk
# 6、多设备支持:make-bcache 可同时准备和注册多个backing device 与一个cache device
# 一步完成backing device 和 cache device 的创建和绑定(将1、2、3、4 步骤一键完成)
make-bcache -C /dev/vde -B /dev/vdb /dev/vdc /dev/vdd
#下面是一带一的情况(创建设备后,模块bcache会开机自动挂载)(生产环境推荐将cache device 分区后再创建,便于后期维护)
make-bcache -C /dev/vde1 -B /dev/vdb
make-bcache -C /dev/vde2 -B /dev/vdc
make-bcache -C /dev/vde3 -B /dev/vdd
C、bcache 自启动脚本(正常不需要手动执行)
# 1、加载内核模块
modprobe bcache
# 2、注册设备(即包含cache device 又包含 backing device)
echo /dev/vdb > /sys/fs/bcache/register
echo /dev/vdc > /sys/fs/bcache/register
# 重启后,不需要重新创建cache, backing设备,不需要重新绑定backing和cache设备。
D、如何区分 设备是 cache device 还是 backing device
1、这就是 cache device
root@2ceph02:~# bcache-super-show /dev/vde1 | grep sb.version
sb.version 3 [cache device]
2、这就是 backing device
root@2ceph02:~# bcache-super-show /dev/vdb | grep sb.version
sb.version 1 [backing device]
E、删除cache device、重建cache device
- 每一块低速盘(HDD)在经过make-bcache后, 都会对应一个bcacheX设备, 删除低速盘就是将对应的bcacheX设备停掉(删掉).
- 如果该bcacheX设备有绑定前端盘(SSD), 需要先解除与前端盘的关联,然后再对后端盘进行删除
1、确定 cache device 的 cset.uuid
bcache-super-show /dev/vde1 | grep cset.uuid
2、将 cache device 与 backing device 分离
# (该步骤可不做:若此时 backing device,没有启用即 lsblk 看不到 bcacheX 设备)
echo "cset.uuid" > /sys/block/bcache0/bcache/detach
3、unregister cache device(注销 cache device)
# cache device 的 注册信息是放在 /sys/fs/bcache/<cset.uuid> 目录下(大致如下)
root@2ceph01:~# ls /sys/fs/bcache/
4b74a19f-2988-4ab6-94ed-a42e6fc93846 pendings_cleanup register register_quiet
# unregister cache device
echo 1 >/sys/fs/bcache/4b74a19f-2988-4ab6-94ed-a42e6fc93846/unregister
# 执行该操作后,您在 /sys/fs/bcache/ 目录下看不到 以<cset.uuid>命名的目录了。
4、现在您可以考虑,释放格式化 之前的 cache device
wipefs -af /dev/vde1
make-bcache -C /dev/vde1
F、停用backing device、销毁 backing device
1、先确定backing device 有没有mount,若是有先umount,若是ceph osd ,请先 stop ceph osd
2、将 cache device 与 backing device 分离 detach,
# 解绑后backing device 可以继续使用,只是没有cache device的加速
echo "cset.uuid" > /sys/block/bcache0/bcache/detach
3、停用 backing device(正常情况,重启系统后,该backing device 会正常运行,lsblk还能看到)
# echo 1 > /sys/block/vdb/vdb1/bcache/stop
echo 1 > /sys/block/vdb/bcache/stop # 等同于 echo 1 > /sys/block/bcache0/bcache/stop
4、如何再次启用 backing device(当然重新系统也是一个方法)
echo /dev/vdb > /sys/fs/bcache/register
5、停用后,如何再次创建backing device
wipefs -af /dev/vdb
make-bcache -B /dev/vdb --writeback
G、如何正确 为backing device 更换 cache device
# A、若因cache device所在磁盘故障,进而更换cache device
1、umount backing device,或者 停止其他的相关服务 如 ceph osd
2、用新盘创建cache device
wipefs -af /dev/vdf1
make-bcache -C /dev/vdf1
# make-bcache --block 4k --bucket 2M -C /dev/vdf1
3、获取新盘 cacahe device 的 cset.uuid
bcache-super-show /dev/vdf1 | grep cset.uuid
4、将 新的 cache device 与 backing device 进行绑定
echo "cset.uuid" > /sys/block/bcache0/bcache/attach
5、重新mount,或者启用 ceph osd
# B、老的cache device正常,需要更换为更牛逼的cache device
1、停止backing device上相关服务,如umount,或者ceph osd
2、获取老cache device的cset.uuid
bcache-super-show /dev/vde1 | grep cset.uuid
3、将 老的cache device 与 backing device 解绑
# 若是采用writeback模式,会将脏数据刷新到backing device
echo "old cset.uuid" > /sys/block/bcache0/bcache/detach
4、注销老的cache device
echo 1 >/sys/fs/bcache/"old cset.uuid"/unregister
5、现在可以格式化老的cache device(当然你不格式化也没问题,不管他就行,或者你不需要执行 4 这步,直接格式化也可以)
wipefs -af /dev/vde1
6、格式化新的 cache device,并创建为 cache device,并获取其 cset.uuid
wipefs -af /dev/vdf1
make-bcache -C /dev/vdf1
# make-bcache --block 4k --bucket 2M -C /dev/vdf1
bcache-super-show /dev/vdf1 | grep cset.uuid
7、将 新的cache device 与 backing device 绑定(这就完工了)
echo "new cset.uuid" > /sys/block/bcache0/bcache/attach
I、bcache的调优参考
I1、关于writeback策略的常规优化
# 1、设置writeback提高写性能
#数据写入时, 只要SSD中写入成功, 写入请求就立即返回. SSD中的脏数据会由后台线程定时刷写到HDD盘中.
#因此对于写入, 该策略会有明显的性能提升(除非到了SSD的性能瓶颈). 但是可能会造成数据丢失, 比较适用于底层有独立供电的RAID卡的服务器或者对数据一致性要求不是很高的场景
echo writeback > /sys/block/bcache0/bcache/cache_mode
# 2、允许缓存顺序I/O
# 默认情况下, bcache不会缓存顺序IO和大文件, 所以顺序写性能应该没什么提升. 可以打开顺序IO缓存
echo 0 > /sys/block/bcacheX/bcache/sequential_cutoff
# 3、还原默认的顺序IO阈值(4M),当然你也可以调大点。
# 也就是说,写io大于4M的,直接写到backing device,不在cache device 上缓存。
# 一旦顺序IO超过这个阈值,超过4M的部分就会绕过cache device,直接写入backing device,bcache是如何确定顺序io的,因为他会跟踪128个最近的io
echo "4M" > /sys/block/bcacheX/bcache/sequential_cutoff
# 4、如何防止cache设备成为瓶颈(关闭拥塞控制项,即关闭cache 旁路)
# 这种情况最可能发生在一块缓存磁盘带多个普通backing盘, 写入或读取处理不及时, 就会形成堵塞, 这时我们可以关闭拥塞控制项. 默认情况下, 当读请求超过2ms, 写请求超过20ms时就会直接读写backing盘
# bcache会跟踪每个IO,如果IO的时间超过阈值,则旁路cache设备,直接读写backing设备。
# 如果你的SSD足够强大,可以不跟踪,减少跟踪的开销。
echo 0 > /sys/fs/bcache/{cache set uuid}/congested_read_threshold_us
echo 0 > /sys/fs/bcache/{cache set uuid}/congested_write_threshold_us
# 关闭旁路的另一个好处是,所有的离散读写都会经过cache设备,从而不会导致cache missing。
I2、writeback模式下,控制缓存回写时机的机制
# 1、当缓存模式为writeback,控制缓存回写时机的机制
# 有几个参数来控制缓存的回写时机, 参数均在: /sys/block/bcache0/bcache/ 目录下
writeback_percent: # 如果非零, bcache会尝试保持这个百分比的缓存脏数据, 限制后台回写并使用PD控制器平滑调整比率, 默认10 (脏数据量占SSD磁盘空间的百分之十时才开始回写, 否则一直在SSD中?)
writeback_delay: # 当脏数据写入缓存并且之前没有包含任何数据时, 在启动写回之前等待一些秒数. 默认为30
writeback_rate: # 每秒扇区速率, 如果writeback_percent非零, 则回写被限制到这个速率. 由bcache不断调整, 但可能也可以由用户设置
writeback_running: # 如果关闭, 则不会发生脏数据的回写, 脏数据仍将被添加到缓存中, 直到其将要满时. 仅用于基准测试. 默认开启
# 2、将writeback_percent调整至0, 也就意味着会将所有的dirty data都刷到backing device中
root@2ceph03:~# echo 0 > /sys/block/bcache0/bcache/writeback_percent
J、bcache常见维护操作
# 添加backing数据盘
make-bcache -B /dev/sdb
# 添加cache缓存盘
make-bcache -C /dev/nvme0n1
# 查看设备UUID
blkid /dev/bcache0
# 查看缓存盘的cset.uuid
bcache-super-show /dev/nvme0n1
# 绑定缓存盘
echo "dcddc3f8-e1d4-4ecf-8510-67158a5e3958" >/sys/block/bcache0/bcache/attach
# 查看缓存状态
root@2ceph03:~# cat /sys/block/bcache0/bcache/state
clean
# 查看缓存数据量(当缓存策略为writeback时, 运行一段时间后会有一定的缓存数据量)
cat /sys/block/bcache0/bcache/dirty_data
# 查看缓存模式
cat /sys/block/bcache0/bcache/cache_mode
# 查看cache device 多久会 刷写到 backing device (默认30,单位s)
cat /sys/block/bcache0/bcache/writeback_delay
# 更改策略(可选参数有 writethrough、writeback、writearound、none)
echo writeback > /sys/block/bcache0/bcache/cache_mode
# 启用backing device
echo 1 > /sys/block/vdb/bcache/running
# 或者 echo /dev/vdb > /sys/fs/bcache/register
# 停用backing device
echo 1 > /sys/block/vdb/bcache/stop
#echo 1 > /sys/block/vdb/vdb1/bcache/stop
# 进一步注销
echo 1 >/sys/fs/bcache/f2fc2a81-094f-4b20-8fc8-9da74c59007e/unregister
# 强制将cache数据刷到backing device上面
echo 0 > /sys/block/bcache0/bcache/writeback_percent
# 让cache device脱机
echo 1 > /sys/block/vdX/vdX[Y]/bcache/detach
# 安全移除cache device(解绑cache device 和 backing device)
# 如果缓存中有脏数据,会先刷新到backing device
echo <cache-set-uuid> > /sys/block/bcache0/bcache/detach
# 注销缓存盘
# 通过缓存盘的CACHE_SET_UUID,在/sys/fs/bcache/<cset.uuid>/unregister写入1,即可进行注销
echo 1 >/sys/fs/bcache/f2fc2a81-094f-4b20-8fc8-9da74c59007e/unregister
# 手动触发 GC
echo 1 > /sys/fs/bcache/34e3bd83-cdab-466d-84d6-780f7c0d538f/internal/trigger_gc
# 查看backing device 对应那块物理磁盘
root@2ceph03:~# ls -l /sys/block/bcache0/bcache
lrwxrwxrwx 1 root root 0 Jun 29 17:33 /sys/block/bcache0/bcache -> ../../../pci0000:00/0000:00:06.0/virtio3/block/vdb/bcache
# 查看backing device 的 cache device
root@2ceph02:~# ls -l /sys/block/bcache0/bcache/cache
lrwxrwxrwx 1 root root 0 Jun 29 17:38 /sys/block/bcache0/bcache/cache -> ../../../../../../../fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505
# 查看 average_key_size - btree 中 data per key 的平均大小
cat /sys/fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505/average_key_size
# 查看 block_size - cache device 的 block 大小
cat /sys/fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505/block_size
# 查看 btree_cache_size - btree 占用的内存大小
cat /sys/fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505/btree_cache_size
# 查看 bucket_size
cat /sys/fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505/bucket_size
# 查看 cache_available_percent - cache device 中不包含 dirty data 的百分比
cat /sys/fs/bcache/123ec903-ad67-4276-bd86-3c8a4f4de505/cache_available_percent
# 清除磁盘(谨慎使用)
wipefs -a /dev/sdb
K、常见问题
bcache 问题的排查思路,都是看 dmesg 日志信息
K1、无法创建前后端设备
# 现象
root@2ceph03:~# make-bcache -C /dev/vde1 -B /dev/vdb
Already a bcache device on /dev/vde1, overwrite with --wipe-bcache
# 原因:有脏数据,可能之前vdb 和 vde1 创建过bcache
# 解决办法:创建时增加格式化参数
make-bcache -C /dev/vde1 -B /dev/vdb --wipe-bcache
wipefs -af /dev/vde1
K2、创建bacache设备时反馈 Device or resource busy
# 现象
root@2ceph03:~# make-bcache -C /dev/vde1 -B /dev/vdb --wipe-bcache
Can't open dev /dev/vde1: Device or resource busy
# 排除原因,看看是不是cache device 还在线
root@2ceph02:~# ls /sys/fs/bcache/ # 有ef这种一窜开头的文件夹说明还有cache device在线
ef80530c-c5e7-40c9-97cd-13e7172d1d75 pendings_cleanup register register_quiet
# 解决办法:注销cache
echo 1 >/sys/fs/bcache/ef80530c-c5e7-40c9-97cd-13e7172d1d75/unregister
root@2ceph02:~# ls /sys/fs/bcache/
pendings_cleanup register register_quiet
# 注销后,建议 格式化刚才反馈 busy的盘后,即可重新创建
wipefs -af /dev/vde1
K3、若创建cache device 和 backing device后,看不到bcacheX设备
# 现象:lsblk 看不到 bcache0 等设备说明backing device 未注册
# 解决办法:重启系统,或者手动将 backing device 像bcache 注册下
echo /dev/vdb > /sys/fs/bcache/register
K4、cache device 不见了,或者坏了,如何强制运行backing device
假如您的backing device 设备盘符为vdb,您可以强制启用backing device(相当于没有cache了,backing 也是可以运行的)
echo 1 > /sys/block/vdb/bcache/running # 等同于 echo /dev/vdb > /sys/fs/bcache/register
# 如何是用分区创建的bcache,则 bcache 目录将为在/sys/block/vdb/vdbX/bcache
echo 1 > /sys/block/vdb/vdb1/bcache/running
# 如果将来该cache device 又出现了,backing device 仍将使用该缓存集,但所有缓存的数据都将失效。
# 如果缓存中有脏数据(之前未写入到backing 中的数据),不要指望文件系统是可恢复的 - 尽管 ext4 的 fsck 确实能创造奇迹,但您将遇到大量文件系统损坏。
K5、在没有bcache的情况下,如何恢复数据
如果 bcache 在内核中不可用,则原本backing device 上的文件系统在 8KiB 偏移处仍然可用。
因此,可以通过使用 --offset 8K 创建的支持设备的 Loopdev,或者最初使用bcache make格式化 bcache 时由 --data-offset 定义的任何值。
例如:
# losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev
losetup -o 8192 /dev/loop0 /dev/vdb
这应该在 /dev/loop0 中显示您未修改的backing device 数据
如果您之前的缓存策略处于 writethrough 模式,那么您可以安全地丢弃缓存设备而不会丢失数据。
# 现在您可以mount 设备 /dev/loop0
K6、其他问题集合
问:一个cache device 对 多个backing device,对cache 分区和不分区两种方式会有性能上的差异么?
答:没有差异
问:cache deivce size : backing device size 有推荐的值么?
答:没有,这个需要更具实际情况,比较多的人采用 “1~2:10”
问:cache device 坏了,可以恢复数据么?
答:存在脏数据,那么脏数据是无法恢复的,可以使用linux 软件raid。
问:cache device 随着 脏数据的增加,性能会慢慢下降,最差的情况就是和 backing device 一个性能么?
答:是的,bcache 为了避免后期出现不可预期的断崖式性能下降,是会持续周期性的将脏数据刷写到backing device,不会等达到某个脏数据存储阈值才启动刷写。
问:backing device 设备热插拔后,盘符变了,对bcache 有影响没有(也就是常说的bcache盘符漂移问题)?
答:,没有影响,bcache使用uuid来attach的,不是盘符名称
问:若是直接挂载bcache设备,有什么需要注意的
答:注意一定要使用uuid 来挂载,不能使用 /dev/bcache0 这样的名字来挂载,因为bcache的盘符的0,1,2等数字,是根据初始化的先后顺序来确定的,每次重启都会进行初始化。
问:bcache 支持热部署么,(若需要对现有的backing device 重新格式化)
答:不支持,必须先wipefs ,然后重启系统(kernel 5.15是这样的)
问:格式化后端设备时,也会显示bucket信息,后端设备是否使用了bucket?
答:不,它们只是共享相同的超级块格式。
问:这个报错什么意思“Bad bucket size 0”
答:你的bucket size太大了。
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论