btrfs – full error (No space left on device)

btrfs는 filesystem의 한 종류이다,
wiki에서는 다음과 같이 소개하고 있다.

Btrfs(B-tree file system 또는 Butter file system, Better F S)는 파일 시스템 가운데 하나로 현재 페이스북크리스 메이슨이 개발을 지휘하고 있다. 꽤 안정화되어 시험적으로 사용하는곳들이 생기고 있다. (B-tree file system, pronounced as “butter F S”, “better F S”, “b-tree F S”, “butterface”, or simply by spelling it out)

B-Tree 기반의 가볍고, 빈 공간 캐시, inode 캐시 지원 등의 특징을 가지고 있지만, SSD 최적화를 지원하는 것이 가장 큰 특징이 아닌가 생각한다.

 

각설하고 리눅스에서, 특히나 SSD를 btrfs 형식으로 지정해놓았을 경우, 프로그램 실행 중 “No space left on device” 에러가 나면서 실행이 안되는 경우가 발생한다.

특히나 Android Build시에 Jack Server 빌드중에 발생할 가능성이 높다!!!

“No space left on device” 에러는 Disk에 남은 공간이 없다는 이야기이다. 이럴때는 사용하지 않는 파일을 삭제하거나, Disk를 정리해 주면 된다.

 

1. df 명령어

먼저 df 명령어로 어디에 공간이 모자른지 확인한다.

$ df -alh

확인 후 100% 가까이 사용하고 있는 파티션에 들어가서 파일을 정리하여 여유공간을 만들면 된다.

 

2. B-tree file system

그런데 FileSystem이 B-tree file system으로 되어있는 Disk는 df로는 아무리 확인해 봤자 확인이 안된다.

df로 확인하여 여유공간이 50% 이상 남아있는데도 자꾸 “No space left on device”가 뜨면서 에러가 난다 ㅠㅠ

이럴 경우는 btrfs 명령어로 사용량을 확인할 수가 있다.

B-tree file system에서 저장공간이 부족한 경우는 대체로 두 가지이다.

쓰레기(Dummy) 값의 Chunk가 차지하고 있거나 or 쓰레기(Dummy) 값의 Metadata가 차지하고 있거나   (참고)

 

먼저 다음 명령어로 disk 사용량을 확인한다.

$ sudo btrfs filesystem show

위 정보를 확인하면, /dev/sda5는 9.31G의 공간이고, 실제 사용량은 3.48G 이지만, 전체 사용량은 9.3G 이다. 즉, 9.3 – 3.48 = 5.82G 만큼은 정리할 수 있다!!

/dev/sda5는 위의 df명령어로 확인하면 /var 인것을 알 수 있다.

$ btrfs balance start -dusage=0 /var

각 파티션 별로 metadata의 사용량을 확인할 수 있다.

$ sudo btrfs filesystem df /var

metadata를 정리하는 명령어는 다음과 같다

$ btrfs balance start -v /var

 

디스크 공간 확보 완료!!! “No space left on device”, Get out!!!

 


ref.