Назад | Перейти на главную страницу

Безопасно ли использовать fallocate --dig-Hole во время модификации

Это сейф использовать fallocate --dig-holes в файл во время его изменения / записи? Например, на образе QCOW2, открытом гостем KVM?

Я бы вообще сказал нет. Если файл представляет собой образ, подключенный к виртуальной машине, вы можете вместо этого попробовать TRIM (например, fstrim -a). Строго говоря, это не эквивалент (TRIM также может освободить место в каком-то удаленном файле, который не обнулен), но это может быть то, что вам нужно.

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

Что может пойти не так? Представьте, что приложение / виртуальная машина собирается перезаписать какой-то обнуленный блок, и вы одновременно запускаете fallocate -d. Гонка может выглядеть так:

  1. Fallocate видит блок нулей и решает вырыть там яму.
  2. Другое приложение / виртуальная машина записывает в обнуленный блок некоторые данные.
  3. Фаллокейт выкапывает яму в блоке.

Может показаться, что между 1 и 3 небольшой таймфрейм. Возможно, это правда, но fallocate может захотеть освободить сразу несколько последующих блоков. (Не уверен, я не проверял реализацию, но даже если верно обратное, вы не можете полагаться на это в будущем.) Это может увеличить задержку между 1 и 3, что делает состояние гонки гораздо более вероятным.