Ви повинні поглянути на ( 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
(Попередження в першому рядку існує до тих пір, поки Rescan ще працює.)
Btrfs автоматично створює qgroup
для кожного підтомника. У цьому випадку є три підпункти з ідентифікаторами підпункту 4881, 7990 та 8400. Частина перед прямою косою рисою є рівнем qgroup
. Кожен підтомник qgroup
знаходиться на рівні 0. Крім того, є спеціальний qgroup
рівень 0, який завжди має ID 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 (як правило), всі фактичні дані в новоствореному підпункті, який містить знімок, надсилаються до джерела знімка. Тільки коли файл змінюється або замінюється у джерелі, він вказує на інший вміст (розширення). Це дуже важко оцінити, скільки місця буде фактично звільнено, якщо підтомник буде видалений, оскільки вам доведеться враховувати весь простір, який спільно використовується з іншими підпунктами.