linux 块加速之(bcache 操作介绍+常见问题汇总)

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      # 推荐

file

B、Bcache 的错误处理

bcache尝试透明地处理来自/来自cache device 的IO错误,而不影响正常操作;如果它看到太多错误(阈值是可配置的,默认为 0),它会关闭缓存设备并将所有支持设备切换到直通模式

  1. 对于从cache device 的读取,如果出错,我们只需重试从backing device 读取。
  2. 对于writethrough下的写入,如果对cache device 的写入发生错误,会使缓存中该 lba 处的数据无效(即,与我们对绕过缓存的写入所做的操作相同)
  3. 对于writeback下的写入,我们目前将该错误传递回文件系统/用户空间。这可以改进 - 我们可以将其作为跳过缓存的写入来重试,这样我们就不必在写入时出错。
  4. 当我们分离(即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

  1. 每一块低速盘(HDD)在经过make-bcache后, 都会对应一个bcacheX设备, 删除低速盘就是将对应的bcacheX设备停掉(删掉).
  2. 如果该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太大了。
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1155.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/6/30作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录