ENOSPC: Зачем нужен `btrfs balance`? Что он делает?

Самая простая версия

cat data.txt | awk '{counts[NF] += 1} END { for (row_count in counts) { printf "%d (%d)\n", counts[row_count], row_count; }'

. Она просто использует переменную NF, которая дает количество полей в строке и обновляет соответствующее значение, связанное с ним в Словарь. Затем в конце потока он просто перебирает все ключи словаря и выводит их в запрошенном формате.

0
12.07.2017, 11:36
1 ответ

В отличие от большинства обычных файловых систем, BTRFS использует двухэтапный -распределитель. На первом этапе выделяются большие области пространства, известные как фрагменты, для определенных типов данных, затем на втором этапе выделяются блоки, как в обычной файловой системе, в пределах этих больших областей. Существует три разных типа чанков:

  • Блоки данных :В них хранятся обычные данные файла.

  • Блоки метаданных :В них хранятся метаданные о файлах, включая, среди прочего, метки времени, контрольные суммы, имена файлов, владельцев, разрешения и расширенные атрибуты.

  • Системные фрагменты :Это особый тип фрагментов, в которых хранятся данные о расположении всех остальных фрагментов.

Только тот тип данных, для которого выделен фрагмент, может быть сохранен в этом фрагменте. В наши дни наиболее распространенным случаем, когда вы получаете ошибку -ENOSPC в BTRFS, является то, что файловой системе не хватает места для данных или метаданных в существующих фрагментах, и она не может выделить новый фрагмент. Вы можете убедиться, что это так, запустив btrfs fi dfв файловой системе, вызвавшей ошибку. Если в строке «Данные» или «Метаданные» отображается значение «Общее», которое значительно отличается от значения «Использовано», вероятно, причина в этом.

Что делает btrfs balance, так это отправляет данные обратно через распределитель, что приводит к использованию пространства в уплотняемых фрагментах. Например,если у вас есть два фрагмента метаданных, каждый из которых заполнен на 40 %, баланс приведет к тому, что они станут одним фрагментом метаданных, заполненным на 80 %. Таким образом, сжимая использование пространства, операция балансировки может удалить уже пустые фрагменты и, таким образом, освободить место для выделения новых фрагментов. Если вы снова запустите btrfs fi dfпосле запуска баланса, вы должны увидеть, что значения Total и Used намного ближе друг к другу, так как баланс удалил фрагменты, которые больше не нужны.

9
28.01.2020, 02:13

Теги

Похожие вопросы