Назад | Перейти на главную страницу

GCE Persistent Disk размер блока записывает целостность данных

Размер блока для постоянного диска SSD составляет 4096 байт.

Если я напишу выровненные блоки размером 4096 байт непосредственно на блочное устройство (/ dev / sdb с O_DIRECT и posix_memalign), будут ли эти записи атомарными?

Я хочу, чтобы вызов записи либо успешно записал весь блок 4K, либо ничего не записал.

Могу ли я получить 100 байтов от новой записи, а остальные - старые данные?

Ознакомьтесь с _ATOMIC, который работает вместе с O_DIRECT для достижения этой цели. Видеть https://lwn.net/Articles/573092/.

Нет единого мнения о том, является ли запись размером с один сектор атомарной или нет в отношении потери мощности диска - см. https://stackoverflow.com/a/2015068/4513656 для обсуждения по этому поводу. По крайней мере, с точки зрения SCSI, атомарность одного сектора LBA является ожидаемым поведением (см. http://www.t10.org/pipermail/t10/2011-November/016011.html ), но имейте в виду, что уровень блоков Linux может объединять / разделять запросы и иметь дело не только с устройствами SCSI.

Также стоит отметить, что для устройств SCSI существуют явные команды T10 (например, WRITE ATOMIC), которые явно гарантируют атомарность, но устройства не обязаны их реализовывать, и Linux не предоставляет их через обычные операции с блочными устройствами. Патчи для O_ATOMIC флаг, упомянутый в другом ответе, не был в основном ядре на момент написания (ядро 4.10, февраль 2017 г.), и флаг не упоминается в открыть (2) справочную страницу.

Если система / диск никогда не выходит из строя, тогда да, одна запись LBA одного сектора должна казаться атомарной по отношению к одному чтению LBA того же самого сектора.

Обратите внимание, что использование O_DIRECT не подразумевает, что запись была произведена в энергонезависимое хранилище, поэтому снова после сбоя вы можете обнаружить, что подтвержденных данных нет. Вам нужно будет использовать fsync или O_SYNC для обеспечения дополнительной стабильности, даже если вы используете блочное устройство.