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을 재배치해야 했습니다"로 끝나는 경우 적어도 하나의 청크가 재배치될 때까지 "dusage" 백분율 매개변수를 늘려야 합니다.

다음과 같이 균형 명령이 실패하는 경우:

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

공간을 확보하기 위해 실제로 장치에서 파일을 삭제해야 할 수도 있습니다. 그런 다음 균형 명령을 다시 실행하십시오.

하지만 고마워요Marc의 블로그: btrfs - Btrfs 파일 시스템 무결성 문제 복구또 다른 옵션은 다음과 같습니다.

이 문제를 해결하는 한 가지 방법은 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를 사용하는 것이 좋습니다.

관련 정보