У меня был файл в файловой системе 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).
Что вы видите, если вероятно файл с данными, записанными с очень большим смещением. Это означает, что большая часть адресного пространства вашего файла не выделена. Но вы все еще можете это прочитать.