Некоторые возможности:
Там какие-либо общие шаблоны к катастрофическим отказам? Например:
Похоже, вы хорошо понимаете, что произошло.
Да, поскольку вы жестко отключили систему до того, как ваши изменения были зафиксированы на диске, они были там, когда вы загрузились обратно.
Система кэширует все записи перед сбросом на диск. Есть несколько опций, которые управляют этим поведением, все они расположены в / proc / sys / vm / dirty _ *
[ kernel doc ] . Если сброс явно не выполняется приложением через fsync ()
[ man 2 fsync ] , данные фиксируются, когда они либо достаточно стары, либо кэш записи заполнен.
Вышеупомянутое определение «данных» включает изменение записи каталога для удаления файла.
Что касается журнала, это одно из распространенных заблуждений относительно того, для чего журнал предназначен. Цель журнала не в том, чтобы гарантировать, что изменения будут воспроизведены или данные не потеряны. Цель журнала - предотвратить повреждение самой файловой системы, а не файлов в ней. Журнал просто содержит информацию о вносимых изменениях, а не (как правило) полные данные о самом изменении. Точные детали зависят от файловой системы и режима журнала. Для ext3 / 4 см. Параметр монтирования data
в man 8 mount
.
Чтобы ответить на ваш дополнительный вопрос о том, есть ли способ предотвратить отложенные записи без перезагрузки:
После быстрого чтения исходного кода ядра, похоже, вы можете использовать волшебный sysrq u
команда ([ wikipedia ], [ документ ядра ]) для выполнения аварийной операции повторного монтирования только для чтения. Похоже, это немедленно перемонтирует все тома только для чтения без операции синхронизации.
Чтобы использовать это, просто нажмите Alt + SysRq + u .
От: https://www.kernel.org/doc/Documentation/filesystems/ext4.txt
commit = nrsec (*) Ext4 можно приказать синхронизировать все свои данные и метаданные. каждые nrsec секунд. Значение по умолчанию - 5 секунд. Это означает, что если вы потеряете свою силу, вы потеряете столько же, сколько последние 5 секунд работы (ваш файловая система не будет повреждена благодаря ведение журнала). Это значение по умолчанию (или любое низкое значение) снизит производительность, но это хорошо для безопасности данных. Установка его на 0 будет иметь тот же эффект, что и оставление это по умолчанию (5 секунд). Установка очень больших значений улучшит спектакль.
Также см. Здесь, как их очистить: Как очистить буферы и кеш в системе Linux?
Цитата из приведенной выше ссылки:
ПРИМЕЧАНИЕ: очистите память от ненужных вещей (Kernerl 2.6.16 или новее). Всегда обязательно сначала запускайте синхронизацию, чтобы выгружать полезные вещи на диск !!!
To free pagecache:
$ echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
$ echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
$ echo 3 > /proc/sys/vm/drop_caches