类型: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 操作。比如:
把停止的 bcache 设备跑起来。这一招经常用于 cache 设备丢失的时候用。
# echo 1 > /sys/block/sdb/bcache/running
把正在运行的 bcache 设备停止。
# echo 1 > /sys/block/sdb/bcache/stop
查看状态:
# cat /sys/block/sdb/bcache/state
修改 writeback 模式:
# echo writethrough > /sys/block/bcache0/bcache/cache_mode
把 cache 上面的数据刷到 back 上面:
# echo 0 > /sys/block/bcache0/bcache/writeback_percent
当 ssd 丢失的时候,可以看看有多少脏数据还没有写到 hdd 上面,这里的 sdb 是 back 设备:
# cat /sys/block/sdb/bcache/dirty_data
跑起来:
# echo 1 > /sys/block/sdb/bcache/running
有两个问题未解决:
有时候 bcache 做错了,想把磁盘清掉重新弄。比如使用wipefs -af
命令,系统会提示拒绝访问。不知道要怎么处理,只好进入 rescue 系统运行wipefs
了。
把 root 分区安装到 bcache,虽然有很多资料可以做。但建议大家就算了,root 分区一般不是很大,放 ssd 上面是值得的。一块 128g 的 ssd 还能剩下 64g 做 bcache 也足够了。
标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/106/。
暂时还没有任何评论。