스토리지와 마운트 · 마운트와 /etc/fstab 읽고 쓰기 · 실습
fstab 감사하고 고치기
목표
망가진 fstab 을 규칙에 따라 감사하고, 고치고, 직접 검증 스크립트를 작성합니다.
왜 중요한가
fstab 은 시스템에서 가장 위험한 파일 중 하나입니다. 잘못 쓰면 부팅 도중 멈추고, 콘솔이 없는 클라우드 인스턴스라면 손쓸 방법이 없습니다. 특히 여섯 번째 필드인 pass(fsck 순서) 가 자주 틀립니다 — 루트가 아닌데 1 을 주거나, 네트워크 파일시스템에 0 이 아닌 값을 주면 부팅이 멈춥니다. 그리고 nofail 이 없으면 데이터 디스크 하나가 죽었을 때 서버 전체가 안 뜹니다. 실무에서는 재부팅 전에 반드시 검증합니다 — 재부팅해서 확인하는 것은 확인이 아니라 도박입니다.
이 실습에서 쓰는 규칙
- 규칙 A: 모든 항목 줄은 정확히 6개 필드를 가져야 한다
- 규칙 B:
pass값은 루트(/)만1, 그 외 로컬 파일시스템은2, 네트워크/가상 파일시스템(nfs,nfs4,tmpfs)은0 - 규칙 C: 같은 마운트 지점이 두 번 나오면 안 된다
- 규칙 D:
dump와pass는 숫자여야 한다
단계
1. /root/fstab 디렉터리를 만들고 /opt/fixtures/st-fstab/fstab.broken 을 /root/fstab/work.tab 으로 복사하세요.
2. 주석과 빈 줄을 제외한 각 항목을 장치,마운트지점,타입,옵션,dump,pass CSV 로 변환해 /root/fstab/fields.csv 로 저장하세요. 필드가 모자란 줄은 있는 것만 적으세요.
3. 위 네 규칙을 어긴 줄 번호를 오름차순으로 한 줄에 하나씩 /root/fstab/audit.txt 에 적으세요. 줄 번호는 주석 포함 파일 맨 위부터 1로 셉니다.
4. 모든 위반을 고친 /root/fstab/fixed.tab 을 만드세요. 원본의 정상 항목은 그대로 유지하고, 필드가 모자란 줄은 0 2 를 채우고, 중복된 마운트 지점 중 나중 것은 /var2 로 옮기고, 잘못된 pass 값은 규칙 B 에 맞게 고치세요.
5. fixed.tab 에서 장치 경로(/dev/...)로 적힌 항목을 UUID=1a2b3c4d-0004-4000-8000-000000000004 표기로 바꾸세요.
6. fixed.tab 에서 루트가 아닌 모든 로컬 항목의 옵션에 nofail 을 추가하고, /tmp 항목의 옵션에 noexec, nosuid, nodev 를 모두 추가하세요.
7. fixed.tab 의 NFS 항목 옵션에 _netdev, soft, timeo=600, retrans=2 가 모두 들어가도록 하세요.
8. /root/fstab/validate.sh 를 작성하세요. 첫 번째 인자로 fstab 파일 경로를 받아 규칙 A~D 를 검사하고, 위반이 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 값으로 끝나야 합니다. 채점기가 fixed.tab(통과해야 함)과 fstab.broken(실패해야 함) 양쪽으로 실행합니다.
참고
awk 'NF && $1 !~ /^#/ {print}'로 주석과 빈 줄을 걸러냅니다.- 줄 번호가 필요하면
grep -n또는awk '{print NR": "$0}'를 씁니다. - 8번 스크립트는 bash 로 작성하고 실행 권한은 없어도 됩니다(채점기가
bash validate.sh <파일>로 실행). - 흔한 실수 1: 3번에서 중복 장치를 문제로 세는 경우. 규칙은 마운트 지점 중복입니다.
- 흔한 실수 2: 8번 스크립트가 인자를 안 받고 고정 경로를 읽는 경우. 반드시 첫 번째 인자를 쓰세요.
단계 8개
- 작업 사본 만들기
- 필드를 CSV 로 분해
- 규칙 위반 줄 찾기
- 수정본 제출
- 장치명을 UUID 표기로
- 안전 옵션 추가
- NFS 항목 작성
- 검증 스크립트 작성