когда ты удаляешь файл, то место занятое под данные файла "не чистится" а помечается "удалено".
таким образом при активном использовании свободное место заполнено образками удаленных файлов. в ssd немного попроще ибо trim уничтожает обрезки, но не тоже хватает.
дефрагментация не меняет наличие обрезков данных, а нередко еще и увеличивает хлам разбросанный по диску.
как вариант использовать zerofile или вручную
dd if=/dev/zero of=%нужный раздел%/zerofile; rm %нужный раздел%/zerofile
на ssd, понятное дело, лучше не применять.
еще вариант использовать fsarchiver - он парсит файловую систему на разделе и копирует в образ (своего формата) только заполненные блоки.
лучший вариант снять файловый образ - он не привязывается к размер раздела и естественно не тянет с собой обрезки файлов.
после распаковки на целевой раздел, загрузиться через лайв-образ и прописать запись груба в заголовок носителя, потом обновить менюшку груба.
если тебе за размер образа жалко, то прост пропусти выхлоп dd через сжиматель типа gzip bzip и будет тебе щастье.
и т.д. и т.п.