Очень странный размер файла (более 600 ПБ) в небольшой файловой системе

У меня был файл в файловой системе XFS размером около 200 ГБ. Это был образ QCOW2, содержащий виртуальный диск виртуальной машины, управляемой KVM. Что-то пошло не так (возможно, это был какой-то сбой qemu-kvm, я не уверен), произошел сбой виртуальной машины, и теперь у меня есть файл, который выглядит так:

191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade

Итак, он все еще занимает 191090708 блоков, но ls показывает это как 656 петабайт.

Более того, у меня есть другой файл с той же предысторией, но в другой файловой системе (не XFS, а GFS2):

410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13  2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0

Он занимает 410855320 блоков, но ls показывает это как ~ 6. 6 эксабайт.

Как вы думаете, безопасно ли удалять эти файлы? Спасибо!

PS Как хорошо, что снимки делаются регулярно! :) Не знаю, что бы я без них делал.

21
задан 10 February 2016 в 13:36
2 ответа

Я вижу две возможные причины, по которым вы видите эти размеры файлов:

  • Разреженные файлы
  • Повреждение файловой системы

Разреженные файлы - это особенность некоторых файловых систем, благодаря которой вы может создать файл с дырками. Для отверстий не выделяется никакого физического пространства.Чтение через дыры полностью вернет NUL байтов.

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

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

Если вы заметили какие-либо другие симптомы, заставляющие вас думать, что файловая система может быть повреждена, вам следует принудительно выполнить полную проверку файловой системы перед удалением файлов.

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

31
ответ дан 2 December 2019 в 20:04

Проблема заключается в том, как вы вычисляете размер файла.

Один из способов - посмотреть смещение последнего байта (например, ls). Другой способ - суммировать реально выделенные блоки (например, du).

Что вы видите, если вероятно, это файл с данными, записанными с очень большим смещением. Это означает, что большая часть адресного пространства вашего файла не выделена. Но вы все еще можете это прочитать.

6
ответ дан 2 December 2019 в 20:04

Теги

Похожие вопросы