리눅스 시스템을 좀 운용해보니..

1년 넘게 상시 켜놓는 리눅스 시스템을 10대 넘게 사용해보고 있는데, 이것도 나름 관리를 필요로 하는지 생각지도 않게 별 별 경우를 다 맞이하게 된다.

대충 열거해보면,

CPU core voltage issue

모두 같은 사양의 시스템을 주문했는데, 특정 머신의 경우만 다양한 방법으로 crash가 발생했다. 업체에 수리도 맡겨보고 별 짓을 다 해봤는데, 결국 업체의 응답은 ‘윈도우즈에서 여러 날 테스해봤더니 문제가 없다. 너희가 사용하는 linux는 내가 모른다.’였다.

구글링을 통해서 확인해본 바로는 윈도우즈에서는 리눅스에 비해서 CPU를 덜 하드하게 굴린단다. 그래서 뽑기 운이 좀 없는 CPU에 대해서는 일부러 core voltage를 올려줘야 한다기에 그렇게 했더니 모든 문제가 일거에 해결되었다. 그런데 막상 운용해보면 thermal throttling이 생기는 것인지 이 머신에서의 성능이 유난히 떨어진다. 같은 일을 동시에 벌려놓으면 유독 이 머신에서만 눈에 띄게 오래 걸리고 있으니까. 동일한 종류의 쿨러가 설치되어있는데도 core voltage를 아주 살짝 (0.1v) 올렸다고 성능이 이렇게 낮게 나올 수 있다는 것은 신기한 일이다.

System reboot due to unknown reaons

모든 머신에 같은 분량의 일을 끊임없이 시켜놓으면 유달리 특정 머신만 리부팅을 하고 있는 것을 알 수 있었다. 시스템 로그를 전부 다 훑어봐도 crash log고 남지 않고 곧바로 리부트가 일어났기에 아무래도 커널에 버그가 있는 것인가 싶어 확인해 보니 해당 머신의 리눅스 커널만 다른 머신들 대비 약간 다른 버전이었다. 시험삼아 최신 커널로 업데이트 해봤는데 갑자기 모든 문제가 사라졌다.

이외에도 다양한 문제들이 있었다. 열거할 수 없지만. 이런 일들이 자주 발생하게 되면 결국 관리하는 모든 머신들에 동시에 괸리 작업을 할 수 있는 스크립트를 만들어쓰게 되고 또 crontab을 자주 활용하게 된다.

대개 관리용 스크립트는 다음과 같다. 1) 관리용 스크립트를 한꺼번에 업데이트하는 스크립트: git을 쓰고 cron으로 주기적으로 update시키는 것이 유리하다. 2) 소프트웨어를 주기적으로 업데이트 하는 스크립트: interactive한 경우가 생길 수 있어서 모두 강제 yes를 하도록 하는 것이 편리하다. 3) 시스템 상태 (CPU 온도/가용 SSD/중요 daemon들 check/시스템 부하/접속한 사용자)를 체크하고 문제가 되는 경우가 발견되면 이메일로 보고, 경우에 따라 자동으로 보수하는 스크립트

cron으로 관리되는 내용은 다음과 같다. 1) 시스템이 부팅하자마자 어떤 ip address를 할당받아 사용하고 있는지 보고하도록 함 2) 시스템 상태 체크/자동 보수

우려스러운 점은 이런 것들이 사실상 case-by-case로 해결된 해결책/팁들의 모음이 되는데, 어차피 사람이 바뀌고 시간이 흐르면 자연스럽게 잊혀지는 것들이라 역시나 어딘가에 잘 기록해두어야 한다는 것이다.