Я не могу нормально объяснить отличия дефрага от баланса, лучше попробуй погуглить, т.к. я сам толком не знаю, но основная задача баланса, грубо говоря, распределение пространства между метаданными и данными. На ядрах 4.х могло запросто возникнуть такое, что делал снапшоты постоянно, делал, а потом df(1) показывает, что место есть, а при попытке записи ядро говорит, что его нет, это возникало из-за того, что место было выделено под метаданные и не могло быть использовано под реальные данные. Решалось регулярной балансировкой через btrfsmaintenance. Вроде бы современные ядра сами в фоне такое делают, чтобы не допускать такой фигни.