Отложенная запись
Определение
Отложенная запись — режим кэширования, в котором запрос подтверждается после попадания данных в кэш, а перенос на энергонезависимый носитель происходит позже.
Также ищут: write-back cache · write-back · кэш с отложенной записью
Зачем это знать
Подтверждение может прийти раньше переноса данных на носитель. Перед заказом проверьте, где остаются данные, что защищает кэш при отказе и как затем восстанавливается запись.
Карта понятия
Связано
Что подтверждено
При write-back завершение запроса подтверждается после попадания данных в кэш; запись на энергонезависимый носитель происходит позднее.
Граница применимости: Определение SNIA write back cache. Сам режим не указывает способ защиты кэша конкретного устройства.
SNIA указывает риск отказа между подтверждением запроса и переносом данных на носитель. Надёжная реализация write-back сохраняет содержимое кэша при отказе, включая потерю питания, и выгружает его после перезапуска.
Граница применимости: Требование к надёжной реализации из словаря SNIA; наличие такого механизма у выбранной платы или SSD проверяется отдельно.
Документация PostgreSQL 18 отдельно рассматривает кэш дискового контроллера и кэш самого накопителя. Энергозависимый кэш с отложенной записью на любом из этих уровней может потерять данные при отключении питания.
Граница применимости: PostgreSQL 18, 28.1 Reliability, абзацы о контроллере и накопителях. Не обобщается на кэш с подтверждённой защитой от потери питания.
В описании PostgreSQL 18 блок BBU питает кэш контроллера после исчезновения системного питания; после восстановления питания данные записываются на накопители.
Граница применимости: PostgreSQL 18, 28.1 Reliability. Описан батарейный механизм конкретного уровня; срок удержания, исправность и поддержка модели не выводятся из аббревиатуры BBU.
В документальном примере PVE 9.0 с qemu-server 9.0.16 и pve-qemu-kvm 10.0.2-4 для обычного диска RBD выбран cache=writeback: PVE задаёт direct=false и no-flush=false. QEMU передаёт flush в librbd; успешное завершение асинхронного flush, подтверждённое callback без ошибки, соответствует сохранению отложенных записей на диске.
Граница применимости: Обычный raw-диск RBD через librbd, machine version 10.0, без krbd и PWL. Это контракт выбранных исходников и API, не измерение fsync, не доказательство честности физического кэша и не утверждение, что один fsync всегда равен одной команде flush.
В том же примере cache=unsafe включает no-flush. QEMU пропускает устойчивый сброс и снимает требование FUA на уровне блока; успешный fsync в госте тогда не доказывает, что WAL покинул теряемый кэш клиента RBD.
Граница применимости: PVE 9.0 / qemu-server 9.0.16 / pve-qemu-kvm 10.0.2-4, PostgreSQL 18 с fsync=on и synchronous_commit=on. Утрата данных зависит от момента отказа и ещё невыгруженных записей; не обещается, что любой опыт обязательно потеряет данные.
Что проверить
- Определите, на каком уровне действует отложенная запись.
- Сверьте защиту кэша контроллера и защиту накопителя раздельно.
- Проверьте состояние защиты и документированный порядок восстановления.
- Укажите отказы, которые должна пережить подтверждённая запись.
- Сопоставьте восстановленные записи с подтверждениями клиенту на отдельном стенде.
Первоисточники
- SNIA Dictionary — write back cache
Проверены момент подтверждения, более поздняя запись на энергонезависимый носитель и необходимость сохранения/выгрузки кэша после отказа.
- PostgreSQL 18 Documentation: Reliability
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить выполнение сброса всем трактом хранения, энергозависимые кэши накопителя и контроллера и границы гарантии при потере питания.
- Proxmox qemu-server 9.0.16: настройка кэша блочного устройства
generate_blockdev_drive_cache задаёт direct и no-flush; для unsafe no-flush включён. Это исходный код настройки, не результат испытания конкретной ВМ.
- QEMU 10.0.2: драйвер RBD и передача flush в librbd
qemu_rbd_co_flush связан с bdrv_co_flush_to_disk и вызывает rbd_aio_flush. Пакет Proxmox меняет другие части этого файла, включая начальную политику кэша; эти границы учитываются отдельно.
Утверждения: 05
- Ceph 19.2.3: контракт API rbd_aio_flush
Успешное завершение rbd_aio_flush через callback без ошибки соответствует сохранению ранее отложенных записей на диске. Это контракт librbd; честность физических контроллеров и накопителей остаётся отдельным условием.
Утверждения: 05
- QEMU 10.0.2: обработка FUA и сброса блочного кэша
bdrv_driver_pwritev снимает FUA при BDRV_O_NO_FLUSH; bdrv_co_flush пропускает устойчивый сброс при этом флаге. Данный файл не изменён серией патчей pve-qemu-kvm 10.0.2-4.
Утверждения: 06
Связанные понятия
Курсы по теме
В каталоге
- RAID-контроллеры с кэшем записи — Отложенная запись ускоряет работу, но без защиты кэша при сбое питания данные можно потерять.
- СХД с защищённым кэшем записи — В СХД отложенная запись безопасна, пока кэш зеркалирован и защищён от потери питания.