天天看点

linux write 刷新,Linux write through 和write back

一次在启动虚拟机的时候,发现有如下提示,drive cache: write through. 这究竟是什么意思呢?

linux write 刷新,Linux write through 和write back

Write-Through 模式:

1. DB向Cell发送一个写请求, cellsrv进行验证确认其请求有效;

2. cellsrv将发送指令将其写入到物理磁盘;

3. 写完成以后,给DB确认已经写成功;

4. cellsrv判断次数据是否适合缓存到cache中,如果满足条件则缓存,否则不缓存。

linux write 刷新,Linux write through 和write back

Write-Back 模式:

1. DB向Cell发送一个写请求, cellsrv进行验证确认其请求有效;

2. cellsrv将发送指令将其写入到磁盘Cache;

3. 将此数据的状态置为dirty的状态。(直到下次临界条件将脏数据刷新到磁盘,并判断此数据是否适合缓存,如果不适合,刷新完成以后会丢弃,刷新和缓存过程是异步的,并不在步骤3来完成)

4. 写完成以后,给DB确认已经写成功;

Write-Back 模式明显更高效,因为写数据到cache的速度比写到物理磁盘速度要快几个数量级。但是cache属于挥发性设备,无法持久的保存数据,所以需要磁盘控制器/Flash卡有独立的电源模块作为驱动将cache中的数据写回到磁盘。如果没有电源模块,则原本保存在cache中的数据并无法保障总能成功写入到磁盘,如果这个时候主机发生掉电,则可能造成数据不一致。为了保证数据的一致性,如果磁盘控制器或者flash卡的电量不足,则会自动从write-back模式转到write through 模式, 进而对系统的I/O造成影响。在exadata中可以使用exachk工具来检查,以下是Exachk中磁盘raid控制器电池不足导致自动切换到write-through的告警。

linux write 刷新,Linux write through 和write back
linux write 刷新,Linux write through 和write back

实际上可以在BIOS中强行修改磁盘控制器的wirte-back或者write-through模式,但是为了保证数据的一致性,我们并不建议这么做。如果出现了以上问题,正确的做法应该是开一个sr,上传对应的exachk报告要求更换电池。