Вы должны взглянуть на btrfs quota
и btrfs qgroups
(группы квот).
В основном qgroups
делают именно то, что вы просили, они отслеживают, сколько места выделено подобъемами. Чтобы включить qgroup
функциональность для btrfs
файловой системы, вы должны
# btrfs quota enable /path/to/btrfs/filesystem
Однако, прежде чем сделать это быть предупрежден , что это вызывает полное повторное вычисление qgroup
данных, потребуется некоторое время , особенно для больших файловых систем с большим количеством подобъемов. Этот процесс выполняется асинхронно в фоновом режиме. Вы уже можете проверить статус qgroups
с
# btrfs qgroup show /path/to/btrfs/filesystem
Это даст вам некоторый вывод:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(Предупреждение в первой строке присутствует, пока повторное сканирование все еще выполняется.)
Btrfs автоматически создает qgroup
для каждого подобъема. В этом случае есть три подобъема с идентификаторами подобъема 4881, 7990 и 8400. Часть перед косой чертой - это уровень qgroup
. Каждый подобъем qgroup
находится на уровне 0. Кроме того, на уровне 0 есть специальное предложение, qgroup
которое всегда имеет идентификатор 5 и соответствует корню файловой системы btrfs.
Для каждого qgroup
вышеприведенного вывода показано, сколько места указано в нем. Это означает, что соответствующий подобъем содержит файлы, общий размер которых равен указанному числу.
Тем не менее, из-за моментальных снимков и характера копирования btrfs подобъемы могут совместно использовать файлы. Это означает, что на содержимое (или на самом деле экстенты) файлов может ссылаться более одного подобъема. Это выражается вторым числом, которое показывает, сколько места выделено исключительно для каждого подобъема и не используется совместно с любым другим подобъемом. В случае, если вы удаляете подобъем, это пространство, которое будет фактически освобождено.
Если вы хотите узнать, сколько места будет освобождено, если вы удалите несколько подобъемов, вы можете использовать вышеупомянутые уровни. qgroups
которые организованы в иерархии и группах на верхних уровнях (выше 0) агрегировать информацию о более низких уровнях.
Таким образом, чтобы узнать, сколько места будет освобождено, если будут удалены подобъемы 4881 и 7990 (в приведенном выше примере), создайте новый qgroup
(произвольно с ID 0, но вы можете выбрать все, что вам нравится здесь) на уровне 1 с
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Затем назначьте вновь созданный qgroup
в качестве родителя для qgroups
подобъемов, которые вы хотите удалить
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Это вызовет повторное сканирование информации о квоте, которое может занять некоторое время. Если это закончено, и вы сейчас выпускаете
# btrfs qgroup show -p /path/to/btrfs/filesystem
вы получите вывод, как это:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(Я добавил -p
флаг, чтобы добавить parent
столбец к выводу, который показывает отношения родитель / потомок qgroups
.)
Теперь строка с qgroup
1/0
говорит вам, сколько пространства указано в обоих подобъемах, которые вы хотите удалить, и, что более важно, сообщает вам, сколько пространства выделено исключительно ими . Это количество пространства, которое будет освобождено, если вы удалите оба подобъема.
Мне также интересно, почему они говорят, что это будет так медленно?
Это связано с тем, что btrfs копируется при записи вместе со снимками. Если вы создаете моментальный снимок в btrfs (обычно), все фактические данные во вновь созданном подобъеме, который содержит моментальный снимок, передаются источнику моментального снимка. Только когда файл изменяется или заменяется в источнике, он указывает на другое содержимое (экстенты). Это очень затрудняет оценку того, сколько места фактически будет освобождено при удалении подобъема, поскольку необходимо учитывать все пространство, которое используется совместно с другими подобъемами.