0. 짚고 가기 — USB 설치기부터 이 화면까지, 하나의 사슬
1부에서 "왜 Proxmox인가"는 골랐고, 3부에서 USB로 깔아 데스크탑 브라우저로 로그인까지 했다. 설정에 손대기 전에 한 번 짚고 간다 — 그 USB 설치기가 디스크에 뭘 심었길래, 지금 이 화면이 뜨고, 이 화면으로 이걸 할 수 있나. 이 사슬이 잡히면 앞으로의 모든 설정이 "뭘 건드리는 일"인지가 선다.
① USB 설치기가 외장 SSD에 심은 것 — 세 덩어리
2부에서 USB는 "Proxmox 완성 디스크의 사진(ISO)을 DD로 통째 구운 것"이었다. 그 USB로 부팅해 Install을 누르자, 설치기가 외장 SSD에 세 덩어리를 심었다.
- 부팅 안내판(부트로더 GRUB) — 전원을 켜면 "이 SSD에서 뭘 어떻게 시작하라"를 아는 표지판. 3부에서 F12 목록의
ASMT 2115가 부팅 가능한 항목으로 바뀐 게 이것 때문. - Debian 리눅스 + Proxmox 소프트웨어 — 바닥 OS(데비안)와 그 위에 얹힌 가상화 도구 일체. 대시보드에서
local이 4.4% 찬 게 이 시스템 파일. - 빈 창고 둘 —
local(ISO·백업 같은 파일용)과local-lvm(VM 디스크용 LVM-thin 풀). 아직 비어 0.0%.
즉 설치란 "이 SSD를 켜면 Proxmox가 저절로 뜨도록, 필요한 걸 다 깔고 창고까지 파둔 것"이다.
② 그래서 지금 뭐가 돌길래 이 화면이 뜨나
SSD로 부팅하니 심어둔 것들이 서비스로 살아 움직인다. 그중 하나가 :8006 포트로 관리 페이지를 뿌리는 웹 서버다.
3부에서 노트북 콘솔이 "웹 브라우저로 접속하라"고 한 게 이거고, 데스크탑은 2·3부에서 만든 같은 골목 주민이라 192.168.0.200:8006으로 그 페이지를 받아본다. 며칠 걸려 골목을 만든 이유가 여기서 결실 맺는다 — 이 UI는 정적 파일이 아니라, 노트북 안에서 24시간 도는 웹 서비스의 얼굴이다.
③ 이 화면으로 되는 일은, 그 밑에 뭘 같이 심어놔서인가
버튼 하나하나가 먹히는 건, 설치기가 그 아래 실물 도구를 함께 심어놨기 때문이다. 버튼 = 도구의 손잡이.
| 화면에서 보이는 것 | 그 뒤에 심긴 실물 | 그래서 되는 일 |
|---|---|---|
| Shell | Debian 리눅스 본체 | 리눅스 명령·apt (시스템 설정) |
| Create VM | KVM + QEMU (가상화 엔진) | 진짜 VM을 만들어 굴림 |
| VM 콘솔 | noVNC | 모니터 없이 VM 화면 보기 |
| local / local-lvm | 파일 저장소 + LVM-thin 풀 | ISO 올리고 VM 디스크 자름 |
| Summary·Network·Time | 리눅스 시스템 설정 | 상태 확인·설정 변경 |
한 줄로 꿰면 — USB(Proxmox 사진) → 설치기가 SSD에 부트로더+데비안+가상화엔진+빈창고를 심음 → SSD 부팅하니 서비스로 돎 → 웹 서버가 :8006으로 화면을 뿌림 → 같은 골목 데스크탑이 열어봄 → 버튼들은 밑에 심긴 실물 도구의 손잡이라 그걸로 서버·VM을 다룬다.
그래서 이번 편에서 내가 만지는 건 두 종류다.
- 리눅스 시스템 자체 — 리포·절전·시간 같은 서버 살림. 이 편이 전부 여기다.
- 가상화 엔진 — VM을 만들어 k3s 노드로. 다음 편.
둘 다 이 웹UI(와 그 안의 Shell)를 통해, 데스크탑에서 원격으로 한다.
1. 왜 "설치 직후 설정"이 따로 필요한가
3부에서 Proxmox가 떴고 데스크탑에서 웹UI에 로그인까지 됐다. 그런데 이대로는 서버로 24시간 돌리기엔 위험한 상태다. 이유가 셋 있다.
- 노트북이라서: 기본값이 "뚜껑 닫으면 잠자기". 서버로 쓰려면 뚜껑 닫아도 안 자게 만들어야 한다.
- 외장 USB SSD라서: 리눅스가 유휴 USB를 절전시키면 루트 디스크가 끊겨 서버가 통째로 죽는다. 이걸 막아야 한다.
- 무료판이라서: 업데이트를 받을 리포가 유료 구독용으로 기본 설정돼 있어, 지금은
apt update부터 막힌다(3부 마지막의 그 빨간 에러).
그래서 이 편은 "서버답게 길들이는" 작업이다. 순서는 편의·안정 먼저(A), 그다음 우리 프로젝트 목적을 위한 준비(B)로 간다.
목적은 서버의 편의성·안정성 — 먼저 기반을 다진다
1. 리포지터리 전환 — 무료판이 업데이트를 받게
작업은 전부 pve 노드 → Shell(브라우저 안 터미널)에서 한다. 리눅스 시스템을 직접 손보는 일이라 여기가 맞다.
(리포 = "이 서버가 소프트웨어를 어디서 받아올지" 적어둔 목록. Proxmox는 기본으로 유료 구독자용 리포(enterprise)만 켜져 있어서, 구독이 없으면 업데이트할 때 401 에러가 난다 — 3부 마지막의 그 빨간 줄. 무료 홈랩은 이걸 무료판(no-subscription) 리포로 바꿔야 한다.)
먼저 지금 어떤 리포 파일이 있는지 본다.

(ls = 목록 보기. /etc/apt/sources.list.d/ = 리포 설정 파일이 모인 폴더.)
각 파일 안을 열어 보면(cat 파일), 형식은 이렇다 — URIs(받는 주소)가 핵심이다.
| 파일 | URIs(주소) | 판정 |
|---|---|---|
debian.sources |
deb.debian.org · security.debian.org |
✅ 무료(데비안 공식) — 그대로 |
pve-enterprise.sources |
enterprise.proxmox.com/.../pve |
❌ 유료 → 끈다 |
ceph.sources |
enterprise.proxmox.com/.../ceph-squid |
❌ 유료(Ceph, 안 씀) → 끈다 |
(PVE 9의 리포 파일은 deb822라는 새 형식(.sources)이다. 예전 .list 형식으로 안내하는 한글 가이드가 많은데, 그대로 따라하면 안 된다.)
① 유료 리포 두 개 끄기 — deb822 형식은 파일 끝에 Enabled: false 한 줄을 붙이면 꺼진다.
echo "Enabled: false" >> /etc/apt/sources.list.d/pve-enterprise.sources
echo "Enabled: false" >> /etc/apt/sources.list.d/ceph.sources
(echo "..." = 그 글자를 출력. >> = 그 출력을 파일 끝에 이어붙이기. 두 리포가 비활성으로 꺼진다.)
② 무료판 리포 새로 켜기 — 무료 업데이트를 받을 새 파일을 만든다.
cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
(cat > 파일 <<'EOF' ... EOF = EOF 사이 5줄을 새 파일 내용으로 써넣기. 유료 리포와 형식은 같고 주소만 download.proxmox.com(무료), 묶음이 pve-no-subscription.)\
③ 확인 — 이제 apt한테 새 리포 기준으로 목록을 다시 읽게 한다.
apt update
Hit deb.debian.org/debian trixie ...
Get download.proxmox.com/debian/pve trixie ... ← 무료 리포 접속됨
Get .../pve-no-subscription amd64 Packages [495 kB]
94 packages can be upgraded.
무료판으로 전환 성공 — 이제 업데이트를 받을 수 있다. 밀려 있던 업그레이드가 94개 잡힌다.

2. 전체 업그레이드 — 밀린 94개 받기
리포를 바꾸자마자 밀려 있던 보안 패치·버그 수정을 받는다. 서버를 처음 세우면 늘 하는 첫 정비다.
apt full-upgrade -y
(full-upgrade = 업그레이드하되 의존성 때문에 패키지 추가/제거까지 허용 — Proxmox 공식 권장. 그냥 upgrade는 의존성 변화를 못 다뤄 꼬일 수 있다. -y = 중간 확인에 자동 예.)
완료되면 94개가 설치되고 프롬프트가 돌아온다. 로그 끝에 update-initramfs: Generating /boot/initrd.img-...-pve가 보이면 커널이 업그레이드된 것 — 새 커널은 재부팅해야 적용된다. 지금 바로 재부팅하지 않고, 뒤 작업(절전·USB)에도 재부팅이 필요하니 마지막에 한 번에 묶어서 한다.

3. 절전 차단 — 뚜껑 닫아도 안 잠들게
우리 목표는 노드 3대(VM)가 24시간 살아있는 것이다. 그 VM들은 노트북(호스트) 위에서 돈다 — 호스트가 잠들면 그 위의 VM 3대가 통째로 멈춘다. 노트북 기본값은 "뚜껑 닫으면 잠자기"라, 서버로 구석에 두려고 뚜껑 닫는 순간 클러스터가 죽는다. 뚜껑 닫아도 안 잠들게 못 박아야 비로소 노트북을 서버로 쓸 수 있다.
① 뚜껑 스위치를 "무시"로 바꾼다.
[스크린샷: sed로 logind.conf 3줄 수정 + grep 확인]
(/etc/systemd/logind.conf = "전원 버튼·뚜껑 닫힘에 어떻게 반응할지" 정한 파일. sed -i 's/찾을것/바꿀것/'로 그 안의 줄을 직접 고친다. 뚜껑 닫힘 3종 — 그냥·전원 연결 시·도킹 시 — 을 전부 ignore로. 원래 #로 꺼져 있던 줄이라 #를 떼고 값을 넣는다. 바꾼 뒤 systemctl restart systemd-logind로 적용.)
sed -i 's/^#HandleLidSwitch=.*/HandleLidSwitch=ignore/; s/^#HandleLidSwitchExternalPower=.*/HandleLidSwitchExternalPower=ignore/; s/^#HandleLidSwitchDocked=.*/HandleLidSwitchDocked=ignore/' /etc/systemd/logind.conf
systemctl restart systemd-logind
grep HandleLidSwitch /etc/systemd/logind.conf # 세 줄이 =ignore면 성공

4. 잠자기 자체를 봉쇄 — 이중 안전장치
3번은 "뚜껑" 트리거만 막았다. 근데 유휴 타이머나 다른 프로그램 요청 같은 딴 경로로도 잠들 수 있다. 잠자기 기능 자체를 아예 막아 어느 경로로도 못 자게 이중으로 잠근다.
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
systemctl status sleep.target # "masked"면 성공

(mask = 그 기능을 아예 실행 불가로 잠금(disable보다 강해서 뭘로도 못 켬). sleep/suspend/hibernate/hybrid-sleep = 모든 절전 모드. 이걸로 "잠들라"는 어떤 명령도 무시된다. 추가로 AC 어댑터는 상시 연결 — 배터리 방전으로 꺼지지 않게, 내장 배터리는 정전 시 간이 UPS.)
5. USB 자동절전 차단 — 외장 SSD 끊김 방지 (★최대 리스크)
우리 루트 디스크는 외장 USB SSD다 — 이게 끊기면 서버가 통째로 죽는 단일 장애점(SPOF). 그런데 리눅스는 전력을 아끼려고 "유휴 USB 장치를 자동으로 재우는" 기능이 기본으로 켜져 있다. 루트 디스크가 재워지면 파일 접근이 끊겨 크래시·파일시스템 손상으로 간다. 이 자동절전을 꺼야 SSD가 안 끊긴다.
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 usbcore.autosuspend=-1"/' /etc/default/grub
update-grub
grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub # ...usbcore.autosuspend=-1"이면 성공

(/etc/default/grub = 부팅할 때 커널에 넘길 옵션을 적는 파일. usbcore.autosuspend=-1 = USB 자동절전 끄기(-1 = 절대 안 재움). 기존 옵션 뒤에 이 항목을 덧붙인다. update-grub으로 부팅 설정에 반영 — 재부팅해야 발효.)

6. 재부팅 — 여기까지 묶어서 한 번
커널 업그레이드(2번)와 grub 변경(5번)은 재부팅해야 발효된다. 그래서 절전 설정까지 다 한 지금 한 번에 재부팅한다.

(reboot. 재부팅 후 F12 → ASMT 2115(외장 SSD)로 부팅. 새 커널·USB 설정이 적용된 상태로 뜬다. 이제 뚜껑 닫아도 안 잠든다 — 확인하려면 뚜껑 닫고 데스크탑에서 192.168.0.200:8006이 계속 살아있나 보면 된다. - 잘됨!)
uname -r로 확인한 결과 이전에 update-grub으로 새로 등록한 커널(7.0.14-5-pve)이 뜬 것을 볼 수 있다.
-> iso는 릴리스된 날에 굳은 스냅샷이기에, 그 안의 커널은 그 시점 버전(7.0.2-6-pve)이다. 하지만 그 이후로도 proxmox는 커널을 계속 업데이트하고, 최신판은 앞서 켠 무료 리포에 올라와 있었기에, apt full-upgrade로 밀려 있던 업데이트를 받을 때 이 최신 커널이 함께 디스크에 깔리며, 재부팅하며 그 버전으로 뜬 것이다.

위에서 한 작업으로 인해 노트북을 닫아도 데스크탑에서 접근 가능한 나만의 홈랩은 제대로 잘 작동한다.
7. 안정성 마감 셋 — 시간·CPU·스왑 (한 번에)
서로 독립인 마무리 설정 셋이라 한 번에 실행한다. 각각의 이유는 다르다.
- 시간 동기화 확인 (chrony) — 서버 시간이 틀어지면 줄줄이 깨진다: TLS 인증서(시간 기준 유효성 검증), 곧 만들 k3s 노드 간 통신, 로그 타임스탬프. chrony가 인터넷 시간서버와 자동으로 맞춰주는데 이미 깔려 있어, 잘 돌고 있나 확인만 한다.
- CPU 마이크로코드 (intel-microcode) — CPU 자체의 버그·보안 취약점을 인텔이 고치는 패치(부팅 때 CPU에 덮음). 설치기가 안 깔아주니 상시 켜둘 서버라 수동으로 넣는다(재부팅 후 발효).
- 스왑 성향 낮추기 (swappiness=10) — 리눅스는 메모리가 빠듯하면 안 쓰는 데이터를 디스크(스왑)로 밀어낸다. 근데 우리 스왑은 외장 USB SSD 위라 타는 순간 굼떠진다. swappiness(스왑을 얼마나 적극 쓸까, 0~100·기본 60)를 10으로 낮춰 "정말 급할 때만" 쓰게 한다.
timedatectl
apt install intel-microcode -y
echo "vm.swappiness = 10" > /etc/sysctl.d/99-swappiness.conf
sysctl --system

(timedatectl = 시간·시간대·동기 상태 보기(Asia/Seoul + synchronized: yes + NTP: active면 정상).

apt install ... -y = 마이크로코드 설치(-y=자동 예). echo ... > 파일 = 스왑 설정 파일 생성 → sysctl --system으로 즉시 적용(재부팅 불요, 출력에 vm.swappiness = 10 보이면 됨).)

8. 서버 통제하기 — 끄고 켜기
지금까지의 설정으로 서버는 "계속 켜진 상태"가 됐다(뚜껑 닫아도 안 잠듦). 그런데 내가 원할 때 안전하게 내리고 다시 올릴 줄 알아야, 강제 종료 없이 서버를 통제할 수 있을 것 같다.

- 끄기(안전 종료): 웹UI 오른쪽 위 Shutdown 버튼, 또는 셸에서 shutdown now. 파일 저장을 다 마치고 깔끔하게 끈다.
- 켜기: 노트북 전원 버튼 → 레노버 로고 → F12 → ASMT 2115(외장 SSD). 부팅되면 1~9 설정이 다 적용된 채로 뜬다 → 데스크탑에서 192.168.0.200:8006 접속.
- 재부팅: 웹UI Reboot 버튼, 또는 셸 reboot.
외장 SSD는 언제 뽑지? — Windows 쓰거나 나갈 땐 빼되, 반드시 꺼진 뒤에.
이 노트북은 겸용이다. Proxmox 서버로 쓸 땐 SSD를 꽂고 F12로 부팅하고, Windows를 쓰거나 노트북을 들고 나갈 땐 SSD를 빼고 다닌다(SSD가 없으면 F12를 안 눌러도 그냥 Windows로 부팅된다). 그래서 SSD를 뺐다 꽂았다 하는 게 정상 워크플로우다. 핵심은 뺄 때 순서다 — 이 SSD는 서버의 루트 디스크(심장)라, 서버가 켜진 채로 뽑으면 즉시 크래시·손상이다.
뺄 때 (Windows 전환·외출):
- 데스크탑 웹UI(또는 셸)에서 Shutdown으로 서버를 안전하게 종료.
- 노트북 화면·전원 LED·어댑터 파란 LED가 다 꺼진 것 확인(완전히 꺼짐 = 디스크 활동 멈춤). Shutdown 누르자마자 뽑으면 안 된다 — 실제 꺼지기까지 몇 초~십몇 초 걸리고 그 사이 뽑으면 손상.
- 그다음 SSD 뽑기. 이제 노트북은 전원만 켜면 Windows로 부팅된다(내장 NVMe는 SSD와 완전 별개라 아무 영향 없음 — Windows는 늘 안전하다).
다시 꽂을 때 (서버 재개): 노트북 끈 상태에서 SSD 꽂고 → 전원 → F12 → ASMT 2115 → Proxmox 부팅. 1~9 설정이 그대로 살아있다.
운영 중 지킬 것: ⚠️ 서버 켜진 상태(웹UI 도는 중)에서는 절대 뽑지 않는다 — 반드시 Shutdown → 완전히 꺼짐 확인 → 뽑기. 그리고 우리 최대 리스크가 "USB 접촉 불량으로 순간 끊김"이라, 켜둔 동안엔 어댑터·케이블을 건드리지 않게 안정적으로 두고(허브 금지·USB 3.0 직결), 파란 LED가 깜빡이는(읽기/쓰기 중) 동안엔 손대지 않는다.
(한 줄: 뺐다 꽂았다는 자유지만, 뺄 땐 무조건 "Shutdown → 완전히 꺼짐 확인 → 뽑기". 켜진 채로는 절대 안 뽑는다.)
여기까지가 설치 직후 정비다. 이제 서버는 24시간 켜둘 수 있고, 내가 원할 때 안전하게 끄고 켤 수 있다. ⚠️ 참고로 Datacenter의 Create Cluster는 절대 누르지 않는다 — 단일 서버에서 누르면 클러스터 쿼럼 문제로 설정이 잠겨버린다(우리 k3s 클러스터는 이것과 무관, VM 안에서 따로 만든다).
다음
- 5부(예정). VM 3대 만들기 → k3s 노드 — 브리지(vmbr0) 확인 → Ubuntu ISO 업로드 → Create VM ×3(CPU host·ballooning 끔·virtio·guest-agent·onboot) → 각 노드 고정 IP(.201–.203). 그 위에 k3s 클러스터를 올린다.
'HomeLab' 카테고리의 다른 글
| 노트북 홈서버 k3s 구축기 - 6. 데이터 디스크와 k3s 클러스터 (0) | 2026.07.21 |
|---|---|
| 노트북 홈서버 k3s 구축기 - 5. 노드(VM) 구축 (0) | 2026.07.19 |
| 노트북 홈서버 k3s 구축기 - 3. 내 골목 개통, 그리고 Proxmox 설치 (0) | 2026.07.19 |
| 노트북 홈서버 k3s 구축기 - 2. usb 굽기 및 홈 네트워크 분석 (0) | 2026.07.16 |
| 노트북 홈서버 k3s 구축기 - 1. 왜 k3s, 왜 Proxmox (0) | 2026.07.16 |