파일시스템과 inode
파일 이름과 파일 자체는 다른 것이고, 그 사이를 잇는 것이 inode 다
inode 가 담는 것
| 담는 것 | 담지 않는 것 |
|---|---|
| 파일 크기 | 파일 이름 |
| 소유자와 그룹 | |
| 권한 | |
| 시각 정보 (수정, 접근, 변경) | |
| 링크 수 | |
| 데이터 블록 위치 |
이름이 없다는 것이 핵심입니다. 이름은 디렉터리가 들고 있습니다. 디렉터리는 "이름과 inode 번호의 목록"입니다.
| 구조 | 내용 |
|---|---|
| 디렉터리 항목 | "report.txt" 는 inode 12345 |
| inode 12345 | 크기, 권한, 데이터 위치 |
| 데이터 블록 | 실제 내용 |
이 구조가 설명하는 것들
| 현상 | 이유 |
|---|---|
| 하드 링크로 같은 파일에 여러 이름 | 여러 디렉터리 항목이 같은 inode 를 가리킨다 |
| 파일을 지워도 프로세스가 계속 읽는다 | 링크 수가 0 이 되어도 열어둔 프로세스가 있으면 실제 삭제를 미룬다 |
| 이름을 바꾸는 것이 빠르다 | 디렉터리 항목만 고친다. 데이터는 그대로 |
| 디스크 공간은 남는데 파일을 못 만든다 | inode 가 소진됐다 |
네 번째가 실무에서 당황하는 상황입니다. 작은 파일을 수백만 개 만들면 용량은 남아도 inode 가 먼저 고갈됩니다.
하드 링크와 심볼릭 링크
| 항목 | 하드 링크 | 심볼릭 링크 |
|---|---|---|
| 가리키는 것 | 같은 inode | 경로 문자열 |
| 원본을 지우면 | 남은 이름으로 접근 가능 | 깨진 링크가 된다 |
| 다른 파일시스템 | 불가 | 가능 |
| 디렉터리 | 불가 | 가능 |
컨테이너의 계층 파일시스템
컨테이너 이미지는 여러 층으로 쌓이고, 아래 층은 읽기 전용입니다.
| 층 | 성격 |
|---|---|
| 이미지 층들 | 읽기 전용. 여러 컨테이너가 공유한다 |
| 컨테이너 층 | 쓰기 가능. 컨테이너마다 하나 |
읽기는 위에서 아래로 찾아 내려가고, 쓰기는 위 층으로 복사한 뒤 수정합니다. 이것이 쓰기 시 복사입니다.
| 얻는 것 | 내용 |
|---|---|
| 이미지 공유 | 같은 기반 이미지를 쓰는 컨테이너가 그 층을 공유한다 |
| 빠른 시작 | 복사 없이 층을 겹쳐 올리기만 한다 |
| 작은 저장 공간 | 바뀐 것만 컨테이너 층에 남는다 |
| 대가 | 내용 |
|---|---|
| 첫 쓰기가 느리다 | 큰 파일을 조금 고쳐도 전체를 복사한다 |
| 층이 많으면 읽기가 느리다 | 아래로 찾아 내려가는 비용 |
| 삭제가 실제 삭제가 아니다 | 위 층에 "지워짐" 표시만 남아 이미지 크기가 줄지 않는다 |
세 번째가 이미지 크기를 줄이려는 사람이 자주 만나는 문제입니다. 한 단계에서 큰 파일을 넣고 다음 단계에서 지우면, 지워졌다는 표시만 추가되고 원본은 아래 층에 남습니다. 같은 단계 안에서 넣고 지워야 합니다.