Hard-Drive

儘管有足夠的空間,但在 btrfs 上出現“設備上沒有剩餘空間”錯誤

  • December 6, 2016

幾乎所有地方我都在抱怨日誌中遇到失敗No space left on device

Gitlab 日誌:

==> /var/log/gitlab/nginx/current <==
2016-11-29_20:26:51.61394 2016/11/29 20:26:51 [emerg] 4871#0: open() "/var/opt/gitlab/nginx/nginx.pid" failed (28: No space left on device)

Dovecot 電子郵件日誌:

Nov 29 20:28:32 aws-management dovecot: imap(email@www.sitename.com): Error: open(/home/vmail/emailuser/Maildir/dovecot-uidlist.lock) failed: No space left on device

的輸出df -Th

Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     ext4      7.8G  3.9G  3.8G  51% /
devtmpfs       devtmpfs  1.9G   28K  1.9G   1% /dev
tmpfs          tmpfs     1.9G   12K  1.9G   1% /dev/shm
/dev/xvdh      btrfs      20G   13G  7.9G  61% /mnt/durable
/dev/xvdh      btrfs      20G   13G  7.9G  61% /home
/dev/xvdh      btrfs      20G   13G  7.9G  61% /opt/gitlab
/dev/xvdh      btrfs      20G   13G  7.9G  61% /var/opt/gitlab
/dev/xvdh      btrfs      20G   13G  7.9G  61% /var/cache/salt

看起來還有很多 inode 空間。的輸出df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 105031 419257   21% /
devtmpfs       475308    439 474869    1% /dev
tmpfs          480258      4 480254    1% /dev/shm
/dev/xvdh           0      0      0     - /mnt/durable
/dev/xvdh           0      0      0     - /home
/dev/xvdh           0      0      0     - /opt/gitlab
/dev/xvdh           0      0      0     - /var/opt/gitlab
/dev/xvdh           0      0      0     - /var/cache/salt

的輸出btrfs fi show

Label: none  uuid: 6546c241-e57e-4a3f-bf43-fa933a3b29f9
       Total devices 4 FS bytes used 11.86GiB
       devid    1 size 10.00GiB used 10.00GiB path /dev/xvdh
       devid    2 size 10.00GiB used 9.98GiB path /dev/xvdi
       devid    3 size 10.00GiB used 9.98GiB path /dev/xvdj
       devid    4 size 10.00GiB used 9.98GiB path /dev/xvdk

的輸出btrfs fi df /mnt/durable

Data, RAID10: total=17.95GiB, used=10.12GiB
Data, single: total=8.00MiB, used=0.00
System, RAID10: total=16.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID10: total=2.00GiB, used=1.74GiB
Metadata, single: total=8.00MiB, used=0.00
unknown, single: total=272.00MiB, used=8.39MiB

這可能是什麼原因?我正在使用基本 linux AMI ec2 核心版本 4.4.5-15.26.amzn1.x86_64

更新

執行下面建議的命令btrfs fi balance start -dusage=5 /mnt/durable給了我以下錯誤:

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

在手動刪除了一堆總計約 1GB 的較大文件後,我重新啟動機器並再次嘗試,確保我使用的是 sudo,並執行了命令。然後我再次重新啟動我的機器以獲得良好的效果,它似乎已經解決了這個問題

歡迎來到 BTRFS 的世界。它有一些誘人的功能,但也有一些令人憤怒的問題。

首先,關於您的設置的一些資訊,看起來您在 BTRFS“raid 10”卷中有四個驅動器(因此所有數據都儲存在不同的磁碟上兩次)。然後這個 BTRFS 卷被分割成不同掛載點上的子卷。子卷共享一個磁碟空間池,但具有單獨的 inode 編號,並且可以安裝在不同的位置。

BTRFS 在“塊”中分配空間,塊被分配給特定類的數據或元數據。可能發生的事情(並且在您的情況下看起來已經發生了)是所有可用空間都分配給數據塊,沒有為元數據留下空間

似乎(由於我不完全理解的原因)BTRF 在使用的​​元數據空間比例指標達到 100% 之前“耗盡”了元數據空間。

這似乎是您的情況發生的情況,有很多可用數據空間,但沒有未分配給塊的可用空間,並且現有元數據塊中的可用空間不足。

解決方法是執行“重新平衡”。這將移動數據,以便一些塊可以返回到“全域”空閒池,在那裡它們可以作為元數據塊重新分配

btrfs fi balance start -dusage=5 /mnt/durable

後面的數字-dusage設置了重新平衡的積極程度,即需要多接近清空塊才能被重寫。如果餘額說它重寫了 0 個塊,請使用更高的值重試-dusage

如果餘額失敗,那麼我會嘗試重新啟動和/或通過刪除文件來釋放一些空間。

引用自:https://serverfault.com/questions/817751