пятница, 22 сентября 2023 г.

BTRFS warning (device dm-X): block group XXXXXXXXXX has wrong amount of free space

При загрузке виртуалки с Linux стала появляться ошибка связанная с BTRFS - "BTRFS warning (device dm-X): block group XXXXXXXXXX has wrong amount of free space", где dm-X - устройство device mapper на котором находится BTRFS, а XXXXXXXXXX - номер блока файловой системы.

Sep 22 09:01:35 vbox kernel: Btrfs loaded, crc32c=crc32c-intel
Sep 22 09:01:35 vbox kernel: BTRFS: device fsid 683a86c5-a6f1-4b68-b0f9-5330e443a1e4 devid 1 transid 1769033 /dev/mapper/debian--jessie--vg-docker scanned by btrfs (191)
Sep 22 09:01:36 vbox kernel: BTRFS info (device dm-2): using crc32c (crc32c-intel) checksum algorithm
Sep 22 09:01:36 vbox kernel: BTRFS info (device dm-2): flagging fs with big metadata feature
Sep 22 09:01:37 vbox kernel: BTRFS info (device dm-2): disk space caching is enabled
Sep 22 09:01:37 vbox kernel: BTRFS info (device dm-2): enabling ssd optimizations
Sep 22 09:01:48 vbox kernel: BTRFS warning (device dm-2): block group 71072481280 has wrong amount of free space
Sep 22 09:01:48 vbox kernel: BTRFS warning (device dm-2): failed to load free space cache for block group 71072481280, rebuilding it now

Хотя и пишет что "rebuilding it now", но за несколько дней ничего не изменилось. В Linux fsck для BTRFS это заглушка, которая ничего не делает и потому придётся исправлять вручную.

В моём случае BTRFS используется для Docker и сначала нужно остановить его и отмонтировать файловую систему (по-умолчанию это /var/lib/docker)

$ sudo systemctl stop docker.service docker.socket
$ sudo umount /var/lib/docker

Далее выполню проверку через btrfs check

$ sudo btrfs check /dev/dm-2
Opening filesystem to check...
Checking filesystem on /dev/dm-2
UUID: 683a86c5-a6f1-4b68-b0f9-5330e443a1e4
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
block group 95097454592 has wrong amount of free space, free space cache has 40697856 block group has 40714240
failed to load free space cache for block group 95097454592
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 40978440218 bytes used, no error found
total csum bytes: 37374324
total tree bytes: 2710274048
total fs tree bytes: 2584936448
total extent tree bytes: 80347136
btree space waste bytes: 479271479
file data blocks allocated: 210482892800
 referenced 210412625920 

Проверка подтверждает наличие проблемы. Чтобы ее исправить нужно очистить free space кеш. По-умолчанию используется кеш версии v1

$ $ sudo btrfs check --clear-space-cache v1 /dev/dm-2
Opening filesystem to check...
Checking filesystem on /dev/dm-2
UUID: 683a86c5-a6f1-4b68-b0f9-5330e443a1e4
Free space cache cleared

Повторная проверка не обнаруживает проблемы

$ sudo btrfs check /dev/dm-2
Opening filesystem to check...
Checking filesystem on /dev/dm-2
UUID: 683a86c5-a6f1-4b68-b0f9-5330e443a1e4
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 40967827484 bytes used, no error found
total csum bytes: 37374324
total tree bytes: 2710306816
total fs tree bytes: 2584936448
total extent tree bytes: 80379904
btree space waste bytes: 479323951
file data blocks allocated: 210472275968
 referenced 210402013184

Можно монтировать файловую систему обратно и запускать Docker

$ sudo mount /var/lib/docker
$ sudo systemctl start docker.service docker.socket

Комментариев нет:

Отправить комментарий