Gitsunmin

Gitsunmin

10년 된 노트북으로 비서를 고용하기 (1) — 서버 만들기

10년 된 노트북으로 비서를 고용하기 (1) — 서버 만들기

작성일: 2026. 8. 25. (수정일: 2026. 8. 25.) · 약 21분 읽기
# technology# ubuntu# homelab# llm

10년 된 노트북으로 비서를 고용하기

  1. 서버 만들기 — 오래된 노트북에 Ubuntu Server 올리기 ← 지금 글
  2. SSH 보안 설정과 Docker — SSH·방화벽 기본과 Docker
  3. Ollama와 n8n 올리기 — 로컬 모델과 자동화 도구
  4. 비서 고용 — 외부 접속 경로와 도구를 쓰는 봇

서론

대학교 재학 시절에 사용하던 HP 사의 노트북이 한 대 있었습니다. 개발 공부하면서부터는 맥북과 데스크탑만 사용하게 되면서 점차 사용하지 않게 된 노트북이었습니다. 가끔 동작하는지 켜보기만 했었는데, 어느덧 10년이 지나 버렸습니다.

그래도 당시에는 여러 게임도 할 수 있는 사양이었는데, 쉬고 있는 모습을 보아하니 조금 아깝다는 생각이 들었습니다. 그래서 “한 번 다시 부활시켜보자!”라는 생각으로 위 노트북을 들여다보기 시작했습니다.

우선 노트북의 사양은 아래와 같았습니다.

HP Pavilion Notebook (X9J93PA)

  CPU      Intel Core i7-6700HQ  (Skylake, 4코어 8스레드, 2.6GHz)
  RAM      8GB DDR4 2400MHz      (4GB + 4GB, 슬롯 2개 모두 사용 중)
  GPU      NVIDIA GeForce GTX 960M  (VRAM 2GB, Maxwell)
           Intel HD Graphics 530 (내장)
  SSD      Crucial MX300  275GB
  HDD      HGST  931GB
  NIC      Realtek 기가비트 유선 + Intel Wireless 7265

라즈베리파이로 RSS Bot을 만들어서 사용하던 저에게는 슈퍼컴퓨터였습니다.

이 정도 사양이라면 그래도 LLM을 설치해서 여러가지 실험도 해볼 수 있을 것 같고, 개인적인 업무들을 자동화하는 것도 가능할 것 같았습니다.

마침 LLM으로 해보고 싶은 것들이 쌓여 있던 참이었는데, 마음껏 굴려볼 자리가 생긴 셈이었습니다.

이 시리즈에서는 제가 오래된 노트북에 LLM을 설치하고 실행해보면서 최종적으로는 AI 비서가 만들어지는 과정을 다루었습니다.

본론

너무 오래 사용하기도 했고, 방치도 되었던 노트북이어서 그런지, 팬에 먼지가 쌓여 있어서 한 번 분해해서 먼지도 털고, 써멀 그리스도 새로 발라주었습니다. 오래된 기기로 작업하실 때에는 필요한 것 같습니다ㅎ

저는 가장 먼저 운영체제부터 바꾸어야겠다는 생각을 했습니다. 어찌되었든, 서버로서 사용될 노트북이었기 때문에, 편리한 UI를 제공받기 보다는 불필요한 요소는 제거되고, 필요한 것만 사용할 수 있으면 되겠다는 생각이 있었습니다.

위와 같은 생각으로 Linux 계열로 생각을 했었고, 비교적 많이 사용되기도 하고, 업데이트도 꾸준히 되고 있는 Ubuntu Server를 선택하게 되었습니다.

이야기가 길어서 네 편으로 나누었습니다. 이번 편은 운영체제를 올려 서버의 골조를 세우는 것까지입니다. 보안 설정과 Docker는 2편에서, Ollama와 n8n은 3편에서 다룹니다.

Ubuntu Server 설치

ISO 내려받기

오래된 노트북에 Ubuntu Server를 설치하기 위해 비어 있는 8GB 이상의 USB가 필요합니다. 그리고 Ubuntu Server Download에 접속하셔서 Download를 클릭하여 iso 파일을 다운로드 해주었습니다. 저는 아래와 같은 버전을 다운로드했습니다. (이후에도 계속 릴리스될 겁니다.)

Distributor ID: Ubuntu
Description:    Ubuntu 26.04 LTS
Release:        26.04
Codename:       resolute

설치 전에 짚고 넘어가기

8GB 이상의 USB가 필요한 이유

Ubuntu Server ISO는 3GB 안팎입니다(정확한 크기는 다운로드 페이지에 표시됩니다). 산술적으로는 4GB USB로도 되지만, USB에 적힌 용량과 실제 쓸 수 있는 용량은 다릅니다. 제조사는 1GB를 10억 바이트로 계산하고 운영체제는 2^30바이트로 세기 때문에, 4GB짜리의 실사용 용량은 3.7GB 남짓입니다. 게다가 ISO는 릴리스를 거듭할수록 커집니다. 지금 겨우 들어간다면 다음 버전에서는 안 들어갑니다. 그리고 이 작업은 USB의 기존 내용을 전부 지웁니다. 파일을 추가하는 게 아니라 디스크 전체를 덮어쓰는 방식이라 안에 있던 자료는 복구할 수 없으니, 비어 있는 USB를 쓰시거나 미리 다른 곳에 옮겨두셔야 합니다.

용어ISO 파일이란

이름의 유래. .iso라는 확장자는 국제표준화기구 **ISO(International Organization for Standardization)**가 1988년에 정한 ISO 9660, 즉 CD-ROM의 파일 시스템 표준에서 왔습니다. 그 표준대로 만들어진 디스크를 통째로 떠낸 파일이라 .iso가 붙었습니다. 요즘 배포되는 이미지는 대부분 DVD·블루레이용인 UDF나 리눅스용 확장(Rock Ridge, 긴 파일명과 권한 정보를 담기 위한 것)을 함께 쓰지만, 확장자는 관습으로 그대로 남았습니다.

ZIP과 무엇이 다른가. ZIP은 “파일 여러 개를 묶은 것”입니다. ISO는 “디스크 한 장을 처음 바이트부터 끝 바이트까지 그대로 베낀 것”입니다. 그래서 ISO 안에는 파일들만이 아니라 파티션이 어떻게 나뉘어 있는지, 전원이 켜진 직후 어느 위치를 읽어 부팅을 시작해야 하는지 같은 디스크의 구조 정보가 함께 들어 있습니다. 부팅 위치를 표시하는 규약에는 El Torito라는 이름까지 따로 붙어 있습니다. 이 구조까지 USB에 그대로 옮겨져야 컴퓨터가 그 USB를 부팅 가능한 디스크로 인식합니다.

어디에 쓰이나.

  • 운영체제 설치 — Ubuntu, Windows, macOS 복구 이미지 등 대부분의 설치 매체
  • 가상 머신 — VMware·VirtualBox·UTM에서 “가상 CD 드라이브에 넣는 디스크”가 곧 ISO 파일입니다. 구울 필요 없이 파일 그대로 지정합니다
  • 서버 원격 설치 — IPMI/iDRAC 같은 원격 관리 콘솔이 ISO를 원격으로 물려 무인 설치를 진행합니다
  • 보존·배포 — 게임 원본 디스크나 오래된 소프트웨어를 원형 그대로 남길 때
용어LTS란

Long Term Support, 장기 지원 버전을 뜻합니다. Ubuntu는 6개월마다 새 버전을 내놓고 그중 2년마다 한 번, 짝수 해 4월에 나오는 것이 LTS입니다. 버전 번호가 연도와 월을 그대로 쓰기 때문에 26.04는 2026년 4월 릴리스이고, 짝수 해 4월이므로 LTS입니다. 차이는 지원 기간입니다. 일반 릴리스는 9개월 뒤에 보안 업데이트가 끊기지만 LTS는 5년간 지원됩니다. 홈서버는 자주 갈아엎을 대상이 아니라 켜두고 잊어버릴 대상이라, 잊고 있어도 보안 패치가 계속 들어오는 쪽이 맞습니다.

설치 USB 만들기

노트북에 USB를 꽂아서 부팅 시 바로 USB에 저장되어 있는 iso 파일을 읽게 해서 Ubuntu Server를 설치해야 합니다. 하지만, 일반적으로 판매되는 USB는 부팅했을 때 바로 iso 파일을 실행할 수 없습니다. 부팅 시 바로 실행할 수 있도록 포맷을 진행합니다. 보통 무료 소프트웨어가 많으니 적절한 도구로 만들 수 있습니다. 저는 balenaEtcher로 포맷을 진행했습니다.

balenaEtcher 같은 도구가 필요한 이유

ISO 파일을 USB에 그냥 복사해 넣으면 부팅되지 않습니다. 그렇게 하면 USB 안에 .iso 파일 하나가 놓일 뿐, USB 자체가 부팅 디스크가 되는 것은 아니기 때문입니다. 컴퓨터가 전원이 켜진 직후 읽는 것은 파일 목록이 아니라 디스크의 맨 앞 영역에 적힌 부팅 정보인데, 파일을 복사하는 방식으로는 그 영역을 건드릴 수 없습니다. balenaEtcher는 파일 단위가 아니라 디스크 전체를 바이트 단위로 덮어쓰는 방식으로 동작합니다. ISO 안에 들어 있던 파티션 구조와 부팅 정보가 USB의 같은 위치에 그대로 복제되고, 그 결과 USB가 ISO와 동일한 디스크가 됩니다. 파일을 넣는 게 아니라, USB를 그 디스크로 만드는 것입니다.

balenaEtcher 사용 방법

  1. Download 받은 iso 파일을 balenaEtcher에 드래그하여 내려 놓습니다. 압축을 풀 필요 없이 .iso 파일을 그대로 올리면 됩니다. 드래그가 여의치 않다면 Flash from file 버튼으로 직접 선택해도 같습니다.
  2. Select target을 눌러 설치 USB로 만들 장치를 선택합니다. 이 단계가 유일하게 위험한 곳입니다. 잘못 고르면 그 디스크의 내용이 통째로 사라집니다. balenaEtcher는 시스템 디스크를 기본적으로 목록에서 숨기고 용량이 큰 드라이브에는 경고를 붙이지만, 외장 하드나 SD 카드를 함께 꽂아둔 상태라면 USB와 나란히 목록에 뜹니다. 장치 이름과 용량을 눈으로 확인하시고, 가능하면 다른 외장 장치는 미리 빼두시는 편이 안전합니다.
  3. Flash!를 누릅니다. 디스크에 직접 쓰는 작업이라 관리자 권한이 필요합니다. Windows에서는 UAC 창이, macOS에서는 비밀번호 입력창이 뜹니다.
  4. 쓰기가 끝나면 balenaEtcher가 이어서 검증(Validating)을 진행합니다. 기록된 내용이 원본 ISO와 일치하는지 다시 읽어 확인하는 단계입니다. 이 과정을 건너뛸 수도 있지만, 여기서 걸러지지 않은 오류는 나중에 설치 도중 알 수 없는 에러로 나타납니다. 그냥 기다리시는 편이 낫습니다. USB 속도에 따라 다르지만 전체 과정은 보통 5~10분 안에 끝납니다.
  5. 완료되면 Flash Complete!가 표시됩니다. 이제 USB를 뽑아 노트북에 꽂으면 됩니다.

그런데 4~5번 사이에 이런 경고창이 뜹니다.

주의"이 컴퓨터에서 읽을 수 없는 디스크입니다" — 정상입니다
이 컴퓨터에서 읽을 수 없는 디스크입니다.
[ 초기화... ]  [ 무시 ]  [ 추출 ]

놀라서 “초기화”를 누르면 방금 만든 설치 USB가 그대로 날아갑니다.

이 경고가 뜨는 이유는 USB가 이제 Linux용 파티션 구조를 갖게 되었기 때문입니다. Windows나 macOS는 이 형식을 읽지 못하니 고장 난 디스크로 판단하고 초기화를 제안합니다. 하지만 이 USB를 읽어야 할 대상은 지금 쓰고 있는 컴퓨터가 아니라 부팅하려는 그 노트북입니다. “무시”를 누르고 USB를 뽑으시면 됩니다.

USB로 부팅하기 — 이번 한 번만 순서를 바꾸기

.iso 파일을 넣어 완성된 Ubuntu Server 설치 USB를 이제 노트북에 꽂아서 운영체제 설치를 할 수 있게 되었습니다.

일반적으로 PC는 전원이 켜지면, 펌웨어(UEFI)가 먼저 실행되어 정해진 저장장치를 훑으며 부팅을 합니다. 하지만, 기존에는 SSD가 USB보다 먼저 찾아지는 상태로 되어 있었기 때문에, 아무리 USB를 꽂고 전원을 켜도 Ubuntu Server가 설치되지 않습니다.

노트북 제조사별로 조금씩 차이가 있지만, 제가 사용한 HP 노트북은 F9키를 눌러서 Boot Device Options(Boot Menu)에 진입할 수 있었습니다. 노트북을 켜고 F9키를 광클하면 됩니다(1초에 2~3번 이상)

제조사마다 키가 다르니(F12, F2, Del을 쓰는 경우도 많습니다) 화면 하단에 잠깐 스쳐 지나가는 안내를 보시면 됩니다.

부팅 메뉴에 진입했다면 목록에서 USB Hard Drive 항목을 고르면 됩니다. 이렇게 하면 이번 부팅만 USB로 시작하고, 부팅 순서 자체는 건드리지 않습니다. 설치가 끝나면 USB는 뽑을 것이므로 순서를 영구히 바꿀 이유가 없습니다.

USB로 부팅되면 검은 화면에 메뉴가 뜹니다. Try or Install Ubuntu Server를 고르면 설치 마법사가 시작됩니다.

설치 마법사 — 순서대로 무엇을 골랐나

Ubuntu Server 설치 마법사는 아래 순서로 진행됩니다. 제가 고른 값을 함께 적었습니다.

#단계제가 고른 값
1LanguageEnglish
2Keyboard configurationEnglish (US)
3Choose type of installUbuntu Server
4Network connections유선 DHCP 자동 할당 그대로
5Proxy address비워둠
6Mirror address기본값(국내 미러 자동 선택)
7Guided storage configurationSSD를 시스템 디스크로 직접 지정 + LVM
8Storage configuration 확인Confirm destructive action
9Profile setup이름 / 호스트명 home-server / 계정 / 비밀번호
10Upgrade to Ubuntu ProSkip for now
11SSH configurationInstall OpenSSH server 체크
12Featured server snaps아무것도 선택 안 함

판단이 필요했던 항목만 따로 적습니다.

3. 설치 유형Ubuntu ServerUbuntu Server (minimized) 중에 고릅니다. minimized는 사람이 직접 로그인해 쓰는 것을 전제하지 않아 편집기·문서·진단 도구가 빠져 있습니다. 클라우드에서 이미지를 대량으로 찍어낼 때 쓰는 쪽에 가깝습니다. 저는 직접 붙어서 이것저것 만져볼 서버라 일반 Ubuntu Server를 골랐습니다.

4. 네트워크 — 이 단계에서 인터넷이 되어야 설치 중 패키지를 받아옵니다. 유선을 꽂아두면 DHCP로 알아서 잡힙니다. 무선만 있다면 여기서 SSID와 비밀번호를 넣을 수 있지만, 서버로 쓸 기기라면 유선을 권합니다. 여기 보이는 IP는 공유기가 임시로 빌려준 주소입니다. 이 주소가 나중에 바뀐다는 점이 4편에서 문제가 됩니다.

5~6. 프록시 / 미러 — 프록시는 비워둡니다. 미러는 기본값이면 충분하고, Checking mirror가 오래 걸린다면 대개 네트워크 문제입니다.

7. 디스크 구성 — 유일하게 손이 멈춘 곳입니다. 기본 제안을 그대로 두면 안 되는 이유가 있어 다음 절에서 따로 다룹니다.

9. 프로필 설정 — 이름, 호스트명, 사용자 계정, 비밀번호를 정합니다. Ubuntu Server는 root 직접 로그인이 처음부터 막혀 있고, 여기서 만든 계정이 sudo 권한을 갖습니다. 호스트명은 home-server로 지었습니다. 비서 하나만 올릴 서버가 아니라 앞으로 이것저것 올려볼 자리라고 생각해서, 용도를 좁히는 이름 대신 있는 위치를 그대로 적었습니다. 이 이름은 뒤 편에서 SSH 별명과 키 파일 이름으로 계속 따라옵니다.

주의계정 이름과 비밀번호는 공개하지 마세요

블로그나 스크린샷으로 설치 과정을 남길 때 사용자 계정명, 비밀번호, 내부 IP, 디스크 UUID는 가리는 편이 좋습니다. 계정명은 그 자체로 비밀은 아니지만, 뒤에서 SSH를 열게 되면 공격자가 시도해볼 아이디 하나를 공짜로 주는 셈입니다. 이 글의 설정 예시에서도 실제 값 대신 자리표시자를 썼습니다.

여기서 정한 비밀번호는 어차피 임시입니다. 2편에서 SSH 키 인증으로 바꾸고 비밀번호 로그인 자체를 막습니다.

10. Ubuntu Pro — 건너뜁니다. 무료로 쓸 수 있는 확장 보안 지원이지만, LTS의 5년 지원 안에서는 아쉬울 일이 없습니다.

11. OpenSSH server반드시 체크합니다. 모니터와 키보드를 계속 붙여둘 게 아니라면, 설치 후 접근할 수 있는 유일한 통로입니다. 이 화면에서 GitHub 공개키를 바로 가져오는 옵션도 있지만, 저는 2편에서 직접 등록했습니다.

12. Featured snaps — 아무것도 고르지 않았습니다. 나중에 필요할 때 받으면 되고, Docker는 특히 이 목록에서 고르면 안 됩니다. 이유는 2편의 Docker 설치 부분에서 다룹니다.

선택이 끝나면 설치가 진행됩니다. 끝나면 Reboot Now가 뜨는데, 여기서 USB를 뽑아야 합니다. 꽂아둔 채로 재부팅하면 설치 마법사가 다시 시작됩니다. 뽑으라는 안내가 뜬 뒤에도 Enter를 한 번 더 눌러야 넘어가는 경우가 있습니다.

디스크 — 기본값이 엉뚱한 디스크를 골랐다

설치 과정 자체는 순조로웠습니다. 딱 한 군데, 디스크 구성에서 손이 멈췄습니다.

이 노트북에는 SSD 275GB와 HDD 931GB가 함께 들어 있습니다. 아래 이미지는 설치 중 디스크 설정 화면을 찍은 것입니다.

기본 제안 — HDD 위에 볼륨 그룹이 잡히고 SSD는 통째로 비어 있다기본 제안 — HDD 위에 볼륨 그룹이 잡히고 SSD는 통째로 비어 있다

두 가지가 눈에 걸렸습니다.

첫째, 시스템이 HDD로 갈 뻔했습니다. 볼륨 그룹 ubuntu-vgHDD(931GB) 위에 만들어져 있고, 정작 SSD는 손도 대지 않은 free space로 남아 있습니다. 용량이 큰 디스크를 우선하는 것이 마법사의 기본 동작입니다. 이대로 두면 OS와 Docker 이미지, 컨테이너 레이어가 전부 느린 HDD에 올라갑니다. 컨테이너를 띄우고 내리는 작업은 작은 파일을 많이 읽고 쓰기 때문에 체감 차이가 큽니다.

둘째, 볼륨 그룹은 928GB인데 루트는 100GB뿐입니다. 나머지 828GB는 free space로 남습니다. 이것이 LVM 구성의 대표적인 함정입니다. 모르고 넘어가면 나중에 디스크가 꽉 찼을 때 “분명 931GB인데” 하면서 한참을 헤매게 됩니다.

용어LVM이란?

Logical Volume Manager, 논리 볼륨 관리자입니다. 디스크와 파일시스템 사이에 한 겹을 더 두어, 저장 공간을 디스크 위의 자리가 아니라 용량으로 다루는 방식입니다. 전통적인 파티션은 시작 위치와 크기가 물리적으로 못 박혀 있어서 바로 뒤에 빈 공간이 붙어 있지 않으면 늘릴 수 없지만, LVM은 남은 공간이 어디에 흩어져 있든 서버를 켜둔 채로 붙일 수 있습니다.

그 한 겹은 세 층으로 나뉩니다.

  • PV(물리 볼륨) — 실제 파티션. 위 화면의 partition 3
  • VG(볼륨 그룹) — PV를 모아 만든 용량 창고. 화면의 ubuntu-vg
  • LV(논리 볼륨) — 창고에서 떼어낸 사용 공간. 화면의 ubuntu-lv이고, 여기에 파일시스템이 올라가 /로 마운트됩니다

마법사는 VG는 928GB로 잡아두고 LV는 100GB만 떼어 줍니다. 남은 공간은 나중에 lvextend(LV를 늘리는 명령)와 resize2fs(늘어난 만큼 파일시스템을 넓히는 명령)로 켜둔 채 붙일 수 있습니다. 줄이는 쪽은 훨씬 번거롭습니다.

/boot/boot/efi만 LVM 바깥의 일반 파티션으로 잡혀 있는 것은, 전원이 켜진 직후의 부트로더가 아직 LVM을 읽을 줄 모르기 때문입니다.

그래서 시스템 디스크를 SSD로 직접 바꿨습니다. 결과는 이렇습니다.

수정 후 — SSD에 ESP·/boot·PV가 잡히고 HDD는 건드리지 않은 상태수정 후 — SSD에 ESP·/boot·PV가 잡히고 HDD는 건드리지 않은 상태

두 사진에서 회색으로 가린 부분은 디스크 시리얼 번호입니다.

  • SSD: /boot/efi 1.049G(fat32) + /boot 2G(ext4) + PV 253.121G
  • 볼륨 그룹 ubuntu-vg 253.117G
  • HDD는 이 단계에서 손대지 않았습니다. 기존 NTFS 파티션이 마운트되지 않은 채 그대로 남아 있습니다

사진을 찍은 시점에는 아직 루트 논리 볼륨이 100G, 남은 153G가 free space인 상태입니다. 여기서 논리 볼륨 크기를 볼륨 그룹 전체로 다시 지정하고 설치를 진행했습니다. 나중에 lvextend로 늘려도 되지만, 서버를 다 세워둔 뒤에 파일시스템을 확장하는 것보다 지금 몇 분 더 들이는 쪽이 낫다고 판단했습니다.

설치를 마친 서버에서 확인한 결과입니다.

$ lsblk
NAME                      SIZE TYPE MOUNTPOINTS
sda                     256.2G disk
├─sda1                      1G part /boot/efi
├─sda2                      2G part /boot
└─sda3                  253.1G part
  └─ubuntu--vg-ubuntu--lv 253.1G lvm  /

$ sudo vgs
  VG        #PV #LV VSize    VFree
  ubuntu-vg   1   1 <253.12g    0

VFree가 0입니다. 볼륨 그룹에 남은 공간 없이 전부 루트로 들어갔다는 뜻입니다.

설치를 마치고 — 서버스럽게 만들기

운영체제는 올라갔지만, 아직 서버라고 하기엔 이릅니다. 남은 디스크를 붙이고, 덮개를 닫아도 꺼지지 않게 만들어야 합니다.

HDD를 /data로 붙이기

HDD는 설치 마법사에서 건드리지 않고, 부팅을 마친 뒤 직접 포맷해 붙였습니다. 파티션을 따로 나누지 않고 디스크 전체를 하나의 ext4로 만들었습니다. 용도가 하나뿐이라면 파티션 테이블을 둘 이유가 크지 않습니다.

/data는 로그와 장기 보관 데이터처럼 속도는 필요 없고 용량만 필요한 것을 몰아둘 자리입니다. 비서가 돌기 시작하면 실행 기록과 대화 이력이 쌓일 텐데, 자주 읽히지 않으면서 계속 늘어나기만 하는 종류의 데이터입니다.

붙이기 전에 짚고 넘어가기

용어포맷이란

디스크에 파일시스템을 새로 까는 일입니다. 파일시스템은 “어느 위치에 어떤 파일이 몇 바이트로 들어 있는지”를 적어두는 장부인데, 포맷은 그 장부를 빈 장부로 갈아 끼웁니다. 아래에서 쓸 mkfs.ext4가 그 명령이고, mkfsmake filesystem, ext4는 리눅스의 표준 파일시스템입니다.

여기서 중요한 것은 데이터를 지우는 작업이 아니라는 점입니다. 장부만 새로 쓰기 때문에 실제 내용은 디스크에 한동안 그대로 남아 있습니다. 다만 그것을 찾아갈 목차가 사라져서 운영체제 입장에서는 빈 디스크가 됩니다. 그래서 포맷은 빠르고, 복구 도구로 일부를 되살릴 수는 있지만, 정상적인 방법으로는 되돌릴 수 없습니다.

파일시스템은 운영체제마다 다릅니다. Windows는 NTFS, macOS는 APFS를 씁니다. 이 HDD에 NTFS가 남아 있던 것도 예전에 Windows가 깔려 있었기 때문이고, 리눅스에서 계속 쓸 디스크라 ext4로 다시 만들었습니다.

용어마운트(mount)란

디스크를 디렉터리 경로에 연결하는 일입니다. Windows는 디스크마다 C:, D: 같은 문자를 붙이지만, 리눅스에는 드라이브 문자가 없습니다. 모든 것이 / 하나에서 뻗어나가는 단일 트리이고, 새 디스크는 그 트리의 특정 폴더 자리에 끼워 넣어 씁니다.

sudo mount /dev/sdb /data는 “이제부터 /data 아래를 열면 그 디스크가 보이게 하라”는 뜻입니다. 마운트하기 전의 /data는 그냥 빈 폴더이고, 마운트한 뒤에 그 안에 파일을 쓰면 SSD가 아니라 HDD에 기록됩니다. 경로는 그대로인데 그 아래를 담당하는 장치만 바뀌는 것입니다.

마운트는 재부팅하면 풀립니다. 명령으로 붙인 연결은 메모리에만 있는 상태라, 다음 부팅 때 /data는 다시 빈 폴더가 됩니다. 그래서 /etc/fstab에 적어둡니다. 이 파일은 부팅할 때마다 읽히는 마운트 목록이고, 여기에 한 줄 적어두면 매번 자동으로 붙습니다.

용어UUID란

Universally Unique IDentifier, 디스크에 붙는 고유 식별자입니다. mkfs로 파일시스템을 만들 때 함께 발급되어 그 디스크 안에 기록되고, blkid 명령으로 확인할 수 있습니다.

/dev/sdb 같은 장치 이름을 두고 굳이 UUID를 쓰는 이유가 있습니다. 장치 이름은 그 디스크의 이름이 아니라 부팅할 때 인식된 순서이기 때문입니다. sda, sdb는 커널이 먼저 찾은 순서대로 붙는 임시 번호표라, USB를 하나 꽂아두거나 케이블을 다른 포트에 옮기면 순서가 뒤바뀔 수 있습니다.

/etc/fstab/dev/sdb라고 적어두었는데 다음 부팅에서 그 이름이 다른 디스크에 붙으면, 엉뚱한 디스크가 /data로 마운트되거나 마운트가 실패해 서버가 응급 모드로 떨어집니다. UUID는 디스크 안에 적혀 있어 순서와 무관하게 따라다니므로, fstab에는 항상 UUID로 적는 것이 안전합니다.

주의포맷은 되돌릴 수 없습니다

아래 작업은 대상 디스크의 내용을 전부 지웁니다. 이 HDD에는 예전 Windows 시절의 NTFS 파티션이 남아 있었고, 남길 자료가 없다는 것을 확인한 뒤에 진행했습니다.

lsblk장치 이름과 용량을 반드시 눈으로 확인하세요. /dev/sda/dev/sdb는 한 글자 차이지만, 잘못 고르면 방금 설치한 시스템이 통째로 날아갑니다.

lsblk                      # 대상 디스크 확인 (용량으로 구분)
sudo mkfs.ext4 /dev/sdb    # 디스크 전체를 ext4로
sudo mkdir -p /data
sudo blkid /dev/sdb        # UUID 확인

마운트는 /etc/fstab에 등록해두어야 재부팅 후에도 유지됩니다. 장치 이름(/dev/sdb)이 아니라 UUID로 적어야 디스크 순서가 바뀌어도 안전합니다.

UUID=<blkid로 확인한 UUID>  /data  ext4  defaults  0  2
sudo mount -a              # 재부팅 전에 fstab이 맞는지 확인

mount -a가 오류 없이 끝나야 합니다. 여기서 오타를 넘기면 다음 재부팅 때 서버가 응급 모드로 떨어져 화면 앞에 다시 앉아야 합니다.

$ df -h /dev/sdb
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        916G  2.1M  870G   1% /data

파티션을 나누지 않았으므로 장치 이름이 /dev/sdb1이 아니라 /dev/sdb 그대로입니다.

다만 모든 것을 /data로 보내지는 않았습니다. HDD는 SSD보다 읽기가 느려서, 읽는 속도가 곧 체감으로 이어지는 것은 SSD에 두는 편이 낫습니다. 뒤 편에서 올릴 언어 모델의 가중치 파일이 그렇습니다. 한 번 읽고 마는 것이 아니라 응답할 때마다 읽는 파일이라, 이쪽은 /data가 아니라 SSD에 두었습니다.

덮개를 닫아도 안 꺼지게 만들기

노트북을 서버로 쓸 때 가장 먼저 만나는 문제입니다. 덮개를 닫으면 절전 모드로 들어가면서 SSH 연결이 끊깁니다. /etc/systemd/logind.conf를 수정합니다.

# /etc/systemd/logind.conf
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

HandleLidSwitch 하나만 바꾸면 전원이 연결된 상태에서 여전히 절전으로 들어가는 경우가 있어 세 항목을 함께 ignore로 두었습니다. 적용은 아래 명령으로 합니다.

sudo systemctl restart systemd-logind

이 명령은 현재 로그인 세션에 영향을 줄 수 있어, SSH로 접속 중이라면 재접속이 필요할 수 있습니다.

이제 노트북은 덮개를 닫아도 깨어 있습니다. 지금은 피아노 밑 거치대에 덮개를 닫은 채 세로로 세워져 있습니다. 노트북이라기보다 작은 본체에 가까운 모습입니다.


결론

사용하지 않고 있던 10년 된 노트북을 Windows 운영체제에서 Ubuntu Server 운영체제로 변경해보았습니다. 사실 블로그나 여러 자료들도 많고, 설치 도구도 다 있어서 비교적 쉬운 작업이었다고 생각합니다.

하나, 디스크를 어떻게 구성해야 할지 고민하면서 작업을 했어서 어렵게 느껴진 부분은 있었습니다. 마법사의 기본 제안이 용량 큰 HDD를 시스템 디스크로 잡아버려서, 확인 화면에서 한 번 멈춰 서야 했습니다. 그대로 넘겼다면 OS가 느린 디스크 위에서 돌 뻔했습니다. 막상 적용하고 여러 작업을 할 생각을 하니, 뿌듯하기도 하고 기대도 됩니다.

처음 해보는 작업이기도 했고, 해보고 싶었던 것들이어서 열심히 AI랑 인터넷 찾아가면서 해봤습니다. 계속 수정하면서 비서 교육 잘 시켜보려고 합니다.