LabHub

스토리지와 마운트 · 블록 장치와 파일시스템 · 실습

파일 위에 파일시스템 만들기

LabHub 에서 이어서 보기

목표

평범한 파일 위에 진짜 ext4 파일시스템을 만들어, 슈퍼블록을 읽고 조정하고 내용을 들여다봅니다. 마지막에는 그 파일시스템을 마운트하는 fstab 줄을 UUID 로 작성합니다.

왜 중요한가

mkfs 는 대상이 블록 장치인지 평범한 파일인지 구분하지 않습니다. 그저 정해진 구조를 써 넣을 뿐입니다. 이 성질 덕분에 특권 없이도 파일시스템 내부를 학습할 수 있고, 실무에서도 이미지 파일을 만들어 검사하는 일이 흔합니다. 특히 inode 개수는 포맷 시점에 고정되어 나중에 늘릴 수 없다는 사실과 예약 블록 기본 5% 가 대용량 디스크에서 얼마나 낭비인지는 숫자로 봐야 실감이 납니다.

이 환경에는 mount 권한이 없으므로 실제로 붙이지는 않습니다. 대신 fstab 을 정확히 쓰는 것을 채점합니다 — 현장에서도 사고는 mount 명령이 아니라 fstab 한 줄에서 납니다.

단계

1. /root/disk 디렉터리를 만들고 /root/disk/lab.img256MiB 희소 파일로 만드세요. 그리고 논리 크기와 실제 점유 크기를 각각 한 줄씩 /root/disk/sparse.txt 에 적으세요(단위는 바이트, 논리 크기가 먼저).
2. 그 파일을 라벨 LABHUB 로 ext4 포맷하세요.
3. 파일시스템 UUID 만 한 줄로 /root/disk/uuid.txt 에 적으세요.
4. 슈퍼블록에서 블록 크기 / inode 개수 / 예약 블록 개수 세 값을 뽑아 /root/disk/super.txt 에 다음 형식으로 적으세요.
BLOCK_SIZE=<값> / INODE_COUNT=<값> / RESERVED_BLOCKS=<값>
5. 예약 블록 비율을 1% 로 낮추고, 변경 후의 예약 블록 개수를 /root/disk/reserved-after.txt 에 숫자 한 줄로 적으세요. 4번보다 작아야 합니다.
6. debugfs 로 이미지 루트에 data 디렉터리를 만들고, 루트 목록을 /root/disk/rootls.txt 로 저장하세요. 목록에 lost+founddata 가 모두 있어야 합니다.
7. /root/disk/fstab.line 에 이 파일시스템을 /mnt/labdata 에 마운트하는 fstab 줄을 한 줄 작성하세요. 장치는 UUID= 표기, 타입은 ext4, 옵션에는 defaults, noatime, nofail 이 모두 포함, dump 는 0, pass 는 2 여야 합니다.
8. /root/disk/report.txt 를 다음 5줄로 만드세요.
LABEL=LABHUB / UUID=<3번 값> / BLOCK_SIZE=<4번 값> / INODE_COUNT=<4번 값> / MOUNTPOINT=/mnt/labdata

참고

단계 8개

  1. 희소 이미지 파일 만들기
  2. ext4 포맷하기
  3. UUID 추출
  4. 슈퍼블록 읽기
  5. 예약 블록 비율 변경
  6. 이미지 안 들여다보기
  7. fstab 줄 작성
  8. 이미지 요약 보고서