存储改造与 bcache 的配置和使用
博主的老电脑有一块机械硬盘(320G),还有一块不甚靠谱的固态硬盘(120G)。去掉留给 Windows 的空间,机械硬盘上有 200G ,用于放置 /home 和虚拟机,但没有使用 LVM。而固态硬盘上有 44G 给 Linux 系统使用,使用了 LVM。由于处理器不支持 AES-NI ,博主只加密了机械硬盘上的分区。
后来,由于不使用 LVM 带来的不灵活性,以及要使用 bcache 加速,博主决定重新处理机械硬盘上的 /home 分区。
改造
准备工作:安装 bcache-tools
,进入单用户模式
首先,要备份 /home 。dump 系命令在备份和恢复速度上与 tar 相比有一定优势。又因为博主的 /home 使用了 XFS ,于是, xfsdump -f <dump path> /home
备份。成功备份后,用wipefs -a
摧毁文件系统签名,以创建 bcache 设备。
为了防止加密数据泄漏,这里使用的 bcache 缓存设备只能缓存加密过的数据(缓存位于固态硬盘,而固态硬盘上的 LVM 卷组没有加密),需要先建立 bcache 设备。make-bcache -B <低速设备> -C <高速设备>
,尽量在一个命令中完成,避免需要手动操作以添加缓冲。操作后,/dev/bcache0
就出现了。接着,加密这个设备。执行cryptsetup luksFormat --key-size 512 --pbkdf argon2id --type luks2 --integrity hmac-sha256 /dev/bcache0
,这里,使用了 LUKS2 并使用了数据完整性验证特性,防止恶意破坏。由于使用了 integrity ,cryptsetup 必须(虽然可以跳过)清零加密后的设备以避免出现完整性验证失败的情况。一般而言,即使是略老的处理器,也通常不会成为完整性验证的瓶颈,瓶颈一般是硬盘。在约两个小时后,加密设备建立成功。
接着,建立卷组。此处就不赘述了。再恢复 /home 的文件,这次是用 xfsrestore ,恢复到没有挂载的 XFS 设备。最后,还有相当关键的一步——对应修改配置文件。由于动了分区结构和加密卷,/etc/fstab
和/etc/crypttab
都需要修改。crypttab
改为 <path> /dev/bcache0 none luks
,而fstab
根据实际情况相应修改。
最重要的一步来了——按下 ctrl-alt-del ,电脑重启,很快,提示输入加密密码。输入密码后,桌面管理器很快出现,登录,依然是熟悉的桌面,改造成功。
bcache 的使用
bcache 自动区分冷热数据(使用 LRU 算法),智能安排缓存。
bcache 的观测和控制全部通过/sys
目录,对于/dev/bcache<n>
而言,对应的目录是/sys/block/bcache<n>
,目录中有几项相当重要的文件。
/sys/block/bcache0/bcache/state
: bcache 设备状态
可能值:
- no cache :从没有附加过缓存设备。通过
attach
文件把缓存加上去 - clean :正常,没有数据要从缓存设备写回后备设备。
- dirty :正常,有脏数据没有写回后备设备。
- inconsistent :有麻烦了。缓存设备不存在,且其中含有脏数据。
/sys/block/bcache0/bcache/stats_*/cache_hit_ratio
:(不同时间内)缓存命中率,如果长期过低,可能是缓存过小或工作负载不适合。
为了提高写入性能,建议将cache_mode
设置为 writeback 。此选项不会带来显著的数据安全风险。