본문 바로가기
일하는 중에

Hudson 사용 중 Free Temp Space가 부족한 경우

by likebnb 2013. 6. 5.

0. 들어가는 말, Hudson이 Free Temp Space가 부족해서 Job의 Status를 off로 보고한다.


허드슨은 잘 알려진 CI 툴이다. 허드슨을 리눅스에 설치하여 사용할 때 만나기 쉬운 상황이다. 이는 리눅스의 /tmp 파티션이 1GB

이하의 크기로 잡혀 있을 때 발생하는 것으로 빌드 실행 상태가 오프라인으로 되어 빌드를 할 수 없는 상태이다. 아래 그림에서 빨간색으로

표시된 Free Temp Space 항목이 그것으로 리눅스 시스템에서 df -h 명령으로 /tmp 파티션의 크기를 확인해보면 알 수 있다.


그림1. Free Temp Space is too low그림1. Free Temp Space is too low



아래 그림은 df -h 명령으로 현재 리눅스 시스템의 파티션 정보이다. 마운트 포인트 /tmp에 마운트 된 파티션 /dev/sda7은 

그 크기가 1008MB이다. 새로운 디스크를 추가하지 않고, 기존 파티션을 다시 포맷하지 않고 /tmp 파티션의 크기를 늘려주는 

방법은 없을까? 이럴 때 사용할 수 있는 유틸리티가 바로 dd 이다.



그림2. /tmp 파티션의 현재 크기그림2. /tmp 파티션의 현재 크기





작업의 순서는 이렇다. 빈 디스크 이미지 파일을 하나 생성하여 이 디스크를 ext4 타입으로 포맷하고 이를 

블럭 디바이스로 인식하도록 가상 장치로 마운트 한다. 이 디스크를 마운트 포인트 /tmp에 마운트 하는 것이다. 



1. 빈 디스크 이미지(Empty Disk Image)를 하나 생성한다


내용이 0으로 채워진(/dev/zero) 빈 디스크 이미지 파일 /temp를 하나 생성하는데  그 크기는 4GB로 한다.

다음과 dd 명령의 옵션으로 if, of, bs, count에 각각 값을 지정해준다.

 

dd if=/dev/zero of=/temp bs=1024M count=4



2. 포맷


빈 디스크 이미지 파일을 생성했으면 이 디스크 이미지를 리눅스 파일 시스템으로 포맷한다. 다음 명령의 
-j 옵션은 저널링을 지원하는 파일시스템으로 포맷하라는 의미이다.

mke2fs -j /temp


그림3. 리눅스 파일 시스템으로 포맷하기그림3. 리눅스 파일 시스템으로 포맷하기




3. 이미지 파일을 블럭 디바이스로 마운트


포맷이 끝났으면 이제 이 디스크 이미지를 마운트 하자. 옵션 loop는 이미지 파일을 하나의 블럭 디바이스처럼 

읽을 수 있도록 가상의 장치로 마운트 할 때 사용하는 옵션이다.


mount -t ext4 -o loop /temp /tmp




그림4. 블럭 디바이스로 마운트 하기그림4. 블럭 디바이스로 마운트 하기





4. 자동 마운트 설정


다음 부팅 시에도 자동으로 마운트 되게 하려면 /etc/fstab 파일을 편집모드로 열어서 맨 마지막 줄에 
다음을 추가한다. 기존에 마운트 포인트 /tmp에 마운트 설정했던 부분은 주석으로 처리한다.  주의할 것은
loop를 빼먹지 말아야 한다는 것이다.

/temp        /tmp      ext4       defaults,loop      0 0








5. /tmp에 쓰기 권한 주기


마지막으로 적절한 권한을 주지 않으면 hudson이 실행되질 않는다. 다음과 같은 읽기와 쓰기 권한을 추가하도록 한다.


chown a+wr /tmp







이제 모든 과정이 끝났다. 마지막으로 허드슨으로 돌아가 Status를 갱신하도록 하자.

Free Temp Space가 3GB로 1GB 이상이 된 것을 확인할 수 있다. master 노드로 가서

Online으로 설정해주면 된다.