Какие файловые системы повторно используют неизменные блоки данных при записи?

Допустим, я открываю и читаю существующий файл N блоки где N > 1,

Затем я меняю данные, которые находятся в границах одного - 1 - блока.

При обратной записи фактических данных может произойти одно из следующих действий:

  1. N блоки перезаписываются
  2. 1 блок перезаписывается
  3. x блоки перезаписываются, где N > x > 1

В широко используемых файловых системах есть примеры каждого из них и какими они будут?

1 ответ

Предполагая, что вы касаетесь только одного блока, тогда либо этот блок будет перезаписан, либо блоки не будут перезаписаны.

Первая ситуация имеет место в подавляющем большинстве широко используемых сегодня файловых систем, а также почти во всех исторических файловых системах. Примеры включают NTFS, FAT, ext4, XFS, HFS, HFS+ и UFS. По сути, это самый простой вариант, и все недостатки хорошо известны и довольно просты для понимания.

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

Однако, как только вы закончите работать только с одним этим блоком, это будет сложно. В зависимости от системы у вас могут быть или не быть новые выделения блоков для записи. У вас также могут быть новые блоки, выделенные из-за поведения приложения вместо файловой системы. Во многих UNIX-подобных системах довольно часто приложение записывает измененную версию файла, который он обновляет, во временный файл, а затем заменяет старую, переименовывая временный файл, потому что это гарантирует, что обновление произойдет или не произойдет. "т.

Другие вопросы по тегам