Предполагая, что вы касаетесь только одного блока, тогда либо этот блок будет перезаписан, либо блоки не будут перезаписаны.
Первая ситуация имеет место в подавляющем большинстве широко используемых сегодня файловых систем, а также почти во всех исторических файловых системах. Примеры включают NTFS, FAT, ext4, XFS, HFS, HFS+ и UFS. По сути, это самый простой вариант, и все недостатки хорошо известны и довольно просты для понимания.
Вторая ситуация - это то, что делают некоторые более новые файловые системы. Примечательно, что BTRFS, ZFS, NILFS2, F2FS и, я полагаю, ReFS и APFS делают это (и почтенную архивную файловую систему Fossil из Plan 9 From Bell Labs, которая, я полагаю, могла бы первой сделать это). То, как они работают, немного отличается. Вместо того, чтобы напрямую перезаписывать существующий блок, они записывают в новый, в настоящее время неиспользованный, один, а затем обновляют метаданные файла, чтобы вместо этого указывать на эту новую копию, и освобождают старый. Это немного сложнее, но это гарантирует, что запись происходит или не происходит, вместо того, чтобы оставить возможность того, что она может быть выполнена только частично.
Однако, как только вы закончите работать только с одним этим блоком, это будет сложно. В зависимости от системы у вас могут быть или не быть новые выделения блоков для записи. У вас также могут быть новые блоки, выделенные из-за поведения приложения вместо файловой системы. Во многих UNIX-подобных системах довольно часто приложение записывает измененную версию файла, которую оно обновляет, во временный файл, а затем заменяет старую, переименовывая временный файл, потому что это гарантирует, что обновление произойдет или не произойдет. «т.