У меня был файл в файловой системе 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 Так хорошо, что снимки делаются регулярно! :) Я не знаю, что бы я делал без них.
Ответы:
Я вижу две возможные причины, по которым вы видите эти размеры файлов:
Разреженные файлы - это функция в некоторых файловых системах, с помощью которой вы можете создать файл с дырами в нем. Физическое пространство не выделено для дырок. Чтение через дыры полностью вернет NUL-байты.
Если причиной того, что вы видите, являются разреженные файлы, то удалить их так же безопасно, как и не разбросанным файлом.
Если причиной того, что вы видите, является повреждение файловой системы, то небезопасно удалять файлы без проверки файловой системы. Если файловая система повреждена таким образом, что несколько файлов утверждают, что они занимают одно и то же пространство, то удаление любого файла приведет к освобождению этих блоков. Как только эти освобожденные блоки используются повторно, коррупция ухудшается.
Если вы видели какие-либо другие признаки, заставляющие вас думать, что файловая система может быть повреждена, вы должны выполнить полную проверку файловой системы перед удалением файлов.
Если нет доказательств того, что файловая система повреждена, а файлы выглядят разреженными, я просто удалил файлы, если они мне больше не нужны.
источник
Проблема в том, как вы вычисляете размер файла.
Один из способов - посмотреть смещение последнего байта (например, ls). Другой способ - суммировать реально выделенные блоки (например, du).
Что вы видите, если, вероятно, файл с данными, записанными с очень большим смещением. Это означает, что основные части адресного пространства вашего файла не выделены. Но вы все еще можете прочитать это.
источник