LINUX.ORG.RU
ФорумAdmin

btrfs - мнимое «Не осталось свободного места»

 ,


6

3

Удачно монтирую btfs-раздел, но далее при попытке даже изменить права доступа на файл или каталог пишет:

На устройстве не осталось свободного места

Хотя при этом через df -h видно на этом разделе 7 ГБ свободно:

/dev/sda6           30G          22G  7,0G           76% /mnt/LEAP-15

Пробовал отмонтировать раздел и запустить

# btrfsck  /dev/sda6
Checking filesystem on /dev/sda6
UUID: 66be278b-9c9c-45ef-96a5-1a9eb375aa44
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
found 22335524864 bytes used err is 0
total csum bytes: 20340836
total tree bytes: 593608704
total fs tree bytes: 529547264
total extent tree bytes: 36536320
btree space waste bytes: 103750573
file data blocks allocated: 70457954304
 referenced 21395312640

Но после перемонтирования ситуация та же((

Добро пожаловать в самую главную «родовую травму» btrfs.

btrfs balance -dusage=0 /path/to/mountpoint попробуй.

intelfx ★★★★★
()

fsck сделай

anonymous
()
Ответ на: комментарий от intelfx
# btrfs balance -dusage=0 /mnt/LEAP-15/
btrfs balance: unknown token '-dusage=0'
usage: btrfs balance <command> [options] <path>
   or: btrfs balance <path>

    btrfs balance start [options] <path>
        Balance chunks across the devices
    btrfs balance pause <path>
        Pause running balance
    btrfs balance cancel <path>
        Cancel running or paused balance
    btrfs balance resume <path>
        Resume interrupted balance
    btrfs balance status [-v] <path>
        Show status of running or paused balance
gigantischer
() автор топика
Ответ на: комментарий от intelfx
# btrfs balance start /mnt/LEAP-15/
WARNING:

	Full balance without filters requested. This operation is very
	intense and takes potentially very long. It is recommended to
	use the balance filters to narrow down the balanced data.
	Use 'btrfs balance start --full-balance' option to skip this
	warning. The operation will start in 10 seconds.
	Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting balance without any filters.
ERROR: error during balancing '/mnt/LEAP-15/': No space left on device
There may be more info in syslog - try dmesg | tail
gigantischer
() автор топика
Ответ на: комментарий от gigantischer

В dmesg:

[51472.276294] BTRFS info (device sda6): 41 enospc errors during balance

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

Так. Это уже сложнее. Свободный диск, раздел или хотя бы 1-2 гигабайта свободного места (на любом другом разделе) есть?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от anonymous

Вроде ошибок не нашлось

# btrfsck /dev/sda6
Checking filesystem on /dev/sda6
UUID: 66be278b-9c9c-45ef-96a5-1a9eb375aa44
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
found 20542697472 bytes used err is 0
total csum bytes: 18598060
total tree bytes: 591740928
total fs tree bytes: 529514496
total extent tree bytes: 36536320
btree space waste bytes: 103678584
file data blocks allocated: 68666994688
 referenced 19604353024

Нормальную-это про ext4?

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

Ext4 самая нормальная конечно, но главное на инодах не экономить, в зависимости от задач определение нормальности может принимать иную форму. Просто самая универсальная, ничего интересного.

anonymous
()
Ответ на: комментарий от gigantischer

Мне интересно чем это закончится. Возьми флешку на пару терабайт в крайнем случае. Тут проблема как и с zfs и hammer2 (да и иноды ext4 туда же) — слишком маленький раздел, или нечто иное?

anonymous
()
Ответ на: комментарий от gigantischer

Хорошо.

Тогда:

  1. Создаёшь на разделе файл размером 2 ГиБ:
    truncate -s 2G /path/to/scratchpad.img
    
  2. Подцепляешь его как петлевое блочное устройство:
    losetup --find --show /path/to/scratchpad.img
    

    losetup напечатает путь до блочного устройства вида /dev/loopX.

  3. Добавляешь его вторым устройством к подопытному разделу:
    btrfs device add /dev/loopX /path/to/mountpoint
    
  4. Делаешь balance (и идёшь пить чай):
    btrfs balance start -dusage=50 -musage=50 -v /path/to/mountpoint
    
  5. Отключаешь петлевое устройство от раздела:
    btrfs device remove /dev/loopX /path/to/mountpoint
    
  6. Отключаешь временный файл от петлевого устройства:
    losetup -d /dev/loopX
    
  7. Удаляешь временный файл:
    rm -v /path/to/scratchpad.img
    

Всё понятно?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Спасибо, сохранил.

Я в своё время до такого не додумался, психанул, снёс сусю с btrfs и поставил федору.

gasinvein ★★★
()
Ответ на: комментарий от intelfx

Все понятно, только у меня на свободном ext4 разделе примонтированном под рутом ничего нельзя создать: Отказано в доступе. Доступен только каталог lost+found. При этом в fstab:

UUID=4900ed53-7764-4bce-9482-cabe43d66fc7 /mnt/IMAGEZ	ext4       defaults        0 2

UUID=66be278b-9c9c-45ef-96a5-1a9eb375aa44 /mnt/LEAP-15	btrfs       defaults        0 2

fsck ошибок для этого ext4 раздела не выдает:

# fsck /dev/sda10
fsck from util-linux 2.29.2
e2fsck 1.42.11 (09-Jul-2014)
/dev/sda10: clean, 11/5431296 files, 387906/21703424 blocks

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

Выйди в initramfs бусибокс и оттуда чекай , потому что

anonymous
()
Ответ на: комментарий от gigantischer

Все понятно, только у меня на свободном ext4 разделе примонтированном под рутом ничего нельзя создать: Отказано в доступе. Доступен только каталог lost+found.

Ничего не понял. Ты под рутом пытаешься создать файл или под рутом примонтировано? Покажи права доступа на всю иерархию (ls -laR /mnt/IMAGEZ). Всё, что я написал, нужно делать от рута.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

я под рутом монтировал ext4, который свежесозданный sda10, теперь так:

# ls -laR /mnt/IMAGEZ/
/mnt/IMAGEZ/:
total 24
drwxr-xr-x 3 root root  4096 Oct 28 12:05 .
drwxr-xr-x 9 root root  4096 Oct 28 10:51 ..
drwx------ 2 root root 16384 Oct 28 12:05 lost+found

/mnt/IMAGEZ/lost+found:
total 20
drwx------ 2 root root 16384 Oct 28 12:05 .
drwxr-xr-x 3 root root  4096 Oct 28 12:05 ..

gigantischer
() автор топика
Ответ на: комментарий от gigantischer

Ну тогда я не понимаю, о чём ты говоришь. Как тебе может быть «отказано в доступе» в корень раздела, но «доступен» lost+found, у которого права вообще 0700?

Разберись, в чём там у тебя дело, потом чини btrfs по инструкции.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

А ещё, ТС

Хотя при этом через df -h видно на этом разделе 7 ГБ свободно:

Может из-за сжатия и прочего прочего «системный» df ведёт себя как поехавший и показывает некорректную инфу?

Попробуй

btrfs filesystem df /

annerleen ★★★★☆
()
Ответ на: А ещё, ТС от annerleen
# btrfs filesystem df /mnt/LEAP-15/
Data, single: total=27.23GiB, used=18.58GiB
System, DUP: total=32.00MiB, used=16.00KiB
Metadata, DUP: total=902.00MiB, used=564.31MiB
GlobalReserve, single: total=512.00MiB, used=174.31MiB

gigantischer
() автор топика

Попробуй ещё и блоки с метаданными побалансировать (замени в предложенной intelfx команде -dusage= на -musage=) или вовсе пошатай оба сразу:

for THRESH in `seq 0 5 60`; do
  btrfs balance start -dusage=${THRESH} -musage=${THRESH} /mnt/LEAP-15
done

Ещё можно предположить, что у тебя системный snapper насоздавал снапшотов, но не удосужился их за собой почистить. Проверь командой btrfs subvolume list -p /mnt/LEAP-15.

И на будущее, в OpenSuSE должен быть пакет btrfsmaintenance, который такой housekeeping делает сам по расписанию — использую портированную версию на Arch и мои волосы чистые и шёлковистые. Проверь, что этот пакет у тебя установлен, и что в его конфиге (у меня это /etc/default/btrfsmaintenance) добавлен путь до этой ФС.

spijet ★★★
()
Ответ на: комментарий от gigantischer

Тогда ОК, не обращай внимания на вопрос и смотри моё предыдущее сообщение. :)

spijet ★★★
()
Ответ на: комментарий от spijet

'btrfsmaintenance' уже установлен. Нет кандидатов на обновление «btrfsmaintenance-0.2-16.1.noarch». Самая последняя версия уже установлена.

У меня файла /etc/default/btrfsmaintenance нет в системе, доступны только такие:

% rpm -ql btrfsmaintenance
/usr/lib/systemd/system
/usr/lib/systemd/system/btrfsmaintenance-refresh.service
/usr/lib/zypp
/usr/lib/zypp/plugins
/usr/lib/zypp/plugins/commit
/usr/lib/zypp/plugins/commit/btrfs-defrag-plugin.py
/usr/sbin/rcbtrfsmaintenance-refresh
/usr/share/btrfsmaintenance
/usr/share/btrfsmaintenance/btrfs-balance.sh
/usr/share/btrfsmaintenance/btrfs-defrag.sh
/usr/share/btrfsmaintenance/btrfs-scrub.sh
/usr/share/btrfsmaintenance/btrfs-trim.sh
/usr/share/btrfsmaintenance/btrfsmaintenance-refresh-cron.sh
/usr/share/doc/packages/btrfsmaintenance
/usr/share/doc/packages/btrfsmaintenance/COPYING
/var/adm/fillup-templates/sysconfig.btrfsmaintenance

gigantischer
() автор топика
Ответ на: комментарий от intelfx

на 4 шаге вылезло такое:

# btrfs balance start -dusage=50 -musage=50 -v /mnt/LEAP-15/
Dumping filters: flags 0x7, state 0x0, force is off
  DATA (flags 0x2): balancing, usage=50
  METADATA (flags 0x2): balancing, usage=50
  SYSTEM (flags 0x2): balancing, usage=50
ERROR: error during balancing '/mnt/LEAP-15/': No space left on device
There may be more info in syslog - try dmesg | tail

и в dmesg

[62833.330516] BTRFS info (device sda6): 15 enospc errors during balance

gigantischer
() автор топика
Ответ на: комментарий от spijet

Спасибки, такой файл присутствует. А как в нем правильно добавить путь до этой ФС? Вместо

BTRFS_BALANCE_MOUNTPOINTS="/"

указать

BTRFS_BALANCE_MOUNTPOINTS="/mnt/LEAP-15"

и перемонтировать ФС ?

gigantischer
() автор топика
Ответ на: комментарий от intelfx

Принудительный trim для фс. Эта фс прям создана для ssd. Больше принудительных trim'ов богу trim'ов.

anonymous
()
Ответ на: комментарий от gigantischer

Добавь через пробел:

BTRFS_BALANCE_MOUNTPOINTS="/ /mnt/LEAP-15"
И сохрани конфиг. Перемонтировать не нужно.

По поводу твоего ответа intelfx — попробуй с меньшими значеними usage, например 5.

spijet ★★★
()
Ответ на: комментарий от gigantischer

Если «на 4 шаге» означает, что ты сделал предыдущие три (мало ли), то действительно попробуй с меньшими значениями -dusage=. Я что-то загнул с 50 сразу.

Если снова не сработает, создай ещё один временный файл и докинь на раздел ещё больше места (типа гигов 10) :) Рано или поздно должно получиться.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.