问题
bcache虽然在Linux内核的3.10版本已进入Linux内核主线,但是到2021年11月之前,在不支持4K分页的国产CPU服务器上使用bcache,attach设备命令成功,但是显示cache设备和主设备没有联系,重启后bcache盘丢失,从而无法在只支持分页>16K分页的某些国产CPU上使用。
原因分析(buffer_head和磁盘上数据不一致)
天翼云分析了bcache, buffer_head, pagecache之后,发现了社区版本的问题所在:社区版本在64K page时使用内核pagecache中的page时,出现偏移错误导致一旦出现超级块的更新(如attach)操作,pagecache中的数据将和磁盘中的数据不一致。从而出现丢失作为bcache设备特征的magic信息,导致重启后bcache设备丢失。
解决方案(正确使用内核buffer_head)