Привет!
Заморочился я тут с журналированием и не могу понять, нужно ли мне data=journal
в /etc/fstab
для EXT4 или нет. По умолчанию журналирование установлено в data=ordered
, где менеджер журнала заносит метаданные файла в журнал, но данные файла пишутся напрямую на диск.
Так вот, хочу понять как происходит запись файла в Linux. Если, доупустим, приложение открыло файл размером 100Mb (допустим некий фотошоп 😄), далее было сделано пару мазков по фотке и нажат был save. Что дальше произойдёт?
-
Ядро как-то поймёт, что из 10000 блоков этого файла изменились только 1000, ядро «пометит» их как удаленные, а 9000 останутся на месте, затем допишет новые 1000 блоков (мазок в фотошопе) и занесёт новую последовательность блоков в метаинформацию файла?
-
Ядро оставит на месте все 10000 блоков этого файла, начнёт писать измененные данные всего файла (10000 блоков) в новое место в файловой системе, дописав до конца файл, он удалит старый файл, а новый переименует в старый файл. Если в процессе записи вырубили рубильник, новый файл не дописался, перешёл в состояние corrupted, то он просто стирается с диска (при проверке целостности ФС), старый файл остаётся целостным на диске, теряем только изменения после последнего сохранения.
Если процесс происходит по второму варианту, то в чём заключается смысл data=journal? Достаточно ли режима data=ordered для /home? Насколько это безопасно в плане целостности файлов? Не хочется потерять весь файл, но согласен на утерю изменений после последнего успешного сохранения.