서버 운영체제 전환과 발열 문제 해결기

디스코드 봇 서비스를 종료하고, 데스크탑 컴퓨터도 맞추게 되면서, 서버로 사용하던 요가탭 노트북에서 HP Victus 16 노트북으로 변경했다.


데스크탑 대용으로 사용했던 노트북이라 성능도 좋고, 그래픽카드로 간단한 딥러닝 공부도 할 수 있을 것 같고, NAS로도 사용 가능하고, 무엇보다 들고 다니기엔 너무 무거워서 서버용 노트북을 바꾸게 되었다.

사양:

  • CPU: Ryzen 7 5800H
  • GPU: RTX 3050ti
  • RAM: 40GB
  • SSD: 2TB

노트북 발열 문제

그런데 노트북을 사용하면서 우분투를 설치해서 사용하다보니 발열 문제가 발생했다.
빅터스 노트북은 드라이버 지원이 윈도우에서만 가능한 부분이 있어서 CPU, 그래픽카드와 같은 기본적인 드라이버만 설치해서 사용했지만, 온도센서나 팬 제어가 불가능하고 팬도 기본 속도로만 돌아가고, 배터리 충전 제한 옵션을 설정할 수가 없어서 수명이 걱정되었다.


간단한 웹서버용으로 사용하는건 괜찮았지만 가상화를 돌리거나 VSCode 서버를 띄우면서 개발을 하다보면 노트북이 발열을 하면서 성능이 떨어지고 CPU 온도가 100도로 유지되는 문제가 발생했다.


윈도우에서는 OMEN Gaming Hub 라는 프로그램과 각종 서드파티 프로그램을 사용해서 팬 속도를 조절하거나 성능 모드를 변경할 수 있었지만 우분투에서는 그런 프로그램이 없었고, lm-sensors로도 팬을 인식하고 제어할 수 없었다.

해결 방법 탐색

이것저것 시도해보다가 깃허브에 codifryed/coolercontrol 라는 프로젝트가 있어서 설치하고 사용해보니 온도 모니터링까지는 가능했지만 팬 제어는 안됐다.

그래서 미니PC나 워크스테이션을 구매할까 하면서 알아봤다.
워크스테이션은 과거에 Z800 워크스테이션을 사용했었는데, 구형 워크스테이션에 오래된 아키텍쳐의 CPU라 24시간 돌리기엔 성능대비 전력소모가 너무 크고 소음도 좀 있던 기억이 있어서 제외했다.


내 워크스테이션은 인텔 제온 X5690 CPU가 2개 달렸었지만 라이젠 5 5600g와 비교해서 성능도 20% 정도 떨어지고 전력소모는 4배 정도 높았다. 메모리도 용량은 아주 넉넉하게 사용이 가능했지만 DDR3라 속도가 느렸던 기억이 있다.
적당한 성능에 간단하게 사용할 수 있는 5600g의 베어본 PC를 맞추거나 5600u 정도가 달린 직구 미니 PC를 구매하려 했었는데, 가격이 비싸서 고민하다가 Giacomix02/fanControl라는 프로젝트를 알게 되었다.

이 프로젝트는 HP 빅터스 노트북의 팬을 제어할 수 있는 프로젝트라고 써져있었다.
이 프로젝트에 관심을 가지게 된 이유는 이슈탭에 리눅스 호환성에 대한 질문이 있었는데, 답변에 이렇게 써있었다.
빌드는 윈도우 전용이지만 리눅스에서 코드를 다운로드해서 직접 컴파일할 수 있을 것 같다. 한번 시도해본 뒤 혹시 되면 말해달라고 한다.


질문을 올린 질문자는 답변이 없었지만, 내가 한번 시도해보기로 했다.

프로젝트가 Rust로 작성되어 있어서 cargo로 빌드하기 쉬울 것 같아, 한번 빌드해보기로 했다.
빌드에 필요한 의존 패키지들을 에러를 봐가면서 설치하고
자잘한 오류와 빌드 오류를 해결하고 나니 빌드에 성공할 수 있었다.

빌드에 성공하고 실행해보니 Connection refused 에러가 떠서 제작자에게 중간 보고를 했다.
다음날, 제작자가 답변을 해주었는데, 이 프로그램은 powershell을 통해 통신해서 그럴 수 있다고 하고, powershell로 실행하는 부분이 어디있는지 알려주었다. 그래서 코드를 열어 bash 쉘도 호환 가능하게 변경해서 빌드를 해보니 수월하게 되었다.


이제 UI는 떴지만 테스트해보니 팬을 제어할 수 없었다. 그래서 코드를 완전히 살펴보니 이 프로젝트는 그냥 OmenHwCtl를 포크하고 GUI를 추가해서 OmenHwCtl의 파워쉘 스크립트를 실행하는 프로젝트였다.


OmenHwCtl 프로젝트의 코드도 살펴봤지만 이 프로젝트는 윈도우의 WMI를 사용해서 팬과 조명 등을 제어하는 프로그램이었다.

운영체제 변경

리눅스에서도 WMI와 비슷한 기능을 제공하는 것이 있어서 이를 사용해서 팬을 제어할 수 있을 것 같았지만, 이미 이 프로젝트를 발견하기 전에 웬만한 방법을 다 해봤지만 인식이 안됐어서 드라이버단의 문제인 것 같았다.


리눅스에선 HP에서 제공하는 리눅스 드라이버가 없어서 인식조차 안되는 것 같았다.

윈도우 드라이버를 리눅스로 포팅해서 사용할 수 있을 것 같았지만, 그건 너무 피곤한 일이었다. 그래서 그냥 리눅스를 통으로 이미지로 만들고 윈도우에서 WSL에서 돌리면 드라이버 지원과 리눅스의 편의성과 성능을 모두 챙길 수 있을 것 같았다.


이미지를 통으로 만들면 WSL에서 온갖 오류가 발생할 것 같아서 필요한 부분만 모아서 명령어 한줄로 복사할 수 있게 디렉토리 구조를 그대로 유지하면서 압축해서 옮기고, 아파치 설정파일과 가상 호스트 파일, mysql 폴더는 통째로 옮기고, 다른 나머지 개인 파일들도 옮겼다.

윈도우로 밀어버린 뒤 WSL, 포트포워딩 설정을 하고 예전에 만들어둔 자체 DDNS 스크립트를 실행해서 도메인을 연결했다. 네트워크는 Hyper-V의 가상 스위치를 사용하여 브릿지로 아이피를 할당해서 연결하고, WSL에는 netplan의 설정이 없어서 ip 명령어를 활용한 고정 아이피 설정 스크립트를 만들었다.

그리고 필요한 패키지들을 설치하고, 아파치 설정파일과 가상 호스트 파일을 디렉토리 구조 그대로 넣으니 따로 설정할 것이 없었다.
certbot을 사용해서 SSL 인증서를 발급받고, mysql 폴더를 통으로 옮기고 파일시스템 권한 설정만 해주니 데이터베이스와 계정도 그대로 사용할 수 있었다.

혹시나 중단되는 상황을 대비해 전원설정, Wake on lan, 원격은 NoMachine과 Parsec을 사용해서 접속할 수 있게 설정했다.

결론

이제 데스크탑을 사용하면서 게이밍 노트북은 서버로 사용하고 노트북의 발열 문제도 해결하고, 내 요가탭 노트북도 이동용으로 사용할 수 있게 되었다.