Ubuntu думает, что диск Btrfs полон, но это не

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=a168d1ac-4e13-4643-976d-6e47ea1732b1 /boot        ext2  defaults                                                                   0 1
/dev/mapper/sda4_crypt                    /            btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@          0 2
/dev/mapper/sda4_crypt                    /tmp         btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@tmp       0 2
/dev/mapper/sda4_crypt                    /run         btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@run       0 2
/dev/mapper/sda4_crypt                    /var/crash   btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-crash 0 2
/dev/mapper/sda4_crypt                    /var/tmp     btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-tmp   0 2
/dev/mapper/sda4_crypt                    /var/log     btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-log   0 2
/dev/mapper/sda4_crypt                    /var/spool   btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@var-spool 0 2
/dev/mapper/sda5_crypt                    /home        btrfs defaults,autodefrag,compress=lzo,inode_cache,space_cache,subvol=@home      0 3
/dev/mapper/750er                         /media/750er ext4  defaults                                                                   0 4
/dev/mapper/cswap                         none         swap  defaults                                                                   0 5
➜  ~  df -h         
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sda4_crypt   38G   12G   13M 100% /
none                    4,0K     0  4,0K   0% /sys/fs/cgroup
udev                    2,0G  4,0K  2,0G   1% /dev
tmpfs                   396M  1,3M  394M   1% /run
none                    5,0M     0  5,0M   0% /run/lock
none                    2,0G  208K  2,0G   1% /run/shm
none                    100M   36K  100M   1% /run/user
/dev/mapper/sda4_crypt   38G   12G   13M 100% /tmp
/dev/sda2               231M   44M  175M  21% /boot
/dev/mapper/sda4_crypt   38G   12G   13M 100% /var/crash
/dev/mapper/sda4_crypt   38G   12G   13M 100% /var/tmp
/dev/mapper/sda4_crypt   38G   12G   13M 100% /var/log
/dev/mapper/sda4_crypt   38G   12G   13M 100% /var/spool
/dev/mapper/sda5_crypt  3,7T  2,4T  1,2T  67% /home
/dev/mapper/750er       688G  276G  377G  43% /media/750er
/dev/mapper/2tb         1,8T  1,7T  141G  93% /media/2tb
➜  ~  sudo btrfs fi df /
Data, single: total=9.47GiB, used=9.46GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=13.88GiB, used=1.13GiB
Metadata, single: total=8.00MiB, used=0.00
➜  ~  

Это - раздел на 40 ГБ с некоторыми снимками на нем. Но это сжато так, я думаю, что 9,46GB/40GB точен. Но моя Ubuntu перестала работать, потому что она говорит, что не имеет никакого дискового пространства. У меня были способные ошибки, программам установки наклона и моему mysql серверу не удалось запуститься из-за этого.

И я знаю о не полагаться df Я просто включал его для полноты.

Я думаю использование Ubuntu df который, как известно, сообщает неправильно с Btrfs внутренне и сбоями по этой причине. Это имело бы смысл для APT, когда он делает проверки на пространство. Но этому на самом деле не удается записать в диск.

$ sudo time dd if=/dev/zero of=large bs=2G count=1
dd: error writing ‘large’: No space left on device
0+1 records in
0+0 records out
11747328 bytes (12 MB) copied, 1,29706 s, 9,1 MB/s
Command exited with non-zero status 1
0.00user 1.40system 0:01.44elapsed 97%CPU (0avgtext+0avgdata 2098028maxresident)k
160inputs+23104outputs (0major+383008minor)pagefaults 0swaps
9
задан 3 September 2017 в 06:30

4 ответа

Btrfs отличается от традиционных файловых систем. Это не просто слой, который переводит имена файлов в смещения на блочном устройстве, это - больше слоя, который комбинирует традиционную файловую систему с LVM и RAID. И как LVM, это имеет понятие выделения места на базовом устройстве, но не на самом деле использования его для файлов.

Традиционная файловая система разделена на файлы и свободное пространство. Легко вычислить, сколько пространства используется или свободно:

|--------files--------|                                                |
|------------------------drive partition-------------------------------|

Btrfs комбинирует LVM, RAID и файловую систему. Диск разделен на подобъемы, каждый динамично измеренный и дублируемый:

|--files--|    |--files--|         |files|         |                   |
|----@raid1----|------@raid1-------|-----@home-----|metadata|          |
|------------------------drive partition-------------------------------|

Схема показывает раздел, разделенный на два подобъема и метаданные. Один из подобъемов дублирован (RAID1), таким образом, существует две копии каждого файла на устройстве. Теперь у нас не только есть понятие того, сколько пространства свободно на слое файловой системы, но также и сколько пространства свободно на слое блока (раздел диска) ниже его. Пространство также поднято метаданными.

При рассмотрении свободного пространства в Btrfs мы должны разъясниться, какое свободное пространство мы говорим о - слой блока или слой файла? На слое блока данные выделяются в блоках на 1 ГБ, таким образом, значения довольно крупны, и не могли бы перенести отношение на сумму пространства, которое может на самом деле использовать пользователь. На слое файла невозможно сообщить о количестве свободного пространства, потому что сумма пространства зависит от того, как это используется. В вышеупомянутом примере файл, хранивший на дублируемом подобъеме @raid1, займет вдвое больше места как тот же файл, хранивший на @home подобъеме. Снимки только хранят копии файлов, которые были впоследствии изменены. Больше нет отображения 1-1 между файлом, поскольку пользователь видит его, и файл, как сохранено на диске.

Можно проверить свободное пространство на слое блока с btrfs filesystem show / и свободное пространство на слое подобъема с btrfs filesystem df /


# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sda4_crypt   38G   12G   13M 100% /

Для этого смонтированного подобъема df сообщает о диске общего размера 38G, с 12G используемый, и 13M свободный. 100% свободного места использовались. Помните, что общий размер 38G разделен между различными подобъемами и метаданными - это не эксклюзивно к этому подобъему.

# btrfs filesystem df /
Data, single: total=9.47GiB, used=9.46GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=13.88GiB, used=1.13GiB
Metadata, single: total=8.00MiB, used=0.00

Каждая строка показывает общее пространство и использованное пространство для различного типа данных и типа репликации. Показанные значения являются данными сохраненные а не необработанные байты на диске, поэтому при использовании RAID-1 или RAID 10 подобъемов сумма необработанного используемого устройства хранения данных удваивает значения, которые Вы видите здесь.

Первый столбец показывает тип сохраненного объекта (Данные, Система, Метаданные). Второй столбец показывает, хранится ли единственная копия каждого объекта (единственная), или хранятся ли две копии каждого объекта (DUP). Две копии используются для уязвимых данных, таким образом, существует резервное копирование, если одна копия повреждается. Для строк DUP используемое значение должно быть удвоено для получения суммы пространства, использованного на фактическом диске (потому что btrfs фс df сообщает о хранивших данных, не используемое дисковое пространство). Третьи и четвертые столбцы показывают общее и использованное пространство. Нет никакого бесплатного столбца, так как количество "свободного пространства" зависит от того, как оно используется.

Вещь, которая выделяется об этом диске, состоит в том, что Вам выделили 9.47 ГиБ пространства для обычных файлов, из которых Вы использовали 9.46 ГиБ - это - то, почему Вы не получаете пространства, оставленного на ошибках устройства. Вам выделили 13.88 ГиБ пространства для дублированных метаданных, которых Вы использовали 1.13 ГиБ. Так как этими метаданными является дублированный DUP, это означает, что 27.76 ГиБ пространства были выделены на фактическом диске, которого Вы использовали 2.26 ГиБ. Следовательно 25.5 ГиБ диска не используются, но в то же время не доступны для файлов, которые будут сохранены в. Это - "Btrfs, огромные метаданные выделили" проблему. Чтобы попытаться исправить это, работать btrfs balance start -m /.-m параметр говорит btrfs только восстанавливать равновесие метаданных.

Подобная проблема исчерпывает пространство метаданных. Если вывод показал, что метаданные были на самом деле полны (используемое значение близко к общему количеству), то решение будет состоять в том, чтобы попытаться бесплатное почти пустой (<используемых 5%) блоки данных с помощью команды btrfs balance start -dusage=5 /. Эти свободные блоки могли затем быть снова использованы для хранения метаданных.

Для получения дополнительной информации посмотрите часто задаваемые вопросы Btrfs:

19
ответ дан 23 November 2019 в 04:47

Кредит переходит к @ignis и @bain. Только, чтобы иметь простое прямо к ссылке точки отвечают здесь без всей лекции и совместно использовать то, что я на самом деле сделал для получения системы, работающей снова.

btrfs balance start -m /mountpoint

Волшебная строка должна решить проблемы как это.

Я столкнулся с некоторой проблемой, с которой я не хочу к скуке Вас, и я не знаю, что было необходимо выполнить это от живого CD, но что я сделал в конце после того, как система была испорчена, не загрузившись, работал, btrfsck на устройствах (разблокировал crypto картопостроители), и она сделала на самом деле найденные ошибки, затем смонтировала корень btrfs файловая система без любых опций к /mnt, в противоположность в моей установленной системе, где / единственное смонтированный @ подобъем. Таким образом, у меня были все снимки и другие подобъемы также там. Я не знаю об этом, имеет значение.

btrfs balance start -m /mnt

Я получил метаданные от

Metadata, DUP: total=13.88GiB, used=1.13GiB

кому:

Metadata, DUP: total=1.38GiB, used=1.05GiB

И обновление:

$ sudo df -h /
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/sda4_crypt   38G   12G   26G  31% /

Таким образом, я думаю, что все прекрасно теперь.

1
ответ дан 23 November 2019 в 04:47

Короткий ответ: метаданные раздела Btrfs показывают, как 'используется' утилитами Стандартного диска как df.

  1. проверяют проблемный объем. например: /

    btrfs subvolume list /
    
  2. Наиболее вероятные снимки заполняют объем. Удалите снимок, в котором Вы не нуждаетесь. помешайте один последняя дата, Вы уверены, что система работала хорошо.

    btrfs subvolume delete <path> 
    

    , Где путь из предыдущего списка подобъема команды, в котором говорится "снимок".

  3. Перезагрузка и Вы сделаны

, Причиной проблемы мог бы быть Ваш дистрибутив или диспетчер пакетов, делающий snaphots каждый раз, когда Вы обновляете систему.

нбар: сбалансируйте сбои команды, если диск полон, поскольку нет никакого свободного пространства к blance к.

3
ответ дан 23 November 2019 в 04:47

В моем случае не понизилось бы использование диска, даже когда я удалил файлы и снимки.

баланс btrfs (данные и метаданные) не работал с ошибкой "никакое пространство, оставленное на устройстве"

btrfs balance start -m /
ERROR: error during balancing '/': No space left on device
There may be more info in syslog - try dmesg | tail

RAID1 показал полное использование на обоих дисках даже при том, что фактическое использование данных было ниже, чем одна треть из этого.

# btrfs fi sh
Label: none  uuid: 61a20f1a-c133-11e6-964b-d3bac0c48bbd
    Total devices 2 FS bytes used 153.94GiB
    devid    1 size 455.76GiB used 455.76GiB path /dev/sda2
    devid    2 size 455.76GiB used 455.76GiB path /dev/sdb2


# btrfs filesystem df /
Data, RAID1: total=452.73GiB, used=151.51GiB
System, RAID1: total=32.00MiB, used=80.00KiB
Metadata, RAID1: total=3.00GiB, used=2.42GiB
GlobalReserve, single: total=512.00MiB, used=0.00B

Решение: отбросьте пустые блоки, не нуждается ни в каком дополнительном пространстве:

btrfs balance start -dusage=0 /

btrfs balance start -musage=0 /

Источник: https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance#ENOSPC

Альтернатива: Мое решение состояло в том, чтобы уменьшиться, диски Видят: https://unix.stackexchange.com/questions/239765/how-to-fix-btrfs-superblock-error-after-resize-shrink-btrfs-couldnt-get-super

btrfs filesystem resize 1:430g /
btrfs filesystem resize 2:430g /

(команды занимают время, проверяют системный журнал для наблюдения блоков перемещения),

после этого измените размер:

btrfs filesystem resize 1:450g /
btrfs filesystem resize 2:450g /

После этого, btrfs баланс (метаданные) работал снова:

btrfs balance -m /

Затем баланс btrfs данных (перемещают блоки данных, которые имеют ниже, чем 33%-е использование):

btrfs balance -dusage=33 /
2
ответ дан 23 November 2019 в 04:47

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

Похожие вопросы: