bcache 的使用


类型:LinuxApp,创建时间:Nov. 17, 2017, 2:50 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/106/。

下午花了一些时间测试 bcache 与 lvm cache 的使用。lvm cache 相对来说功能比较丰富,能够跟 raid1 一起组 lv,而 bcache 就只能简单地处理 cache。从安全性与性能的角度来看,我倒觉得 bcache 更为专业一些。接下来说一下 bcache 的基本使用:

首先要安装 bcache-tools

# zypper install bcache-tools

由两个设备创建 bcache 是很简单的事,假设 sda 是 ssd,而 sdb 是 hdd,

# make-bcache -w 4k -b 2m -C /dev/sda -B /dev/sdb

其中的-w参数指定底层设备的簇大小,而-b参数指定 bcache 管理的块大小。-C指定 cache 设备,-B指定 backend 设备。如果有多个 backend 设备可以写多个。

有些书籍或者 wiki 会介绍分别创建 cache 和 back 设备,然后再把 cache 设备注册到 bcache0 里面也是可以。。不过我直接一条命令会更简单一点。

再接下来的使用就没啥特殊的了。创建文件系统,挂载。。

bcache 不会把顺序写入的数据放在 cache 上面。所以如果既要做 raid 又要做 ssd cache 的时候,应该把 bcache 放在最上层。否则,在经过 raid 一层以后,顺序写的 io 操作有时候会变成随机写,bcache 不会识别,就会发生写放大,降低 IO 性能。

bcache 的操作大多可以通过内核的接口来做:

/sys/block/sdb/bcache里面列出了设备相关的 bcache 操作。比如:

  1. 把停止的 bcache 设备跑起来。这一招经常用于 cache 设备丢失的时候用。

    # echo 1 > /sys/block/sdb/bcache/running
    
  2. 把正在运行的 bcache 设备停止。

    # echo 1 > /sys/block/sdb/bcache/stop
    
  3. 查看状态:

    # cat /sys/block/sdb/bcache/state
    
  4. 修改 writeback 模式:

    # echo writethrough > /sys/block/bcache0/bcache/cache_mode
    
  5. 把 cache 上面的数据刷到 back 上面:

    # echo 0 > /sys/block/bcache0/bcache/writeback_percent
    
  6. 当 ssd 丢失的时候,可以看看有多少脏数据还没有写到 hdd 上面,这里的 sdb 是 back 设备:

    # cat /sys/block/sdb/bcache/dirty_data
    

    跑起来:

    # echo 1 > /sys/block/sdb/bcache/running
    

有两个问题未解决:

  1. 有时候 bcache 做错了,想把磁盘清掉重新弄。比如使用wipefs -af命令,系统会提示拒绝访问。不知道要怎么处理,只好进入 rescue 系统运行wipefs了。

  2. 把 root 分区安装到 bcache,虽然有很多资料可以做。但建议大家就算了,root 分区一般不是很大,放 ssd 上面是值得的。一块 128g 的 ssd 还能剩下 64g 做 bcache 也足够了。

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/106/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):