Red Hat Certified System Administrator (RHCSA) #7 파일 시스템: XFS, ext4, mount/fstab, NFS, AutoFS
#5와 #6에서 파티션과 LVM으로 블록 디바이스를 만들고 늘렸다면, 그 위에 파일 시스템을 얹고 마운트하는 일이 이번 글의 주제입니다. RHCSA는 빈 블록 디바이스를 만드는 데서 끝나지 않습니다. 그 위에 XFS나 ext4를 만들고, 디렉터리에 마운트하고, 재부팅 후에도 같은 자리에 다시 붙도록 fstab에 영구 등록하는 것까지가 한 작업입니다.
여기에 더해 RHCSA의 단골 출제 영역인 NFS 클라이언트 마운트와 AutoFS 온디맨드 마운트를 함께 다루겠습니다. 두 작업 모두 “외부 스토리지를 내 시스템에 붙인다"는 점은 같지만, NFS는 fstab으로 항상 붙여 두고 AutoFS는 접근할 때만 자동으로 붙였다가 떼어 낸다는 차이가 있습니다.
파일 시스템 만들기 #
블록 디바이스(파티션이나 LV) 위에 데이터를 담으려면 먼저 파일 시스템을 만들어야 합니다. RHEL 9의 기본 파일 시스템은 XFS이고, ext4도 함께 지원합니다.
XFS: mkfs.xfs #
XFS는 RHEL의 기본 파일 시스템이며 대용량과 병렬 I/O에 강합니다. LV /dev/vg01/lv01에 XFS를 만드는 명령은 다음과 같습니다.
sudo mkfs.xfs /dev/vg01/lv01이미 파일 시스템이 있는 디바이스에 다시 만들려고 하면 거부됩니다. 정말 덮어쓰려면 -f(force)를 붙입니다.
sudo mkfs.xfs -f /dev/vg01/lv01ext4: mkfs.ext4 #
ext4가 필요한 작업이라면 mkfs.ext4를 씁니다.
sudo mkfs.ext4 /dev/vg01/lv02mkfs -t xfs나 mkfs -t ext4 형태로도 같은 작업을 할 수 있습니다. 시험에서는 어느 쪽을 써도 결과만 맞으면 됩니다.
sudo mkfs -t xfs /dev/vg01/lv01
sudo mkfs -t ext4 /dev/vg01/lv02만들어진 파일 시스템 확인 #
lsblk -f는 각 디바이스의 파일 시스템 타입과 UUID, LABEL을 한눈에 보여 줍니다. 마운트와 fstab 작업의 출발점이 되는 명령입니다.
lsblk -fNAME FSTYPE FSVER LABEL UUID MOUNTPOINTS
vda
├─vda1 xfs a1b2c3d4-... /boot
└─vda2 LVM2_member ...
└─...
vg01-lv01 xfs 1f2e3d4c-5b6a-7980-1234-567890abcdef
vg01-lv02 ext4 1.0 9876fedc-ba98-7654-3210-abcdef012345blkid로도 UUID와 타입을 확인할 수 있습니다.
sudo blkid /dev/vg01/lv01마운트와 해제 #
파일 시스템을 만들었다면 디렉터리에 붙여야(마운트해야) 실제로 쓸 수 있습니다.
디렉터리에 마운트: mount #
먼저 마운트 지점이 될 디렉터리를 만들고, 그 위에 디바이스를 붙입니다.
sudo mkdir -p /data
sudo mount /dev/vg01/lv01 /data해제: umount #
마운트를 떼어 낼 때는 umount에 디바이스나 마운트 지점 중 하나를 줍니다.
sudo umount /data“target is busy” 오류가 나면 그 디렉터리 안에 들어가 있거나, 그 안의 파일을 열어 둔 프로세스가 있는 것입니다. lsof나 fuser로 누가 쓰는지 확인합니다.
sudo lsof /data
sudo fuser -vm /data마운트 상태 확인: findmnt #
findmnt는 현재 마운트 트리를 깔끔하게 보여 줍니다. 특정 지점만 보려면 인자로 줍니다.
findmnt
findmnt /datamount 명령을 인자 없이 치거나 df -h를 써도 마운트 상황을 볼 수 있지만, findmnt가 옵션까지 또렷하게 보여 줘 검증에 좋습니다.
df -h /data여기까지의 mount는 메모리에만 적용되는 임시 마운트입니다. 재부팅하면 사라집니다. RHCSA에서 실점하지 않으려면 반드시 다음 단계인 fstab 영구 등록까지 가야 합니다.
fstab으로 영구 마운트 #
/etc/fstab에 한 줄을 등록하면 부팅할 때마다 자동으로 마운트됩니다. fstab은 공백으로 구분된 여섯 칸으로 이루어집니다.
<디바이스> <마운트지점> <타입> <옵션> <dump> <fsck순서>| 칸 | 의미 |
|---|---|
| 디바이스 | UUID,LABEL,디바이스 경로 중 하나. UUID 권장 |
| 마운트 지점 | 붙일 디렉터리 |
| 타입 | xfs,ext4,nfs 등 |
| 옵션 | defaults,nofail 등 마운트 옵션 |
| dump | 백업 표시. 보통 0 |
| fsck 순서 | 부팅 시 검사 순서. 루트는 1, 나머지는 0 또는 2 |
디바이스 경로 대신 UUID를 쓰는 이유 #
/dev/sdb1 같은 디바이스 경로는 디스크 추가,제거에 따라 바뀔 수 있습니다. UUID는 파일 시스템에 고정되어 변하지 않으므로, fstab에는 UUID를 쓰는 것이 안전합니다. UUID는 lsblk -f나 blkid로 확인합니다.
sudo blkid /dev/vg01/lv01/dev/vg01/lv01: UUID="1f2e3d4c-5b6a-7980-1234-567890abcdef" TYPE="xfs"확인한 UUID로 fstab에 한 줄을 추가합니다.
UUID=1f2e3d4c-5b6a-7980-1234-567890abcdef /data xfs defaults 0 0LV처럼 이름이 안정적인 경우에는 디바이스 매퍼 경로를 그대로 써도 무방합니다.
/dev/vg01/lv01 /data xfs defaults 0 0LABEL로 등록하기 #
파일 시스템에 라벨을 붙여 두면 fstab에서 LABEL=로 참조할 수 있습니다. XFS는 xfs_admin -L, ext4는 e2label로 라벨을 지정합니다.
sudo xfs_admin -L data /dev/vg01/lv01
sudo e2label /dev/vg01/lv02 logsLABEL=data /data xfs defaults 0 0
LABEL=logs /logs ext4 defaults 0 0mount -a로 검증하기 #
fstab을 고친 뒤에는 재부팅하기 전에 반드시 검증해야 합니다. mount -a는 fstab의 모든 항목 중 아직 마운트되지 않은 것을 마운트합니다. 오류 없이 끝나고 findmnt로 마운트가 보이면 성공입니다.
sudo mount -a
findmnt /data오류가 나면 fstab의 그 줄에 오타가 있거나 디바이스,옵션이 잘못된 것입니다. 이 자리에서 잡아야 부팅 실패를 막습니다.
defaults 옵션의 의미 #
defaults는 rw,suid,dev,exec,auto,nouser,async를 묶은 표준 옵션 세트입니다. 대부분의 일반 마운트에는 defaults만으로 충분합니다. 필요하면 추가 옵션을 콤마로 덧붙입니다.
LABEL=data /data xfs defaults,noexec 0 0nofail: 디바이스가 없어도 부팅을 막지 않기 #
fstab에 등록한 디바이스가 부팅 시점에 없으면, 기본 동작은 부팅을 멈추고 응급 모드로 떨어지는 것입니다. NFS나 USB처럼 항상 존재한다고 보장할 수 없는 디바이스에는 nofail을 주어, 없을 때 조용히 건너뛰게 합니다.
LABEL=backup /backup xfs defaults,nofail 0 0nofail은 “이 마운트가 실패해도 시스템 부팅은 계속한다"는 안전장치입니다. 외부 스토리지 항목에는 붙여 두는 것이 좋습니다.
NFS 클라이언트 마운트 #
NFS는 네트워크 너머의 디렉터리를 내 시스템에 마운트해 로컬 디렉터리처럼 쓰는 방식입니다. RHCSA는 클라이언트 쪽 마운트를 주로 묻습니다. 서버 구성이 아니라, 주어진 NFS 서버의 공유를 내 시스템에 붙이는 작업입니다.
클라이언트 패키지 #
NFS 클라이언트 도구는 nfs-utils 패키지가 제공합니다. 보통 기본 설치되어 있지만 없으면 설치합니다.
sudo dnf install -y nfs-utilsshowmount로 공유 확인 #
서버가 어떤 디렉터리를 export하는지 showmount -e로 확인합니다.
showmount -e nfs.example.comExport list for nfs.example.com:
/exports/shared *
/exports/home 192.168.0.0/24임시 마운트 #
마운트 지점을 만들고 mount -t nfs로 붙입니다.
sudo mkdir -p /mnt/shared
sudo mount -t nfs nfs.example.com:/exports/shared /mnt/shared붙은 결과는 findmnt로 확인합니다.
findmnt /mnt/sharedfstab으로 영구 마운트 #
NFS도 fstab에 등록하면 부팅 시 자동으로 마운트됩니다. 타입은 nfs이고, 디바이스 자리에는 서버:경로를 씁니다. 네트워크나 서버 사정으로 마운트가 실패할 수 있으므로 nofail을 함께 주는 것이 안전합니다.
nfs.example.com:/exports/shared /mnt/shared nfs defaults,_netdev,nofail 0 0_netdev 옵션은 “이 마운트는 네트워크가 올라온 뒤에 시도하라"는 표시입니다. NFS처럼 네트워크에 의존하는 마운트에 붙입니다. 등록 후 mount -a로 검증합니다.
sudo mount -a
findmnt /mnt/sharedAutoFS 온디맨드 마운트 #
fstab 마운트는 부팅 때 항상 붙어 있습니다. 반면 AutoFS는 해당 디렉터리에 접근하는 순간에만 자동으로 마운트하고, 일정 시간 쓰지 않으면 다시 떼어 냅니다. 사용자 홈 디렉터리를 NFS로 제공하는 환경처럼, 필요할 때만 붙는 마운트가 유리한 경우에 씁니다.
autofs 설치와 활성화 #
sudo dnf install -y autofs
sudo systemctl enable --now autofs마스터 맵: /etc/auto.master #
AutoFS 설정은 마스터 맵과 맵 파일의 두 단계로 이루어집니다. 마스터 맵(/etc/auto.master 또는 /etc/auto.master.d/ 아래 파일)은 “어느 디렉터리를 어느 맵 파일이 관리하는가"를 정의합니다.
/etc/auto.master.d/shared.autofs 파일을 만들고 다음 한 줄을 둡니다.
/shares /etc/auto.shared이 줄은 “/shares 아래의 마운트는 /etc/auto.shared 맵 파일이 관리한다"는 의미입니다.
맵 파일: /etc/auto.shared #
맵 파일은 “마운트 지점 이름, 옵션, 출처"를 정의합니다. /etc/auto.shared에 다음을 둡니다.
data -rw,sync nfs.example.com:/exports/shared이렇게 두면 /shares/data에 접근하는 순간 AutoFS가 nfs.example.com:/exports/shared를 그 자리에 마운트합니다. /shares 디렉터리는 직접 만들 필요가 없습니다. AutoFS가 관리합니다.
설정을 다시 읽으려면 autofs를 재시작합니다.
sudo systemctl restart autofs동작 확인 #
접근하기 전에는 마운트가 보이지 않다가, 디렉터리에 들어가면 그제야 마운트되는 것이 AutoFS의 핵심입니다.
ls /shares/data
findmnt /shares/data홈 디렉터리 자동 마운트 #
RHCSA의 대표 시나리오는 NFS 홈 디렉터리를 AutoFS로 자동 마운트하는 것입니다. 예를 들어 서버가 /exports/home/사용자명 형태로 각 사용자 홈을 export한다면, 와일드카드 맵으로 한 줄에 처리합니다.
마스터 맵 /etc/auto.master.d/home.autofs에 다음을 둡니다.
/home/guests /etc/auto.home맵 파일 /etc/auto.home에는 와일드카드 *와 치환 변수 &를 씁니다.
* -rw,sync nfs.example.com:/exports/home/&*는 접근하는 하위 디렉터리 이름과 일치하고, &는 그 이름으로 치환됩니다. 사용자 jdoe가 /home/guests/jdoe에 접근하면 AutoFS가 nfs.example.com:/exports/home/jdoe를 그 자리에 마운트합니다.
sudo systemctl restart autofs
ls /home/guests/jdoe
findmnt /home/guests/jdoe이 패턴은 시험에서 “사용자 X의 홈을 NFS 서버로부터 자동 마운트하라"는 형태로 자주 나옵니다. 마스터 맵 한 줄과 와일드카드 맵 한 줄이라는 구조를 손에 익혀 두겠습니다.
시험 포인트 #
- fstab 오타는 부팅 실패로 이어집니다. 한 줄이라도 잘못되면 다음 부팅에서 응급 모드로 떨어질 수 있습니다. fstab을 고친 뒤에는 재부팅하기 전에 반드시
sudo mount -a로 검증하고, 오류가 없는지 확인하겠습니다. - 로컬 마운트는 UUID나 LABEL로, NFS는
서버:경로로 등록합니다. 디바이스 경로는 바뀔 수 있으니 UUID를 우선합니다. - 외부,네트워크 마운트에는
nofail(과 NFS면_netdev)을 붙여, 디바이스나 서버가 없을 때 부팅이 멈추지 않게 합니다. - AutoFS는 마스터 맵 + 맵 파일 두 단계입니다. 마스터 맵은 디렉터리와 맵 파일을 연결하고, 맵 파일은 마운트 옵션과 출처를 정의합니다. 설정을 고치면
systemctl restart autofs로 반영합니다. - man page가 막혔을 때
/usr/share/doc/autofs의 예제 파일(auto.master,auto.misc)이 큰 도움이 됩니다.
정리 #
이번 글에서 잡은 것:
- 파일 시스템 생성.
mkfs.xfs(기본)와mkfs.ext4, 그리고lsblk -f,blkid로 타입과 UUID 확인 - 마운트와 해제.
mount로 붙이고umount로 떼며,findmnt로 상태를 검증. 이 마운트는 임시 - fstab 영구 마운트. UUID,LABEL로 등록하고
defaults,nofail옵션을 활용하며,mount -a로 재부팅 전에 검증 - NFS 클라이언트.
showmount -e로 공유 확인,mount -t nfs로 임시 마운트, fstab에nfs,_netdev,nofail로 영구 등록 - AutoFS. 마스터 맵과 맵 파일로 온디맨드 마운트를 구성하고, 와일드카드 맵으로 NFS 홈 디렉터리를 자동 마운트
다음: 패키지와 repository #
스토리지와 파일 시스템 영역을 #5부터 여기까지 마무리했습니다. 이제 시스템에 소프트웨어를 올리는 영역으로 넘어갑니다.
#8 패키지와 repository: dnf, modules, AppStream에서는 dnf로 패키지를 설치,검색,제거하고, 로컬과 원격 repository를 등록하며, RHEL 9의 AppStream과 module stream으로 같은 소프트웨어의 여러 버전을 다루는 법까지 직접 쳐 보며 정리하겠습니다.