2015년 1월 22일 목요일

에디슨이 갑자기 이상동작을 할 때 해결책

에디슨을 사용하다 보면 어느 순간 갑자기 보드가 이상한 동작들을 하는 경험을 하게 된다. 무선랜에 정상 연결 되었는데도 ping google.com 같은 명령도 실행이 안되고, 아두이노 IDE나 XDK에서 프로그램을 업로드 하려고 해도 이상한 에러가 나는 등의 증상이 발생한다.
이 경우 원인은 journal log 때문이다.

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               475080    358764     79620  82% /
devtmpfs                491736         0    491736   0% /dev
tmpfs                   492048         0    492048   0% /dev/shm
tmpfs                   492048       496    491552   0% /run
tmpfs                   492048         0    492048   0% /sys/fs/cgroup
tmpfs                   492048       496    491552   0% /etc/machine-id
systemd-1                 5638      5184       454  92% /boot
tmpfs                   492048        56    491992   0% /tmp
systemd-1              2337308     96656   2224268   4% /home
tmpfs                   492048         0    492048   0% /var/volatile
/dev/mmcblk0p5            1003        19       913   2% /factory
/dev/mmcblk0p10        2337308     96656   2224268   4% /home
/dev/mmcblk0p7            5638      5184       454  92% /boot

위의 결과를 보면 알겠지만 루트 파티션 (/)이 약 470MB 정도인데 시스템 파일들을 제외하면 여유 공간은 80MB가 채 안되는데 불구하고 journal log가 기록되는 /var 디렉토리가 루트 파티션에 있다. 그런데 journal log는 약 10~11초 간격으로 471bytes를 기록하다 보니 약 하루 반 정도면 80MB가 다 차 버리게 되는 것이다.
루트 파티션이 full이 되어 여유 공간이 없으면 위에서 말한 이상한 현상들이 발생하게 된다.
해결책은 일단 로그 파일을 다 지워 루트 파티션에 빈 공간을 만들어 주면 된다.

# cd /var/log/journal
# rm -r *

하지만 이렇게 해도 다시 시간이 지나면 또 동일한 현상이 발생하게 된다.

그래서 이 문제가 반복적으로 발생하는걸 방지하려면 로그 자체를 꺼 버리거나 로그파일의 최대 크기를 제한해 주는 방법이 있다.

# cat /etc/systemd/journald.conf
...
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
...
#MaxLevelWall=emerg

/etc/systemd/journald.conf 파일의 내용중 '#SystemMaxUse=' 부분에서  맨 앞의 '#'을 빼고 저널 로그의 최대 크기를 지정해주면 된다. 즉 'SystemMaxUse=20M'로 바꿔주면 저녈 로그로 최대 20MB만 사용하게 되므로 루트 파티션이 full이 되는걸 방지할 수 있다.

아니면 아예 저널 로그 기능을 꺼 버릴수도 있다.

# systemctl disable edison_config
rm '/etc/systemd/system/default.target.wants/edison_config.service'

로그 기능을 껐어도 지금까지 만들어 진 로그파일은 남아 있으므로 위에서처럼 /var/log/journal 디렉토리 내의 내용을 삭제해준다. (디렉토리 안의 내용은 삭제해도 /var/log/journal 디렉토리는 삭제하면 안된다)




댓글 없음:

댓글 쓰기