从 LVM 到 autofs — 亲手搭建存储
한국어 원문으로 표시합니다.
목표
루프 장치 두 개 위에 LVM 을 세우고, ext4 를 UUID 로 fstab 에 등록하고, 온라인으로 늘리고, 스왑 파일을 켜고, 같은 VM 안에서 NFS 서버와 autofs 클라이언트를 구성한 뒤 iostat·vmstat 로 지표를 남깁니다. 전부 진짜로 붙습니다.
왜 중요한가
LFCS 의 Storage 도메인(20%)은 파드에서는 한 줄도 할 수 없었습니다 — pvcreate 도 mount 도 capability 가 없어 막힙니다. 이 실습은 우분투 24.04 VM 에서 root 로 돕니다. 대신 빈 디스크는 없습니다. 스크래치 디스크는 플랫폼이 이미 ext4 로 포맷해 붙였으므로, 파일을 블록 장치처럼 보이게 하는 루프 장치(losetup)로 시작합니다. 실무에서 디스크 없이 LVM 이나 RAID 를 시험할 때 쓰는 바로 그 방법입니다.
세 가지가 이 실습의 뼈대입니다. 첫째, LVM 은 PV → VG → LV 세 층이고 늘리는 일은 두 층에서 따로 일어납니다(lvextend 뒤에 resize2fs). 둘째, fstab 에는 장치 이름이 아니라 UUID 를 적습니다 — 장치 순서는 부팅마다 바뀔 수 있습니다. 셋째, 설정 파일을 고치는 것과 데몬이 그것을 아는 것은 다릅니다(exportfs -ra, systemctl restart autofs).
세션은 60분에 시작해 최대 180분까지 연장할 수 있고, VM 은 세션이 끝나면 사라집니다.
단계
/var/lib/lfcs/disk1.img와/var/lib/lfcs/disk2.img를 각각 1GiB 크기로 만들고(희소 파일이면 됩니다) 둘 다 루프 장치로 붙이세요. 붙인 뒤losetup -a출력을/root/lfcs/storage/loop.txt로 저장하세요.- 두 루프 장치를 LVM 물리 볼륨(PV)으로 초기화하고, 둘을 합쳐 볼륨 그룹
vg_lfcs를 만드세요. vg_lfcs에서 600MiB 크기의 논리 볼륨lv_data를 만들고 ext4 로 포맷하세요.lv_data를/srv/data에 마운트하고, 재부팅 뒤에도 붙도록/etc/fstab에 UUID= 로 시작하는 줄(타입ext4, 옵션defaults, dump 0, pass 2)을 추가하세요.findmnt --verify로 fstab 에 오류가 없어야 합니다.lv_data를 300MiB 더 늘리고(총 900MiB 이상), 마운트를 풀지 않은 채 ext4 파일시스템도 같이 커지게 하세요.df로 본/srv/data의 크기가 커져야 합니다./var/swap/lfcs.swap을 256MiB 스왑 파일로 만들어 켜세요. 권한은600이어야 하고,/etc/fstab에 재부팅 뒤에도 켜지도록 줄(타입swap)을 추가하세요./srv/share를 NFS 로 내보내되 127.0.0.1 에만 허용하세요(옵션rw,sync,no_subtree_check)./srv/share/hello.txt에 아무 내용이나 적고, 그 공유를/mnt/share에 NFS 로 마운트해 같은 파일이 보이게 하세요.- 같은 공유를 autofs 가 접근하는 순간 붙이게 하세요. 마스터 맵
/etc/auto.master.d/lfcs.autofs에/nfs를 맵/etc/auto.lfcs로 연결하고, 그 맵에 키share가127.0.0.1:/srv/share를 nfs4 로 가리키게 적으세요. autofs 를 재시작한 뒤ls /nfs/share가 hello.txt 를 보여야 합니다. (서버가 자기 자신이면 autofs 는 NFS 대신 bind 로 붙입니다 —findmnt /nfs/share의 SOURCE 가[/srv/share]로 보여도 정상입니다.) iostat -dxk 1 3출력을/root/lfcs/storage/iostat.txt에,vmstat 1 3출력을/root/lfcs/storage/vmstat.txt에 저장하세요. 그리고/root/lfcs/storage/summary.txt를 네 줄로 만드세요:VG=vg_lfcs,PVS=<vg_lfcs 의 PV 개수>,LV_MB=<lv_data 의 크기(MiB, 정수)>,SWAP=<켜져 있는 스왑 파일 경로>.
참고
- 루프 장치:
truncate -s 1G 파일→losetup -f --show 파일. 어느 장치에 붙었는지는losetup -j 파일. - LVM:
pvcreate,vgcreate vg_lfcs 장치1 장치2,lvcreate -L 600M -n lv_data vg_lfcs,lvextend -L +300M -r. - UUID:
blkid -o value -s UUID /dev/vg_lfcs/lv_data. fstab 을 고친 뒤에는systemctl daemon-reload와mount -a. - NFS:
/etc/exports→exportfs -ra→exportfs -v. autofs: 맵 파일 →systemctl restart autofs. - 흔한 실수 1:
lvextend만 하고resize2fs를 빼서df가 그대로인 경우. - 흔한 실수 2:
/etc/exports에서 클라이언트와 여는 괄호 사이에 공백을 넣어 전 세계에 열리는 경우. - 흔한 실수 3: fstab 에
/dev/loopN을 적는 경우 — 번호는 부팅마다 달라질 수 있습니다.
루프 장치 두 개 만들기
/var/lib/lfcs/disk1.img 와 /var/lib/lfcs/disk2.img 를 각각 1GiB 크기로 만들고(희소 파일이면 됩니다) 둘 다 루프 장치로 붙이세요. 붙인 뒤 losetup -a 출력을 /root/lfcs/storage/loop.txt 로 저장하세요.
truncate -s 로 희소 파일을 만들 수 있습니다. 루프 번호는 snap 이 이미 몇 개 쓰고 있으니 박지 말고 비어 있는 것을 받으세요(losetup -f --show).
PV 두 개로 VG 만들기
두 루프 장치를 LVM 물리 볼륨(PV)으로 초기화하고, 둘을 합쳐 볼륨 그룹 vg_lfcs 를 만드세요.
pvcreate 는 장치마다, vgcreate 는 VG 이름 뒤에 장치들을 나열합니다. 어느 루프 장치인지는 losetup -j <파일> 로 되찾을 수 있습니다.
LV 를 자르고 ext4 로 포맷
vg_lfcs 에서 600MiB 크기의 논리 볼륨 lv_data 를 만들고 ext4 로 포맷하세요.
lvcreate -L 로 크기, -n 으로 이름을 줍니다. 장치 경로는 /dev// 또는 /dev/mapper/- 두 가지로 보입니다.
마운트하고 fstab 에 UUID 로 적기
lv_data 를 /srv/data 에 마운트하고, 재부팅 뒤에도 붙도록 /etc/fstab 에 UUID= 로 시작하는 줄(타입 ext4, 옵션 defaults, dump 0, pass 2)을 추가하세요. findmnt --verify 로 fstab 에 오류가 없어야 합니다.
UUID 는 blkid 로 봅니다. 장치 경로(/dev/loopN)는 부팅마다 바뀔 수 있어서 fstab 에 적으면 안 됩니다. 적은 뒤 systemctl daemon-reload 와 mount -a 로 fstab 줄 자체가 동작하는지 확인하세요.
온라인으로 LV 와 파일시스템 늘리기
lv_data 를 300MiB 더 늘리고(총 900MiB 이상), 마운트를 풀지 않은 채 ext4 파일시스템도 같이 커지게 하세요. df 로 본 /srv/data 의 크기가 커져야 합니다.
lvextend -L +300M 으로 LV 를 늘려도 파일시스템은 모릅니다. resize2fs 를 따로 돌리거나 lvextend 에 -r 을 붙여야 df 가 바뀝니다.
스왑 파일 만들고 켜기
/var/swap/lfcs.swap 을 256MiB 스왑 파일로 만들어 켜세요. 권한은 600 이어야 하고, /etc/fstab 에 재부팅 뒤에도 켜지도록 줄(타입 swap)을 추가하세요.
fallocate 또는 dd 로 파일을 만들고 chmod 600 → mkswap → swapon 순서입니다. swapon --show 로 켜졌는지 봅니다. fstab 줄은 여섯 필드이고 마운트 지점 자리는 none, 타입은 swap 입니다 (예: /var/swap/sample.swap none swap sw 0 0).
로컬 NFS 서버로 내보내고 마운트
/srv/share 를 NFS 로 내보내되 127.0.0.1 에만 허용하세요(옵션 rw,sync,no_subtree_check). /srv/share/hello.txt 에 아무 내용이나 적고, 그 공유를 /mnt/share 에 NFS 로 마운트해 같은 파일이 보이게 하세요.
/etc/exports 한 줄 → exportfs -ra → mount -t nfs4 127.0.0.1:/srv/share /mnt/share 순서입니다. exportfs -v 로 실제로 내보내졌는지 확인하세요 — 파일만 고치면 서버는 모릅니다.
autofs 로 접근할 때 붙이기
같은 공유를 autofs 가 접근하는 순간 붙이게 하세요. 마스터 맵 /etc/auto.master.d/lfcs.autofs 에 /nfs 를 맵 /etc/auto.lfcs 로 연결하고, 그 맵에 키 share 가 127.0.0.1:/srv/share 를 nfs4 로 가리키게 적으세요. autofs 를 재시작한 뒤 ls /nfs/share 가 hello.txt 를 보여야 합니다. (서버가 자기 자신이면 autofs 는 NFS 대신 bind 로 붙입니다 — findmnt /nfs/share 의 SOURCE 가 [/srv/share] 로 보여도 정상입니다.)
마스터 맵 줄은 '마운트지점 맵파일', 맵 줄은 '키 -fstype=nfs4 서버:/경로' 입니다. 맵을 고친 뒤 systemctl restart autofs 를 잊으면 /nfs 는 그냥 빈 디렉터리입니다.
iostat·vmstat 로 성능 지표 남기기
iostat -dxk 1 3 출력을 /root/lfcs/storage/iostat.txt 에, vmstat 1 3 출력을 /root/lfcs/storage/vmstat.txt 에 저장하세요. 그리고 /root/lfcs/storage/summary.txt 를 네 줄로 만드세요: VG=vg_lfcs, PVS=<vg_lfcs 의 PV 개수>, LV_MB=<lv_data 의 크기(MiB, 정수)>, SWAP=<켜져 있는 스왑 파일 경로>.
iostat 는 sysstat 패키지에 있습니다. 첫 표본은 부팅 이후 누적치라 세 번 뽑습니다. 값은 손으로 적지 말고 vgs·lvs --units m --nosuffix·swapon --show 에서 뽑으세요.