在虚拟化场景下,从虚拟机来的io,首先被传输到存储后端,xen在dom0上,kvm在内核或者qemu上。 如果在后端走buffer io,则数据被写到page cache后就返回了,从虚拟机的角度来看,认为这个IO 已经被写到存储里去了,这时候如果掉电,虚拟机已经被写入的数据有可能被丢弃。这是不可接受的。 这和正在写时掉电IO 丢失是不同的。
如果你不理解在虚拟化场景下,存储后端不能使用buffer IO, 你看看SAN (包括IPSAN和FCSAN)的情况就明白了,一般SAN 支持write back和write through. write back就是对应buffer IO. 数据写到SAN 的cache后,就返回IO 写入成功。那这时候SAN 断电了呢,SAN 对cache 的内存都有断电保护,当SAN 断电时,启用专门保护SAN cache的电池,保证能把cache的数据写入到磁盘。 如果SAN 的电池老化后不能使用,则不能设置write
back,已经设置的也会变成write through.
本文探讨了虚拟化环境中存储I/O操作的两种模式:writeback(回写)和writethrough(直写)。着重分析了writeback模式下,利用缓存提高性能的同时可能带来的数据丢失风险,并解释了SAN设备如何通过断电保护机制来规避这种风险。

被折叠的 条评论
为什么被折叠?



