GCE永久磁盘块大小写入数据完整性

SSD持久磁盘的块大小似乎是4096字节。

如果我直接写4096个字节的alignment块到块设备(/ dev / sdb,带有O_DIRECT和posix_memalign),这些写入是否是primefaces的?

我想要的是写入调用成功写入整个4K块或不写任何东西。

我可以用新的写入结束100个字节,其余的是旧的数据?

检查O_ATOMIC与O_DIRECT结合工作来完成。 请参阅https://lwn.net/Articles/573092/

关于单扇区大小的写入是否是磁盘电源丢失的primefaces,没有共同的意见 – 请参阅https://stackoverflow.com/a/2015068/4513656以便讨论这一点。 至less从SCSIangular度来看,单个LBA单扇区primefaces性是预期的行为(请参阅http://www.t10.org/pipermail/t10/2011-November/016011.html ),但请注意Linux块层可以合并/分割请求并处理多个SCSI设备。

值得注意的是,对于SCSI设备,有明确的T10命令(例如WRITE ATOMIC )明确保证primefaces性,但设备不必实现它们,而Linux不会通过常规的块设备操作来暴露它们。 另一个答案中引用的O_ATOMIC标记的修补程序在撰写本文时(2017年2月的内核4.10)不在主线内核中,并且在open(2)手册页中未提及该标记。

如果系统/磁盘永远不会崩溃,那么单个扇区的单个LBA写入对于同一个单个扇区的单个LBA读取应该看起来是primefaces的。

请注意,使用O_DIRECT并不意味着写入到非易失性存储器,所以在崩溃后您可能会发现确认的数据不存在。 即使您使用的是块设备,也需要使用fsyncO_SYNC来保证进一步的稳定性。