ZFS показывает свободное место, не может удалить

У меня есть старый пул zfs (созданный 05-2012), который работал на Debian 7.6 и имел 26 Гбайт свободного (из 58 Тбайт), как сообщает df. Я только что переустановил ОС (debian 8.7), и теперь пул показывается как 0 байтов свободными в df, но 1.04 Тбайт "БЕСПЛАТНО" со списком zpool.

У меня есть 2 вопроса:

1) В чем разница между FREE в списке zpool (=1.04 Тбайт) и AVAIL в списке zfs (= 0)?

2) Могу ли я что-нибудь сделать, чтобы использовать это свободное место размером 1 Тбайт? Я удалил все снимки, и это не имело никакого значения...

Заранее спасибо.

% df -h /contentA
Filesystem      Size  Used Avail Use% Mounted on
contentA         58T   58T     0 100% /contentA

% zpool list contentA
NAME       SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
contentA    65T  64.0T  1.04T     16.0E      -    98%  1.00x  ONLINE  -

% zfs list contentA
NAME       USED  AVAIL  REFER  MOUNTPOINT
contentA  58.0T      0  58.0T  /contentA

% uname -a
Linux myserver 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux

% cat /etc/debian_version 
8.7

1 ответ

От zfs(8) справочная страница, available средства:

The amount of space available to the dataset and all its children,
assuming that there is no other activity in the pool. Because space
is shared within a pool, availability can be limited by any number of
factors, including physical pool size,  quotas, reservations, or other
datasets within the pool.

Вообще говоря, первое место, где нужно искать различия, - это вещи вне этого набора данных, такие как резервирование, установленное для другого набора данных в том же пуле.

Тем не менее, из вашего поста это выглядит как набор данных, который вы запускали list против может быть корневым набором данных для вашего пула, который должен учитывать все остальные поднаборы данных в нем. В некоторых случаях конфигурация пула может привести к таким различиям, как это подробно описано в документации Oracle.

Однако (опять же) они обычно применяются к пространству, которое потребуется для хранения избыточности и метаданных в случае увеличения вашего логического размера данных (т.е. зеркальные пулы показывают вдвое меньше available пространство как free пробел, поскольку каждый байт, который вы записываете в набор данных, должен быть скопирован в два места). Так как ваш набор данных available равен нулю, очевидно, это не просто учет прогнозируемых накладных расходов будущих записей.

Это подводит меня к окончательному объяснению. ZFS имеет механизм безопасности, встроенный в систему учета пространства, чтобы пользователи не могли заполнять пул больше 63/64 (что кажется мне невероятно близким к пропорциям в вашем случае, и, следовательно, почти наверняка к пределу, который вы бьете). Поскольку ZFS всегда требуется новое пространство для внесения изменений в состояние на диске (из-за копирования при записи), если вы превысили этот предел, возможно, что пул больше не сможет удалять объекты, чтобы освободить пространство для новых записей, заставляя это становиться доступным только для чтения - навсегда. Хотя может быть возможно пропатчить ZFS или изменить настройку, чтобы обойти ограничение, я не рекомендовал бы это!

Другие вопросы по тегам