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

참고

희소 이미지 파일 만들기

/root/disk 디렉터리를 만들고 /root/disk/lab.img256MiB 희소 파일로 만드세요. 그리고 논리 크기와 실제 점유 크기를 각각 한 줄씩 /root/disk/sparse.txt 에 적으세요(단위는 바이트, 논리 크기가 먼저).

truncate 는 실제 블록을 할당하지 않고 크기만 지정합니다. du 의 두 가지 크기를 비교해 보세요.

ext4 포맷하기

그 파일을 라벨 LABHUB 로 ext4 포맷하세요.

블록 장치가 아니라고 경고가 나오면 강제 옵션이 필요합니다. 라벨을 지정하는 옵션도 함께 쓰세요.

UUID 추출

파일시스템 UUID 만 한 줄로 /root/disk/uuid.txt 에 적으세요.

blkid 는 파일에도 동작합니다. 출력에서 UUID 값만 뽑으려면 형식 지정 옵션이나 문자열 처리를 쓰세요.

슈퍼블록 읽기

슈퍼블록에서 블록 크기 / inode 개수 / 예약 블록 개수 세 값을 뽑아 /root/disk/super.txt 에 다음 형식으로 적으세요. BLOCK_SIZE=<값> / INODE_COUNT=<값> / RESERVED_BLOCKS=<값>

dumpe2fs 의 -h 는 슈퍼블록 정보만 출력합니다. 세 항목의 값이 각각 무엇을 뜻하는지 생각해 보세요.

예약 블록 비율 변경

예약 블록 비율을 1% 로 낮추고, 변경 후의 예약 블록 개수를 /root/disk/reserved-after.txt 에 숫자 한 줄로 적으세요. 4번보다 작아야 합니다.

tune2fs 의 -m 은 퍼센트로 지정합니다. 변경 후 dumpe2fs 로 다시 확인하세요.

이미지 안 들여다보기

debugfs 로 이미지 루트에 data 디렉터리를 만들고, 루트 목록을 /root/disk/rootls.txt 로 저장하세요. 목록에 lost+founddata 가 모두 있어야 합니다.

debugfs 는 -R 로 명령 하나를 실행합니다. 쓰기 작업에는 별도 옵션이 필요합니다.

fstab 줄 작성

/root/disk/fstab.line 에 이 파일시스템을 /mnt/labdata 에 마운트하는 fstab 줄을 한 줄 작성하세요. 장치는 UUID= 표기, 타입은 ext4, 옵션에는 defaults, noatime, nofail 이 모두 포함, dump 는 0, pass 는 2 여야 합니다.

여섯 필드를 공백으로 구분합니다. 장치는 UUID= 표기로, 옵션에는 세 가지가 들어가야 합니다.

이미지 요약 보고서

/root/disk/report.txt 를 다음 5줄로 만드세요. LABEL=LABHUB / UUID=<3번 값> / BLOCK_SIZE=<4번 값> / INODE_COUNT=<4번 값> / MOUNTPOINT=/mnt/labdata

앞 단계에서 뽑은 값들을 키=값으로 모으면 됩니다. 숫자는 단위 없이 적으세요.