Red Hat Certified System Administrator (RHCSA) #7 파일 시스템: XFS, ext4, mount/fstab, NFS, AutoFS

9 분 소요

#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/lv01

ext4: mkfs.ext4 #

ext4가 필요한 작업이라면 mkfs.ext4를 씁니다.

sudo mkfs.ext4 /dev/vg01/lv02

mkfs -t xfsmkfs -t ext4 형태로도 같은 작업을 할 수 있습니다. 시험에서는 어느 쪽을 써도 결과만 맞으면 됩니다.

sudo mkfs -t xfs /dev/vg01/lv01
sudo mkfs -t ext4 /dev/vg01/lv02

만들어진 파일 시스템 확인 #

lsblk -f는 각 디바이스의 파일 시스템 타입과 UUID, LABEL을 한눈에 보여 줍니다. 마운트와 fstab 작업의 출발점이 되는 명령입니다.

lsblk -f
NAME            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-abcdef012345

blkid로도 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” 오류가 나면 그 디렉터리 안에 들어가 있거나, 그 안의 파일을 열어 둔 프로세스가 있는 것입니다. lsoffuser로 누가 쓰는지 확인합니다.

sudo lsof /data
sudo fuser -vm /data

마운트 상태 확인: findmnt #

findmnt는 현재 마운트 트리를 깔끔하게 보여 줍니다. 특정 지점만 보려면 인자로 줍니다.

findmnt
findmnt /data

mount 명령을 인자 없이 치거나 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 -fblkid로 확인합니다.

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 0

LV처럼 이름이 안정적인 경우에는 디바이스 매퍼 경로를 그대로 써도 무방합니다.

/dev/vg01/lv01  /data  xfs  defaults  0 0

LABEL로 등록하기 #

파일 시스템에 라벨을 붙여 두면 fstab에서 LABEL=로 참조할 수 있습니다. XFS는 xfs_admin -L, ext4는 e2label로 라벨을 지정합니다.

sudo xfs_admin -L data /dev/vg01/lv01
sudo e2label /dev/vg01/lv02 logs
LABEL=data  /data  xfs   defaults  0 0
LABEL=logs  /logs  ext4  defaults  0 0

mount -a로 검증하기 #

fstab을 고친 뒤에는 재부팅하기 전에 반드시 검증해야 합니다. mount -a는 fstab의 모든 항목 중 아직 마운트되지 않은 것을 마운트합니다. 오류 없이 끝나고 findmnt로 마운트가 보이면 성공입니다.

sudo mount -a
findmnt /data

오류가 나면 fstab의 그 줄에 오타가 있거나 디바이스,옵션이 잘못된 것입니다. 이 자리에서 잡아야 부팅 실패를 막습니다.

defaults 옵션의 의미 #

defaultsrw,suid,dev,exec,auto,nouser,async를 묶은 표준 옵션 세트입니다. 대부분의 일반 마운트에는 defaults만으로 충분합니다. 필요하면 추가 옵션을 콤마로 덧붙입니다.

LABEL=data  /data  xfs  defaults,noexec  0 0

nofail: 디바이스가 없어도 부팅을 막지 않기 #

fstab에 등록한 디바이스가 부팅 시점에 없으면, 기본 동작은 부팅을 멈추고 응급 모드로 떨어지는 것입니다. NFS나 USB처럼 항상 존재한다고 보장할 수 없는 디바이스에는 nofail을 주어, 없을 때 조용히 건너뛰게 합니다.

LABEL=backup  /backup  xfs  defaults,nofail  0 0

nofail은 “이 마운트가 실패해도 시스템 부팅은 계속한다"는 안전장치입니다. 외부 스토리지 항목에는 붙여 두는 것이 좋습니다.

NFS 클라이언트 마운트 #

NFS는 네트워크 너머의 디렉터리를 내 시스템에 마운트해 로컬 디렉터리처럼 쓰는 방식입니다. RHCSA는 클라이언트 쪽 마운트를 주로 묻습니다. 서버 구성이 아니라, 주어진 NFS 서버의 공유를 내 시스템에 붙이는 작업입니다.

클라이언트 패키지 #

NFS 클라이언트 도구는 nfs-utils 패키지가 제공합니다. 보통 기본 설치되어 있지만 없으면 설치합니다.

sudo dnf install -y nfs-utils

showmount로 공유 확인 #

서버가 어떤 디렉터리를 export하는지 showmount -e로 확인합니다.

showmount -e nfs.example.com
Export 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/shared

fstab으로 영구 마운트 #

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/shared

AutoFS 온디맨드 마운트 #

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으로 같은 소프트웨어의 여러 버전을 다루는 법까지 직접 쳐 보며 정리하겠습니다.

X