btrfsエラー:バランス調整中にエラーが発生しました。デバイスに余分なスペースがありません。

btrfsエラー:バランス調整中にエラーが発生しました。デバイスに余分なスペースがありません。

私のKubuntu 12.04システムのルートパーティションに空き容量がないため、起動できません。このコマンドはdf -h多くの空き容量を表示します(37%のみ使用)。

/dev/sda2        45G   17G   29G  37%

次のページには、Balanceコマンドを実行する必要があることを示します。

https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#I_get_.22No_space_left_on_device.22_errors.2C_but_df_says_I.27ve_got_lots_of_space

$ sudo btrfs fi balance start -dusage=5 /mount/point

私はこれが最善の方法であると完全に確信していませんが、これが私が見つけた唯一の方法です。ただし、コマンドを実行すると、次のエラーが発生します。

ERROR: error during balancing '/blah/blah/blah' - No space left on device

同じエラーが発生します。

$ sudo btrfs fi balance start -dusage=1 /mount/point

正しい解決策は何ですか?

答え1

このような場合、balance脱出する方法はいくつかあります。

sudo btrfs fi show
sudo btrfs fi df /mount/point
sudo btrfs fi balance start -dusage=10 /mount/point

バランスコマンドが「完了、XXチャンクの0を再配置する必要がありました」で終わる場合は、少なくとも1つのチャンクが再配置されるまで「dusage」パーセントパラメータを増やす必要があります。

次のようにバランスコマンドが失敗した場合:

ERROR: error during balancing '/blah/blah/blah' - No space left on device

スペースを解放するには、実際にデバイスからファイルを削除する必要があります。その後、バランスコマンドを再実行してください。

しかし、ありがとう。Marcのブログ:btrfs - Btrfsファイルシステムの整合性の問題を修復別のオプションは次のとおりです。

この問題を解決する1つの方法は、btrfsファイルシステムにデバイスを追加することです(USBキーも機能します)。これにより、バランシングが開始され、バランシングが完了したら、btrfsデバイスの削除を使用してデバイスを削除できます。また、リストには、カーネル 3.14 が以前のカーネルが解決できないバランスの問題のいくつかを解決できることが記載されているので、以前のカーネルがある場合は試してみてください。

答え2

一時的に別のBTRFSデバイス(バックアップフラッシュドライブ以上)を追加することで成功しました。RAMまたは他のパーティションの一時ファイル

RAM内のファイルの場合は、次のことを行う必要があります。RAMディスクの作成最初。場所を決定したら、ファイルを作成してBTRFSストレージアレイに追加するだけです。私は自分の目的で簡単なスクリプトを作成しました(btrfs-balance-add.sh)。

#!/bin/sh

FILE="$1"
SIZE="$2"
if [ "$#" -lt 3 ]; then
    LOC="/"
else
    LOC="$3"
fi

btrfs filesystem df "$LOC" # Print old
truncate -s "$SIZE" "$FILE" # If filesystem doesn't support "truncate", then use dd
modprobe loop # in case system hasn't yet loaded support for loopback devices
DEV_LOOP="$(losetup -f)"
losetup "$DEV_LOOP" "$FILE"
btrfs device add -f "$DEV_LOOP" "$LOC"
btrfs balance start -dusage=20 -musage=20 "$LOC" # feel free to tweak these values
btrfs device delete "$DEV_LOOP" "$LOC"
btrfs filesystem df "$LOC" # Print new
losetup -d "$DEV_LOOP"
rm "$FILE"

使用法:

> sudo btrfs-balance-add.sh /mnt/ramdisk/delme.bin 1G /

答え3

パラメータを増やしたり、他のブロックデバイスを追加したりすることを含め、許可された答えとMarkのブログですべてを試しましたが、役に立ちませ-dusageんでした。一部のファイルを削除してディスク全体の少量の空き容量を確保した後でも、balance完了できません。何らかの理由で、常にデータをほぼいっぱいのディスクに移動するようです。最終的に私に効果があったのは、デバイス全体のバランスを制限することでした。

btrfs balance start -ddevid=<dev_id> <path>

これは次のようになりますdev_id

btrfs fi show 

答え4

sudo apt-btrfs - スナップショットの削除 - 3dより古い 3日以上経過したスナップショットを削除します。データを移動すると、スナップショットデータが所定の位置から外れ、実際のデータをドライブ上のさまざまな場所に書き込む必要があります。これにより、以前の場所の古いデータに関連したスナップショットが削除され、そのセクタを再利用できます。また、btrfs ファイルシステムからデータと範囲の重複を排除するには、duperemove を使用することをお勧めします。

関連情報