儘管有足夠的空間,但在 btrfs 上出現“設備上沒有剩餘空間”錯誤
幾乎所有地方我都在抱怨日誌中遇到失敗
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
。如果餘額失敗,那麼我會嘗試重新啟動和/或通過刪除文件來釋放一些空間。