ほぼすべての場所で、_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 protected]): 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」ボリュームに4つのドライブがあるように見えます(したがって、すべてのデータが異なるディスクに2回保存されます)。このBTRFSボリュームは、異なるマウントポイントのサブボリュームに分割されます。サブボリュームはディスクスペースのプールを共有しますが、個別のiノード番号があり、別の場所にマウントできます。
BTRFSは「チャンク」でスペースを割り当てます。チャンクは、データまたはメタデータの特定のクラスに割り当てられます。起こり得ること(そしてあなたの場合に起こったように見えること)は、すべての空き領域がデータチャンクに割り当てられ、メタデータの余地を残さないことです
また、メタデータスペースの使用率が100%に達する前に、BTRFがメタデータスペースを「使い果たす」ことも(理由は完全にはわかりません)と思われます。
これはあなたの場合に起こったようです、多くの空きデータ領域がありますが、チャンクに割り当てられていない空き領域はなく、既存のメタデータチャンクには十分な空き領域がありません。
修正は「リバランス」を実行することです。これによりデータが移動するため、一部のチャンクをメタデータチャンクとして再割り当てできる「グローバル」フリープールに戻すことができます。
btrfs fi balance start -dusage=5 /mnt/durable
-dusage
の後の数値は、リバランスの程度を設定します。つまり、ブロックを書き換えるまでに空にする必要がある間隔です。天びんが0ブロックを書き換えたと表示する場合は、-dusage
の値を大きくして再試行してください。
バランスがうまくいかない場合は、ファイルを削除して、再起動したりスペースを解放したりします。
RAID設定でbtrfsを実行しているので、バランス操作を実行してみてください。
btrfs balance start /var/opt/gitlab
これにより、十分なスペースがないというエラーが発生する場合は、次の構文で再試行してください。
btrfs balance start -musage=0 -dusage=0 -susage=0 /var/opt/gitlab
スペースに関するエラーが発生しているbtrfsファイルシステムごとに、この操作を繰り返します。メタデータがミラーリングされたディスク全体に分散されていないことが原因でスペースの問題が発生している場合、これによりスペースが解放される可能性があります。
私のシステムでは、cron.monthlyに次のジョブを追加しました。
clear_cache
再マウントは、btrfsがフリーマップで発生していたいくつかの破損問題が原因です。 (最終的に彼らが問題を見つけたと思いますが、問題は非常に煩わしいので、月に1度マップを再構築するために支払うつもりです。)
usage
オプションを増やして、次第に容量を増やして残高を増やします。
#!/bin/sh
for mountpoint in `mount -t btrfs | awk '{print $3}' | sort -u`
do
echo --------------------------
echo Balancing $mountpoint :
echo --------------------------
echo remount with clear_cache...
mount -oremount,clear_cache $mountpoint
echo Before:
/usr/sbin/btrfs fi show $mountpoint
/usr/sbin/btrfs fi df $mountpoint
for size in 0 1 5 10 20 30 40 50 60 70 80 90
do
time /usr/sbin/btrfs balance start -v -musage=$size $mountpoint 2>&1
time /usr/sbin/btrfs balance start -v -dusage=$size $mountpoint 2>&1
done
echo After:
/usr/sbin/btrfs fi show $mountpoint
/usr/sbin/btrfs fi df $mountpoint
done
スペースが足りないためにリバランスできないポイントに達した場合は、リバランスの期間中、ボリュームに何らかの種類の別のブロックデバイス(または別のディスク上のループバックデバイス)を一時的に追加することをお勧めします。それを除く。
これはbtrfsの問題ではなく、このシステムに対して行われたものです。これは、単一の割り当てブロックが大量にあることからもわかるように、「単一」の割り当てポリシーから「raid 10」の割り当てポリシーへの不完全なリバランスの結果のようです。おそらくシングルとして開始された後、変換が中断されました。このような一貫性のない割り当てを持つプールには、割り当ての問題があります。
プールの61%が消費されていると考えてください。割り当てポリシーはRAID10であるため、すべてがレプリケート2になるため、フルに達する前に最大50%のプール消費になるはずです。これが、シングルからRAID 10への変換が失敗した(そして継続している)理由です。私は推測することしかできませんが、それはおそらくリバランスの最中に割り当てられました。使用しているディスクでRAID 10に再バランスするためのスペースがデバイスに残っていません。 61%に達した唯一の理由は、ディスクに割り当てられた不整合が原因であり、一部は単一の割り当てで線形に割り当てられ、ほとんどがRAID 10です。
何も変更せずにスペースを確保したい場合は、単一の割り当てポリシーにリバランスできます。さらにディスクを追加したり、ディスクのサイズを増やしたりすることもできます。 ORこの場合のように、プールを実際にRAID 10にバランシングできるように、一連のファイルを削除することができます(全体で50%未満しか消費されないため)。ファイルを削除した後は必ずバランスを取り直してください。そうしないと、このぎこちない割り当てポリシーが適用されます。
具体的には、次のように、これらのファイルを削除した後でリバランスするときにRAID 10を適用して、割り当てられた単一のブロックを確実に取り除くようにします。
btrfs fi balance start -dconvert=raid10 -mconvert=raid10 /home