Как я могу изменить суперблок файловой системы ext, чтобы я мог установить поле wtime (время последней записи)?
Я пробовал с debugfs:
debugfs 1.42.9 (4-Feb-2014)
debugfs: open /dev/sdd2 -w
debugfs: ssv wtime "@0x64000000"
debugfs: show_super_stats -h
debugfs: close
Когда я закрываю файловую систему время установлено текущее системное время.
Очевидно, я не хочу менять системное время так, чтобы время устанавливается, когда файловая система закрывается, а затем восстанавливает системное время.
Моя вторая мысль заключалась в том, что я могу изменить это с помощью hexeditor, но я почти уверен, что суперблок имеет контрольную сумму, которая вычисляется и проверяется над суперблоком.
После того, как я прочитал ответ Питера Хорват. Я посмотрел в источниках и как он указал Вот ext2fs_flush2
записывает это поле, и фактический код выглядит так:
fs->super->s_wtime = fs->now ? fs->now : time(NULL);
Я искал источники для этого fs->now
и обнаружил, что он устанавливается do_set_current_time
. Я думал, что пробовал это в последний раз, но попробовал еще раз. И на самом деле следующий код сработал.
debugfs: open /dev/sdb2 -w
debugfs: ssv mtime "@0x64000000"
debugfs: set_current_time "@0x64000000"
Setting current time to Thu Mar 2 01:46:40 2023
debugfs: close
Изменить: вы должны коснуться суперблока, если хотите wtime
чтобы быть в курсе. И вы не можете установить 0 как свой Текущее время.
Копаться в исходном коде нашего программного обеспечения не от дьявола. Я немного исследовал их и нашел следующие результаты:
ext2_close_free()
, который уже есть в исходном коде libext2fs, Вот.ext2fs_close_free()
звонки ext2fs_close2()
, который вызывает ext2fs_close()
, который вызывает ext2fs_flush2()
, который вызывает ext2fs_flush()
.wtime
поле всегда будет обновляться. Нет никаких исключений.Но: вы можете легко отключить это в исходном коде. Если вы приедете сюда снова, я вам объясню, как.
P.s. да, в суперблоке ext2 есть контрольная сумма, и она генерируется crc32c, который представляет собой сложный алгоритм.
Хорошо, возможно пространство пользователя - это решение, вы можете попробовать fuse-ext2
Домашняя страница: http://view-os.sourceforge.net