/etc/fstab 한 줄은 여섯 칸이다. 뒤의 두 숫자가 무엇인지 모른 채 복사해 쓰다가 부팅이 멈추는 일이 잦다.
UUID=a9962bc2-... /data xfs defaults,noatime 0 0
| 칸 | 뜻 |
|---|---|
| 1 | 장치. UUID= 나 LABEL= 로 적는다 |
| 2 | 마운트 지점 |
| 3 | 파일시스템 종류 |
| 4 | 마운트 옵션 |
| 5 | dump 대상 여부. 지금은 사실상 쓰지 않으므로 0 |
| 6 | 부팅 시 fsck 순서. 루트가 1, 나머지 로컬 파일시스템이 2, 검사하지 않으면 0 |
XFS 는 부팅 시 fsck 를 하지 않으므로 6번 칸을 0 으로 둔다. 네트워크 파일시스템과 s3fs 같은 FUSE 마운트도 0 이다.
장치 이름(/dev/sdb1)을 그대로 적으면 디스크를 추가하거나 순서가 바뀔 때 다른 디스크를 가리킨다. blkid 로 UUID 를 확인해 쓴다.
sudo blkid /dev/sdb1
lsblk -f
| 옵션 | 뜻 |
|---|---|
defaults |
rw,suid,dev,exec,auto,nouser,async 묶음 |
noatime |
읽을 때 접근 시각을 갱신하지 않는다. 읽기가 많은 볼륨에서 I/O 를 줄인다 |
relatime |
접근 시각이 수정 시각보다 오래됐거나 하루가 지난 경우에만 갱신한다. 최근 커널의 기본값 |
nodiratime |
디렉터리 접근 시각만 갱신하지 않는다 |
nofail |
장치가 없어도 부팅을 계속한다 |
_netdev |
네트워크가 올라온 뒤에 마운트한다 |
ro · rw |
읽기 전용 · 읽기 쓰기 |
sync · async |
즉시 기록 · 캐시 후 기록(기본값) |
요즘 커널의 기본값이 relatime 이므로 noatime 으로 얻는 이득은 예전만큼 크지 않다. 그래도 접근 시각 갱신이 전혀 필요 없는 데이터 볼륨(HDFS 데이터 디렉터리 등)에는 noatime 을 준다. noatime 은 디렉터리 접근 시각 갱신도 함께 막으므로 nodiratime 을 같이 적을 필요가 없다.
실제 접근 시각이 갱신되는지 확인한다.
stat /data/test_file
mount | grep /data
외장 디스크나 네트워크 스토리지를 fstab 에 적어 두면 그 장치가 없을 때 부팅이 emergency mode 로 빠진다. nofail 을 주면 건너뛴다.
UUID=... /backup xfs defaults,nofail,x-systemd.device-timeout=10 0 0
x-systemd.device-timeout 을 주지 않으면 장치를 기다리는 데 기본 90초를 쓴다.
fstab 을 고친 뒤에는 재부팅 전에 반드시 검증한다.
sudo mount -a
sudo systemctl daemon-reload
findmnt --verify
mkfs.xfs -d su=256k,sw=8 /dev/sdb1
allocsize 는 지연 할당 시 한 번에 예약하는 크기다. 기본값은 커널이 파일 크기에 따라 자동 조절하며, 크기가 제각각인 파일을 많이 만드는 워크로드에서 고정값을 주면 오히려 공간이 낭비된다. 근거 없이 만지지 않는다. 스트라이프 정렬(su/sw)은 RAID 볼륨에서 의미가 있고, 대부분 mkfs 가 장치에서 읽어 자동으로 맞춘다.
umount: /data: target is busy.
누가 쓰고 있는지 먼저 찾는다.
sudo lsof +D /data
sudo fuser -vm /data
fuser 의 접근 유형 문자는 c(현재 디렉터리), e(실행 중), f(열린 파일), r(루트 디렉터리), m(매핑된 파일)이다.
정리한 뒤 해제한다.
# 쓰고 있는 프로세스를 종료
sudo fuser -km /data
sudo umount /data
fuser -k 는 해당 마운트를 쓰는 모든 프로세스에 SIGKILL 을 보낸다. 데이터베이스가 그 위에 있으면 그대로 강제 종료된다. 무엇이 죽는지 -v 로 먼저 확인한다.
정말 떼어 내야 하는데 프로세스를 죽일 수 없다면 지연 해제를 쓴다.
sudo umount -l /data
-l 은 네임스페이스에서 즉시 떼어 내고 마지막 참조가 사라질 때 실제로 정리한다. 사용 중인 프로세스는 계속 옛 파일시스템을 보게 되므로 임시 조치다. NFS 서버가 죽어 응답하지 않는 경우에는 -f 를 함께 쓴다.