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

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

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

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

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

0
задан 7 December 2016 в 20:26
2 ответа

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

1
ответ дан 4 December 2019 в 16:24

Нет единого мнения о том, являются ли записи размером с один сектор атомарными или нет в отношении потери мощности на диске - см. 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 г.), и флаг не упоминается в open (2) man страница .

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

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

0
ответ дан 4 December 2019 в 16:24

Теги

Похожие вопросы