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

21

У меня был файл в файловой системе 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 Так хорошо, что снимки делаются регулярно! :) Я не знаю, что бы я делал без них.

Владимир Мельник
источник
Большое спасибо за ваши ответы. Конечно, я знаю о редких файлах, но самый важный вопрос для меня заключается в следующем: безопасно ли удалять эти файлы? Как я вижу сейчас, есть вероятность потерять некоторые данные, если файловые системы повреждены. Я не могу быть уверен, что с файловыми системами все в порядке, потому что их размонтировать и проверить нежелательно, но первый случай произошел 4 месяца назад, второй - 14 месяцев назад, поэтому я надеюсь, что у меня будет какая-то файловая система коррупция, если таковые были. Что вы думаете?
Владимир Мельник

Ответы:

31

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

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

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

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

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

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

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

kasperd
источник
6

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

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

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

Франсуа
источник
Спасибо. Как вы думаете, разве это ничего не сломает, если я просто удалю эти файлы?
Владимир Мельник
1
Google "разреженный файл" для деталей.
Кондыбас