btrfs에 충분한 공간이 있어도 "장치에 남은 공간이 없습니다"오류


17

거의 모든 곳에서 내가 불평하는 로그에서 실패하고 있습니다. 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)

도브 코트 이메일 로그 :

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

아이 노드 공간도 충분한 것 같습니다. 출력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를 사용하고 명령을 실행했는지 확인했습니다. 그런 다음 좋은 측정을 위해 내 컴퓨터를 다시 한 번 재부팅했는데 문제가 해결 된 것 같습니다


할당량 설정이 있습니까?
Zoredache

일반 도구가 BTRFS를 제대로 이해하지 못하면 BTRFS 관련 도구가 필요합니다. "btrfs fi show"및 "btrfs fi df / mnt / durable"의 출력을 추가하십시오
Peter Green

@PeterGreen은 btrfs의 출력을 추가했습니다 ... 범죄자를 찾은 것처럼 보입니다.
오스틴

내가 제안한 두 번째 명령의 출력을 추가 할 수 있습니까?
피터 그린

2
btrfs는 과거에 여유 공간에 많은 문제가 있었으며 이것이 미래의 독자라면 그 정보로부터 혜택을 얻을 수있는 경우가 있기 때문에 커널 버전은 매우 중요합니다.
PlasmaHH

답변:


19

BTRFS의 세계에 오신 것을 환영합니다. 그것은 약간의 유쾌한 기능뿐만 아니라 약간의 격렬한 문제가 있습니다.

먼저, 설정에 대한 일부 정보는 BTRFS "raid 10"볼륨에 4 개의 드라이브가있는 것처럼 보입니다 (따라서 모든 데이터는 다른 디스크에 두 번 저장 됨). 이 BTRFS 볼륨은 다른 마운트 지점의 하위 볼륨으로 조각됩니다. 서브 볼륨은 디스크 공간 풀을 공유하지만 별도의 inode 번호를 가지며 다른 위치에 마운트 될 수 있습니다.

BTRFS는 "청크"로 공간을 할당하고, 청크는 특정 클래스의 데이터 또는 메타 데이터에 할당됩니다. 일어날 수있는 일 (그리고 귀하의 경우에 일어난 것처럼 보입니다)은 모든 여유 공간이 데이터 청크에 할당되어 메타 데이터를위한 공간이 없다는 것입니다

사용 된 메타 데이터 공간의 비율 표시가 100 %에 도달하기 전에 BTRF가 메타 데이터 공간이 "마비 된"것으로 보입니다.

이것은 귀하의 경우에 발생한 것으로 보이며 사용 가능한 데이터 공간이 많지만 청크에 할당되지 않은 여유 공간이 없으며 기존 메타 데이터 청크의 여유 공간이 충분하지 않습니다.

수정은 "재조정"을 실행하는 것입니다. 이렇게하면 일부 청크가 메타 데이터 청크로 재 할당 될 수있는 "전역"사용 가능한 풀로 반환 될 수 있도록 데이터가 이동합니다.

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

뒤의 숫자 -dusage는 재조정이 얼마나 활발한 지, 즉 블록을 다시 작성해야하는 정도를 설정합니다. 저울이 0 블록을 다시 쓴다고하면 더 높은 값으로 다시 시도하십시오 -dusage.

저울이 실패하면 파일을 제거하여 재부팅하거나 공간을 확보하려고 시도합니다.


9
재조정은 새로운 조각 모음입니다.
Nathan Osman

1
ERROR: error during balancing '/mnt/durable' - No space left on device드라이브에서 거의 1GB를 삭제 한 후에도 가져 오기
Austin

재부팅을 시도 했습니까 (유사한 문제가 발생했을 때 정리가 완료된 후 재부팅).
Peter Green

@PeterGreen dmesg | tail재부팅 후 새 오류가 발생한 후 게시물에 내용을 추가했습니다 .
Austin

4

RAID 설정으로 btrfs를 실행하고 있으므로 밸런스 작업을 실행하십시오.

btrfs balance start /var/opt/gitlab

공간이 충분하지 않다는 오류가 발생하면 다음 구문으로 다시 시도하십시오.

btrfs balance start -musage=0 -dusage=0 -susage=0 /var/opt/gitlab 

공간에 대한 오류가 표시되는 각 btrfs 파일 시스템에 대해이 작업을 반복하십시오. 공간 문제가 메타 데이터가 미러 디스크에 분산되지 않아서 발생하는 경우 공간이 확보 될 수 있습니다.


공간에 대한 오류가 발생했습니다. 이 경고가 어떻게 생겼는지 나에게 보여주고 다른 구문을하려고 할 때 : Refusing to explicitly operate on system chunks. Pass --force if you really want to do that.할 것을 OK인가?
Austin

-susage=0옵션 없이 시도하십시오 .
버텍스

2

내 시스템에서 cron.monthly에 다음 작업을 추가했습니다.

clear_cache다시 마운트는 btrfs를가 무료로지도를 가지고 있었다 약간의 손상 문제 때문이다. (마지막으로 문제를 발견했다고 생각하지만 문제가 너무 성가 시므로 한 달에 한 번지도를 다시 작성하기 위해 기꺼이 지불 할 것입니다.)

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

공간이 부족하여 재조정 할 수없는 지점에 도달하면 재조정 기간 동안 볼륨에 일종의 다른 블록 장치 (또는 다른 디스크의 루프백 장치)를 임시로 추가 한 다음 그것을 제거하십시오.


많은 @rrauenza 감사합니다! 당신의 대본은 정말로 나의 하루를 구했습니다. 필자의 경우 밸런스 명령이 60에서 청크를 재배치하는 데 성공했습니다.
Michal Fapso

1

이것은 btrfs에서 그다지 큰 문제가 아니며, 이것이이 시스템에서 수행 된 것입니다. 이는 많은 양의 단일 할당 블록에 의해 입증되는 것처럼 '단일'할당 정책에서 '공격 10'할당 정책으로 불완전한 재조정의 결과입니다. 아마 단일로 시작한 다음 변환이 중단되었습니다. 할당이 일관되지 않은 풀에는 할당 문제가 있습니다.

풀의 61 %가 소비되었다고 가정하십시오. 할당 정책은 RAID10이므로 모든 것이 복제 2이므로 풀에 도달하기 전에 최대 50 % 풀 소비가 발생해야합니다. 이것이 단일에서 RAID 10으로의 변환이 실패한 이유입니다. 나는 추측 만 할 수 있지만 아마도 재조정의 중간에 할당되었을 것입니다. 사용중인 디스크가있는 RAID 10으로 재조정 할 공간이 장치에 남아 있지 않습니다. 61 %에 도달 한 유일한 이유는 디스크에 불일치가 할당되고, 일부는 단일 할당으로 선형으로, 대부분 RAID 10에서 있기 때문입니다.

많은 것을 변경하지 않고 공간을 확보하려는 경우 단일 할당 정책으로 재조정 할 수 있습니다. 디스크를 추가하거나 디스크 크기를 늘릴 수도 있습니다. 또는이 경우와 마찬가지로 풀 전체를 50 % 미만으로 사용하므로 풀이 실제로 RAID 10과 균형을 유지할 수 있도록 많은 파일을 삭제하면됩니다. 파일을 삭제 한 후 재조정해야합니다. 그렇지 않으면 여전히이 얀키 할당 정책이 유지됩니다.

특히, 해당 파일을 삭제 한 후 재조정 할 때 RAID 10을 적용하여 다음과 같이 할당 된 단일 블록을 제거하십시오.

btrfs fi balance start -dconvert=raid10 -mconvert=raid10 /home

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.