← Documents Documentation/filesystems/ext4/blockmap.rst GitHub 원문 ↗

Linux 6.18.37 · Filesystems

Legacy Block Maps

ext4 inode의 direct·single·double·triple indirect block mapping 범위를 설명하는 전문 번역입니다.

Source pathDocumentation/filesystems/ext4/blockmap.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

blockmap.rst:1-49

legacy ext4 block map은 inode의 15개 `i_block` entry를 12 direct, 1 single-indirect, 1 double-indirect, 1 triple-indirect pointer로 사용합니다. 4KiB block에서는 index block마다 1024개 pointer가 있어 최종 범위가 file block 1074791436까지 확장됩니다.

legacy block map 단계
12 direct blockssingle indirect: `1024` blocksdouble indirect: `1024^2` blockstriple indirect: `1024^3` blocks

파일이 커질수록 추가되는 pointer 계층입니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4 | i.i_block Offset | Where It Points |
5 +=====================+==============================================================================================================================================================================================================================+
6 | 0 to 11 | Direct map to file blocks 0 to 11. |
7 +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
8 | 12 | Indirect block: (file blocks 12 to (``$block_size`` / 4) + 11, or 12 to 1035 if 4KiB blocks) |
9 | | |
10 | | +------------------------------+--------------------------------------------------------------------+ |
11 | | | Indirect Block Offset | Where It Points | |
12 | | +==============================+====================================================================+ |
13 | | | 0 to (``$block_size`` / 4) | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks) | |
14 | | +------------------------------+--------------------------------------------------------------------+ |
15 +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
16 | 13 | Double-indirect block: (file blocks ``$block_size``/4 + 12 to (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 11, or 1036 to 1049611 if 4KiB blocks) |
17 | | |
18 | | +--------------------------------+---------------------------------------------------------------------------------------------------------+ |
19 | | | Double Indirect Block Offset | Where It Points | |
20 | | +================================+=========================================================================================================+ |
21 | | | 0 to (``$block_size`` / 4) | Map to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks) | |
22 | | | | | |
23 | | | | +------------------------------+--------------------------------------------------------------------+ | |
24 | | | | | Indirect Block Offset | Where It Points | | |
25 | | | | +==============================+====================================================================+ | |
26 | | | | | 0 to (``$block_size`` / 4) | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks) | | |
27 | | | | +------------------------------+--------------------------------------------------------------------+ | |
28 | | +--------------------------------+---------------------------------------------------------------------------------------------------------+ |
29 +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
30 | 14 | Triple-indirect block: (file blocks (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12 to (``$block_size`` / 4) ^ 3 + (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12, or 1049612 to 1074791436 if 4KiB blocks) |
31 | | |
32 | | +--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ |
33 | | | Triple Indirect Block Offset | Where It Points | |
34 | | +================================+================================================================================================================================================+ |
35 | | | 0 to (``$block_size`` / 4) | Map to (``$block_size`` / 4) double indirect blocks (1024 if 4KiB blocks) | |
36 | | | | | |
37 | | | | +--------------------------------+---------------------------------------------------------------------------------------------------------+ | |
38 | | | | | Double Indirect Block Offset | Where It Points | | |
39 | | | | +================================+=========================================================================================================+ | |
40 | | | | | 0 to (``$block_size`` / 4) | Map to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks) | | |
41 | | | | | | | | |
42 | | | | | | +------------------------------+--------------------------------------------------------------------+ | | |
43 | | | | | | | Indirect Block Offset | Where It Points | | | |
44 | | | | | | +==============================+====================================================================+ | | |
45 | | | | | | | 0 to (``$block_size`` / 4) | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks) | | | |
46 | | | | | | +------------------------------+--------------------------------------------------------------------+ | | |
47 | | | | +--------------------------------+---------------------------------------------------------------------------------------------------------+ | |
48 | | +--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ |
49 +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
50

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

direct, indirect와 double-indirect mapping

1-29

inode의 `i.i_block` offset 0~11은 file block 0~11을 직접 가리킵니다. 별도 index block을 거치지 않는 12개의 direct map entry입니다.

offset 12는 indirect block을 가리킵니다. 이 block에는 4-byte block pointer가 `$block_size / 4`개 들어가며 file block 12부터 `($block_size / 4) + 11`까지 나타냅니다. 4KiB block이면 pointer 1024개로 file block 12~1035를 매핑합니다.

offset 13은 double-indirect block을 가리킵니다. 첫 단계에서 indirect block `$block_size / 4`개를 가리키고, 각 indirect block이 다시 data block pointer `$block_size / 4`개를 담습니다.

double-indirect 범위는 file block `$block_size / 4 + 12`부터 `($block_size / 4)^2 + ($block_size / 4) + 11`까지입니다. 4KiB block에서는 1036~1049611입니다.

`i.i_block` direct·indirect 범위
Offset단계일반 범위4KiB block 범위
0~11Directfile blocks 0~110~11
12Single indirect12~`$block_size/4 + 11`12~1035
13Double indirect`$block_size/4 + 12`~`($block_size/4)^2 + $block_size/4 + 11`1036~1049611
Indirect block entry 수4-byte pointer`$block_size / 4`1024

원문의 중첩 ASCII 표를 pointer 단계와 file block 범위로 정리했습니다.

.. SPDX-License-Identifier: GPL-2.0

+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| i.i_block Offset    | Where It Points                                                                                                                                                                                                              |
+=====================+==============================================================================================================================================================================================================================+
| 0 to 11             | Direct map to file blocks 0 to 11.                                                                                                                                                                                           |
+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 12                  | Indirect block: (file blocks 12 to (``$block_size`` / 4) + 11, or 12 to 1035 if 4KiB blocks)                                                                                                                                 |
|                     |                                                                                                                                                                                                                              |
|                     | +------------------------------+--------------------------------------------------------------------+                                                                                                                        |
|                     | | Indirect Block Offset        | Where It Points                                                    |                                                                                                                        |
|                     | +==============================+====================================================================+                                                                                                                        |
|                     | | 0 to (``$block_size`` / 4)   | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)   |                                                                                                                        |
|                     | +------------------------------+--------------------------------------------------------------------+                                                                                                                        |
+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 13                  | Double-indirect block: (file blocks ``$block_size``/4 + 12 to (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 11, or 1036 to 1049611 if 4KiB blocks)                                                                     |
|                     |                                                                                                                                                                                                                              |
|                     | +--------------------------------+---------------------------------------------------------------------------------------------------------+                                                                                 |
|                     | | Double Indirect Block Offset   | Where It Points                                                                                         |                                                                                 |
|                     | +================================+=========================================================================================================+                                                                                 |
|                     | | 0 to (``$block_size`` / 4)     | Map to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks)                                      |                                                                                 |
|                     | |                                |                                                                                                         |                                                                                 |
|                     | |                                | +------------------------------+--------------------------------------------------------------------+   |                                                                                 |
|                     | |                                | | Indirect Block Offset        | Where It Points                                                    |   |                                                                                 |
|                     | |                                | +==============================+====================================================================+   |                                                                                 |
|                     | |                                | | 0 to (``$block_size`` / 4)   | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)   |   |                                                                                 |
|                     | |                                | +------------------------------+--------------------------------------------------------------------+   |                                                                                 |
|                     | +--------------------------------+---------------------------------------------------------------------------------------------------------+                                                                                 |
+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

triple-indirect mapping

30-49

`i.i_block` offset 14는 triple-indirect block을 가리킵니다. 첫 block의 entry는 double-indirect block을, 그 다음 단계는 indirect block을, 마지막 단계는 실제 data block을 가리킵니다.

각 단계의 entry 수는 `$block_size / 4`입니다. 4KiB block에서는 단계마다 1024개의 pointer가 있으므로 세 단계가 최대 `1024^3`개의 data block을 확장해 가리킵니다.

triple-indirect가 담당하는 file block 범위는 `($block_size / 4)^2 + ($block_size / 4) + 12`부터 `($block_size / 4)^3 + ($block_size / 4)^2 + ($block_size / 4) + 12`까지입니다.

4KiB block 기준 범위는 1049612~1074791436입니다. 이 값은 앞선 12 direct block, 1024 single-indirect block, 1024² double-indirect block 뒤에 이어집니다.

triple-indirect pointer 경로
`i.i_block[14]`triple-indirect block의 `$block_size/4` entrydouble-indirect block의 `$block_size/4` entryindirect block의 `$block_size/4` entry실제 data block

offset 14에서 실제 file data block까지 세 index 단계를 통과합니다.

| 14                  | Triple-indirect block: (file blocks (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12 to (``$block_size`` / 4) ^ 3 + (``$block_size`` / 4) ^ 2 + (``$block_size`` / 4) + 12, or 1049612 to 1074791436 if 4KiB blocks)   |
|                     |                                                                                                                                                                                                                              |
|                     | +--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+                                          |
|                     | | Triple Indirect Block Offset   | Where It Points                                                                                                                                |                                          |
|                     | +================================+================================================================================================================================================+                                          |
|                     | | 0 to (``$block_size`` / 4)     | Map to (``$block_size`` / 4) double indirect blocks (1024 if 4KiB blocks)                                                                      |                                          |
|                     | |                                |                                                                                                                                                |                                          |
|                     | |                                | +--------------------------------+---------------------------------------------------------------------------------------------------------+   |                                          |
|                     | |                                | | Double Indirect Block Offset   | Where It Points                                                                                         |   |                                          |
|                     | |                                | +================================+=========================================================================================================+   |                                          |
|                     | |                                | | 0 to (``$block_size`` / 4)     | Map to (``$block_size`` / 4) indirect blocks (1024 if 4KiB blocks)                                      |   |                                          |
|                     | |                                | |                                |                                                                                                         |   |                                          |
|                     | |                                | |                                | +------------------------------+--------------------------------------------------------------------+   |   |                                          |
|                     | |                                | |                                | | Indirect Block Offset        | Where It Points                                                    |   |   |                                          |
|                     | |                                | |                                | +==============================+====================================================================+   |   |                                          |
|                     | |                                | |                                | | 0 to (``$block_size`` / 4)   | Direct map to (``$block_size`` / 4) blocks (1024 if 4KiB blocks)   |   |   |                                          |
|                     | |                                | |                                | +------------------------------+--------------------------------------------------------------------+   |   |                                          |
|                     | |                                | +--------------------------------+---------------------------------------------------------------------------------------------------------+   |                                          |
|                     | +--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+                                          |
+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+