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

Очень странный размер файла (более 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 эксабайт.

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

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

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

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

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

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

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

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

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

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

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

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