조회수: 0
목차
fstab를 알아야 하는 이유
서버나 개발 워크스테이션에서 추가 디스크를 연결한 뒤 재부팅하면 마운트가 풀려 곤란해지는 경우가 많다. /etc/fstab은 부팅 시 디스크·파티션·네트워크 스토리지를 자동으로 마운트하는 표준 메커니즘이다. 구조를 이해하고 안전한 옵션을 고르면 부팅 실패 없이 일관된 경로를 보장할 수 있다.
기본 개념과 준비 사항
자동 마운트를 설정하기 전 다음을 확인한다.
- 디스크 식별자:
/dev/sdX1처럼 장치 이름은 변할 수 있어UUID또는LABEL사용이 권장된다. - 파일시스템 타입:
ext4,xfs,btrfs,ntfs,exfat,nfs,cifs등 - 마운트 지점: 비어 있는 디렉터리를 미리 만든다(예:
/mnt/data). - 권한과 소유자: 서비스 계정이 접근해야 하면 UID/GID를 맞춘다.
필수 명령어 예시:
lsblk -f # 디스크/파티션과 파일시스템, UUID 확인
blkid /dev/sdb1 # 특정 파티션의 UUID, TYPE 확인
sudo mkdir -p /mnt/data
sudo chown -R ubuntu:ubuntu /mnt/data
/etc/fstab 형식 완벽 이해
/etc/fstab의 각 행은 공백/탭으로 구분된 6개 필드로 구성된다.
<device> <mountpoint> <fstype> <options> <dump> <pass>
<device>:UUID=...또는LABEL=...권장<mountpoint>: 마운트 경로<fstype>: 파일시스템 타입<options>: 쉼표로 구분된 마운트 옵션<dump>: 백업 유틸리티 dump 사용 여부(대부분 0)<pass>: 부팅 시 fsck 검사 순서(루트 1, 기타 2, 검사 안 함 0)
안전한 저장을 위해 편집 전 백업한다.
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
가장 흔한 로컬 디스크 예제
ext4
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults,noatime 0 2
defaults: rw, suid, dev, exec, auto, nouser, async의 묶음noatime: 파일 접근 시간 기록 억제로 불필요한 쓰기 감소
xfs
UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy /var/lib/app xfs defaults,inode64,noatime 0 2
inode64: 대용량 디스크에서 성능 안정화
btrfs (서브볼륨 사용)
UUID=zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz /btr btrfs subvol=@,compress=zstd,noatime 0 0
compress=zstd: 투명 압축으로 공간 절약 및 I/O 감소
NVMe SSD에서 TRIM 주기화
실시간 TRIM(discard)은 일부 워크로드에서 지연을 유발할 수 있다. 주기적 fstrim이 일반적이다.
sudo systemctl enable fstrim.timer --now
교차 플랫폼 드라이브(NTFS, exFAT)
외장 드라이브를 고정 경로로 마운트하려면 사용자 권한 옵션이 중요하다.
NTFS (ntfs-3g)
UUID=aaaa-BBBB /mnt/share ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0
exFAT
UUID=cccc-DDDD /mnt/usb exfat defaults,uid=1000,gid=1000,umask=022 0 0
네트워크 스토리지 자동 마운트
네트워크가 늦게 올라오는 상황을 고려해 _netdev와 시간 제한을 사용한다.
NFS
server.example.com:/export/data /mnt/nfs nfs defaults,_netdev,timeo=600,retrans=2 0 0
SMB/CIFS(윈도우 공유)
민감 정보는 별도 크리덴셜 파일에 저장한다.
# /etc/fstab
//fileserver/share /mnt/cifs cifs credentials=/root/.smbcred,iocharset=utf8,vers=3.0,_netdev,nofail 0 0
# /root/.smbcred (권한 600)
username=USER
password=SECRET
domain=WORKGROUP
nofail: 공유가 일시적으로 내려가도 부팅을 중단하지 않음vers=3.0: 서버와 협상 가능한 최신 프로토콜 버전 지정
systemd의 지연 마운트와 자동 마운트
대용량 또는 느린 장치를 부팅 속도에 영향 없이 필요 시점에 붙이고 싶다면 다음 옵션이 유용하다.
x-systemd.automount: 접근할 때 자동 마운트x-systemd.device-timeout=30s: 장치 준비 대기 시간noauto: 기본적으로 자동 마운트하지 않음(automount와 함께 쓰면 on-demand)
예시:
UUID=... /mnt/archive ext4 noauto,x-systemd.automount,x-systemd.device-timeout=30s 0 2
바인드 마운트와 가상 파일시스템
특정 디렉터리를 다른 경로에 투영하려면 bind를 사용한다.
/opt/app/data /srv/data none bind 0 0
메모리 기반 임시 디렉터리:
tmpfs /run/cache tmpfs size=512m,mode=0755 0 0
스왑 파티션:
UUID=eeee-ffff none swap sw 0 0
안전하게 적용하는 절차(체크리스트)
- 디스크 식별 확보:
lsblk -f로 UUID 확인, 메모해 둔다. - 마운트 지점 생성:
sudo mkdir -p /mnt/<name> - 권한 설정: 서비스 사용자에게
chown -R또는chmod적용 - fstab 편집: 적절한 옵션과 pass 값 설정
- 문법 검증: 다음 두 단계로 반드시 테스트한다.
sudo mount -a # 에러가 없어야 한다
systemd-analyze verify /etc/fstab
- 실제 마운트 확인:
findmnt /mnt/<name>
df -h | grep <name>
- 재부팅 검증:
sudo reboot후findmnt로 상태 재확인
자주 발생하는 문제와 해결
- 부팅이 멈춤: 네트워크 마운트에
_netdev,nofail,x-systemd.automount를 추가한다. - 장치 이름이 바뀜:
/dev/sdb1대신UUID=를 사용한다. - 권한 오류: NTFS/exFAT에서는
uid/gid/umask로 사용자 권한을 명시한다. - CIFS 인증 실패:
/root/.smbcred권한을600으로 맞추고vers를 서버와 호환되게 조정한다. - SSD 쓰기 성능 저하:
noatime적용, 주기적fstrim활성화, 커널 메시지에서 컨트롤러 오류 확인 - fsck 대기 과다: 대용량 데이터 파티션은
pass=0으로 fsck 제외하거나 주기 관리(필요 시 수동 fsck)
보안과 운영 팁
- 크리덴셜은 전용 파일로 분리하고 권한을 최소화한다.
- 백업과 복구:
fstab백업을 형상관리(Git)하거나 구성관리 도구(Ansible 등)로 일관성 유지 - 모니터링:
systemd-mount,journalctl -b,dmesg로 부팅 시점 로그를 정기 점검 - 장치 헬스체크:
smartctl -a로 에러 카운터와 재할당 블록 감시
실전 예시: 데이터 디스크 한 방에 구성
가정: /dev/sdb1(ext4), 애플리케이션이 app 사용자로 동작
# 1) 파일시스템 생성
sudo mkfs.ext4 -F /dev/sdb1
# 2) 마운트 지점과 권한
sudo mkdir -p /mnt/data
sudo chown -R app:app /mnt/data
# 3) UUID 확인
blkid /dev/sdb1 # UUID=1234-5678-...
# 4) fstab 편집
UUID=12345678-90ab-cdef-1234-567890abcdef /mnt/data ext4 defaults,noatime,nofail 0 2
# 5) 테스트 및 확인
sudo mount -a
findmnt /mnt/data
서비스는 /mnt/data 경로를 기준으로 설정하면 이후 재부팅에도 그대로 유지된다.
마이그레이션과 롤백 전략
운영 중인 서버에서 경로를 바꾸면 애플리케이션 장애로 이어질 수 있다. 단계적으로 진행한다.
- 새 디스크를 임시 경로에 마운트(
/mnt/newdata) - rsync로 데이터 동기화(
rsync -aHAX --delete) - 서비스 중지 후 최종 동기화
- fstab에 새 경로 등록하고 구 경로 대신 새 디스크를 마운트(필요 시
bind로 호환 레이어 제공) - 검증 후 구 디스크 언마운트 및 제거
결론
/etc/fstab는 단순한 표 한 줄이 아니라 부팅 안정성과 서비스 가용성을 좌우하는 핵심 설정이다. UUID 기반 식별, 워크로드에 맞는 옵션 선택, 네트워크/지연 마운트 조합, 테스트 절차를 갖추면 재부팅·장애 상황에서도 파일시스템을 일관되게 유지할 수 있다. 위의 체크리스트와 예시를 그대로 적용해 환경에 맞게 커스터마이즈하면 안전하고 예측 가능한 자동 마운트를 구현할 수 있다.