У меня есть изображение неструктурированного диска, я взял использование dd
из экземпляра Ubuntu. Общий размер диска составляет 300 ГБ, но используемых только 5,5 ГБ.
Существует ли способ изменить размер сырых данных dd изображение вниз к 20 ГБ, сохраняя всех 5,5 ГБ данных, и просто усекая пустые блоки?
В достаточно свежих версиях dd
можно использовать conv=sparse
для создания файла-образа в разреженном виде с самого начала.
Следует заметить, что то, что блок диска "не используется", не означает, что он на самом деле полон нулей, если блок был занят файлом, который с тех пор был удален. Существует утилита zerofree
, которая может взять (не смонтированную) файловую систему и заполнить нулями все неиспользуемые блоки, что делает последующую спарсификацию более эффективной.
Просто используйте virt-sparsify
.
При обычном использовании он записывает временный файл, а затем перезаписывает оригинал, с отверстиями.
Если на диске не хватает места, он может даже уменьшить файл на месте, не записывая временную копию, с помощью опции -i
, хотя это может и не освободить все возможное место.
Если вы сделаете его разреженным файлом, метаданные файла все равно будут 300 ГБ, но реально используемое пространство будет ближе к 5.5. Например, с GNU cp --sparse=always
Смотрите также: Как преобразовать образ диска Linux в разреженный файл?
Если вы хотите уменьшить логический размер файлов, вам нужно уменьшить файловую систему, LVM и все остальное, что у вас есть, в зависимости от размера диска.
Может быть проще смонтировать большой образ, создать новый образ нужного размера и скопировать на него файлы.