Короткий ответ

Сначала какой том заполнен: пул tank, dataset quota, том Windows на vd0, boot TrueNAS, thin pool. df -h / zfs list -o space / Get-Volume врут, если смотрите не тот слой. Освобождайте безопасное: старые логи, снимки по retention, чужой ISO. Расширяйте VD/vdev по процедуре, не сжатием продакшен-БД «на глаз». Пока 100%, запись приложений должна считаться аварийной: лучше коротко остановить writer, чем сломать БД.

Если удаление файлов не даёт байт — open file / snapshot / thin.

Симптомы и как отличить

Типичная картина:

  • пользователи SMB не сохраняют файлы;
  • Ubuntu ENOSPC на /var vs на /mnt/tank;
  • Windows D: 0 байт, C: свободно;
  • TrueNAS alert Pool is 90%+ (на ZFS 80–90% уже боль).
ВидноСлой
zfs list AVAIL 0, df тожепул/dataset
df 100%, zfs AVAIL естьsnapshot/refreservation или не тот mount
LVM thin data_percent 100thin
inode 100%, df 50%inodes, не эта статья целиком
RAID vd0 Optimal, гость 100%расширьте ФС, не диск в слоте

Возможные причины

  1. Рост данных без расширения.
  2. Снимки и реплики держат блоки.
  3. Quota/refquota.
  4. Thin overcommit догнал физику.
  5. Логи, dump, старые backup на том же tank.
  6. Windows shadow copies.
  7. Человек смотрит не тот сервер (SQL01 локальный диск vs NAS).

Диагностика

1. Ubuntu / TrueNAS CLI

df -hT
df -i
zpool list tank
zfs list -o space -r tank
zfs list -t snapshot -o name,used,refer,creation -s used tank | tail

zpool list CAPACITY — здоровье пула. Dataset с огромным USEDSNAP — снимки.

2. Windows

Get-Volume | Format-Table DriveLetter, FileSystemLabel, SizeRemaining, Size
Get-ChildItem D:\ -ErrorAction SilentlyContinue | Measure-Object
vssadmin list shadowstorage

Не TreeSize на C:\Windows в панике без понимания.

3. Кто пишет

du -xhd1 /mnt/tank на SCALE осторожно под нагрузкой. Windows: Resource Monitor. SQL: размер файлов БД vs диск.

4. RAID ёмкость vs ФС

storcli /c0/v0 show all Size VD. Если VD 2 ТБ, NTFS 2 ТБ заполнен — расширение VD + diskpart extend, не новый диск в RAID без плана.

Решение

Сценарий A. Снимки съели пул

Список, retention, удаление старых по политике. См. статью про снимки. Каждая команда destroy — осознанное имя.

zfs list -t snapshot tank/share

Сценарий B. Мусор и логи

journal, crash dumps, ISO, старые бэкапы не на единственной копии. На Windows — DISM/CBS только по процедуре, не очистка WinSxS вслепую.

Сценарий C. Quota

zfs get quota,refquota tank/share
zfs set quota=2T tank/share

Увеличение quota помогает, только если пул имеет AVAIL. Иначе расширяйте пул.

Сценарий D. Расширить пул / VD

Добавление vdev / replace на диски больше / расширение LUN. Hardware: расширение vd0 по ssacli/storcli online expand, затем рост ФС. Не create новый RAID из членов текущего.

Windows:

Update-HostStorageCache
Get-Partition -DriveLetter D | Resize-Partition -Size <новое>

Размер — фактический после расширения VD, не фантазия.

Сценарий E. Writer нельзя остановить

Хотя бы переведите в read-only сервисы, которые могут: отчётность, поиск. SQL — emergency truncate логов по runbook SQL, не delete .ldf в проводнике.

Порядок тушения: остановить некритичный writer, снимки по TTL, мусор логов и ISO, trim или unmap, расширение. Обратный порядок «сначала купим диск» при AVAIL 0 не успевает, если SQL уже не пишет транзакции. Согласуйте с владельцем данных, что час read-only лучше повреждённого журнала.

На Windows не путайте очистку диска с удалением точек, нужных SQL. На Ubuntu не чистите /var/lib/docker на хосте, где это прод, без карты томов. На TrueNAS не трогайте System Dataset руками «ради гигабайт».

После расширения VD или пула обязателен рост ФС: NTFS extend, xfs_growfs, ZFS autoexpand если включён и все члены уже заменены. Иначе мониторинг зелёный на RAID и красный в госте.

Как проверить, что проблема устранена

AVAIL > запас политики (для ZFS лучше <80% capacity). Приложение пишет. SMB save ok. Алерт закрылся не потому что выключили триггер. Повтор zfs list -o space через час: рост понятен.

Если не помогло

  • Место вернулось на минуту: процесс снова пишет (backup, snapshot schedule).
  • df не двигается: snapshots/open files.
  • Гость 100%, NAS свободен: квота zvol / NTFS внутри LUN.
  • RAID expand не виден в ОС: rescan, драйвер, не reboot как первый шаг на SQL.

Профилактика

  • Алерт 70/80% на пуле и на каждом dataset.
  • Retention снимков.
  • Разнести backup и прод.
  • Планирование ёмкости.
  • Не overcommit thin без мониторинга.
  • Регулярный zfs list -o space.

Отдельно планируйте служебное место: dump ядра, журнал SCALE, .recycle, репозиторий, который «временно» положили на tank. Эти тома не видны владельцу шары и внезапно съедают последние проценты. В runbook освобождения места они должны быть пунктом 1 после снимков, не после паники rm в домашних каталогах.

Квоты dataset защищают соседей: один отдел с «видео с планёрок» не должен останавливать SQL на том же пуле. Квота не замена расширению, но даёт время на закупку.

FAQ

Можно ли сжать ZFS compression на полном пуле?

lz4 на новых записях поможет мало, если AVAIL 0. Сначала снимки/файлы. Включение compression на полном пуле не переписывает старое само.

100% на RAID 1 SSD — выкинуть диск?

Нет. Это ФС, не слот.

TrueNAS «auto-expand»?

Для замены на больший диск после resilver иногда да. Не замена политике свободного места.

Удалить replication destination?

Только если это не единственная копия. Смотрите роль dataset.

Windows «освободить место» советует Hibernation?

На сервере редко hibernate. Не гонитесь за советами клиента Windows 11 на SQL01.