新钛云服已为您服务1048天
大咖专栏
什么是Bcache?
HDD一般具有较大的容量,并且可以实现良好的顺序读和写操作,但是在随机写和读时非常慢,因此它们的IOPS级别较低;SSD具有非常好的整体性能,尤其是较高的IOPS,因此随机写入和读取要比HDD更好,但是它们的容量却很小。
Bcache是Linux内核块设备层cache,支持多块HDD使用同一块SSD作为缓存盘。它让SSD作为HDD的缓存成为了可能。因此采用SSD作为缓存,HDD作为数据存储盘,既解决了SSD容量太小,又解决了HDD运行速度太慢的问题。
如今,一些SSD的顺序读写性能也比单个HDD盘要好,但无法与某些SAS的RAID进行比较。尽管如此,SSD在随机IO中表现仍然会更好。有一个可配置选项允许bcache也可以缓存顺序的读写。
将来,将有可能在缓存设备上使用raid机制,以提高可靠性和性能。另外也可以通过与lvm的结合,提高容量与扩展性。
Bcache缓存模式
“writeback”:
最高性能的缓存模式。
写入设备的数据首先写入ssd,然后异步复制到后端设备,在SSD上复制结束时,写入就被视为完成。为了安全起见,此处的机制始终确保在将数据完全写入后端设备(脏页)之前,不认为任何数据是安全的,因此,如果在SSD上仍存在数据时断电,则在下次启动时,数据将被推回支撑设备。这是使bcache能够和软件Linux Raid与具有BBU的硬件Raid设备一样安全。
“writethrough”:
安全缓存模式。
写入设备的数据将同时复制到ssd和HDD上,在HDD写入结束时,写入才被视为完成。因此,这往往比“writeback”更为安全,但缺乏一些性能。
“writearound”:
只读缓存模式。
写入设备的数据直接进入HDD,而根本不写入SSD,因此不会对写有任何性能提升。第一次读取此数据时,将从HDD中读取该数据。这样做的好处是有更多空间用于缓存读取,并减少了SSD的磨损。
“none” :
停用缓存功能(但/dev/bcache设备仍然可用)
所有这些caching_modes都可以在运行时进行修改。通过以下的命令可以知道当前的缓存模式:
sudo cat /sys/block/bcache0/bcache/cache_mode
writethrough [writeback] writearound none
更改cache_mode:
sudo su - -c 'echo writethrough > /sys/block/bcache0/bcache/cache_mode'
sudo cat /sys/block/bcache0/bcache/cache_mode
[writethrough] writeback writearound none
使用Bcache
Bcache可以在普通设备上使用,也可以在设备分区上使用。在本文中,我们将仅使用普通设备。
bcache需要的配置:
Bcache是从Linux-3.10开始正式并入内核主线的,因此,要使用Bcache,需要将内核升级到3.10及以上版本才行。(本文使用ubuntu 20.04)
固态硬盘
普通hdd硬盘
如果您使用的是Ubuntu 20.04,则可以如下进行测试。
系统更新,软件包安装:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install bcache-tools
确认每块磁盘的用途:
系统将位于/dev/sda
hdd硬盘(称为后端设备)将为/dev/sdb
ssd(称为缓存设备)将为/dev/sdc。
在配置缓存之前,我们需要清理磁盘上的所有数据。
我们使用dd命令将磁盘的前4kB置0:
sudo dd if=/dev/zero if=/dev/sdb bs=512 count=8
sudo dd if=/dev/zero if=/dev/sdc bs=512 count=8
wipefs -a /dev/sdb
wipefs -a /dev/sdc
现在您可以创建bcache了:
make-bcache -C /dev/sdc -B /dev/sdb
您还可以设置一些配置标志,即:
make-bcache -C /d