yassy's note

なんかかきます

物理ディスク、LVM、ファイルシステムにおける管理の最小単位

Linuxに物理ディスクを接続した際、パーティションに直接ファイルシステムを作成するのでなく、
今後の拡張を見据えてLVMの設定をすることは多い。

今回、LVM・ファイルシステムにて、データをどの単位で管理しているかを学習したのでまとめる。

物理ディスク

物理ディスクでは、アクセスの最小単位はセクタである。
基本的に1セクタ=512バイトであるが、最近は4K(4096)バイトのディスクも多い。

物理ボリューム(PV)

LVMではPV作成時に物理領域をPEの単位に分割する。RHELにおけるPEはデフォルトで4MiB。
最終的に切り出すLVサイズはPEの倍数となるため、この場合だと4MiBの倍数となる。

pvdisplayコマンドの実行結果においては、「PE Size」が該当する。

[root@localhost tmp]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               centos
  PV Size               <38.00 GiB / not usable 3.00 MiB
  Allocatable           yes
★PE Size               4.00 MiB
  Total PE              9727
  Free PE               1946
  Allocated PE          7781
  PV UUID               b2lToF-X3y0-1XM5-S1aC-qLzC-2hzl-DzlvT4

LV(論理ボリューム)

VGをLVに切り分ける際にはLE(論理エクステント)の単位で切り分ける。
通常、PEとLEは同じ大きさとなる。

この VG のうち、いくつかのまたはすべての PE は、論理エクステント (Logical Extent、LE) という単位で論理ボリューム (Logical Volume、LV) にアロケートすることができます。 各 LE は対応する PE にマップされます。 LE と PE は同じサイズになります。
http://linuxjf.osdn.jp/JFdocs/kernel-docs-2.4/LVM-HOWTO.html

したがって、今回はPEと同じ4MiBとなる。

lvdisplayコマンドの実行結果においては、「Current LE」が該当する。

つまり、以下の例では/dev/centos/rootはPE×7771となり、PEは4MiBなので30.36GBと「LV Size」に一致する。

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                uri6ss-33Vi-5MgX-Ss0e-q91j-c00D-Pt8CEm
  LV Write Access        read/write
  LV Creation host, time localhost, 2021-06-10 18:02:32 +0900
  LV Pool name           pool00
  LV Status              available
  # open                 1
  LV Size                <30.36 GiB
  Mapped size            7.52%
★Current LE             7771
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

ファイルシステム

ファイルシステムはブロックサイズの単位で管理を行う。
ext4ではデフォルトのサイズは4096バイトと設定されている。

以下の実行結果においては、「Block size」で確認できる。

[root@localhost tmp]# tune2fs -l /dev/centos/root
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          5e28f3c2-ab89-4dc1-afb9-35b1003287db
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1990656
Block count:              7957504
Reserved block count:     397875
Free blocks:              7473161
Free inodes:              1963218
First block:              0
★Block size:               4096 ※単位はbyte
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              16
RAID stripe width:        16
Flex block group size:    16
Filesystem created:       Thu Jun 10 18:02:32 2021
Last mount time:          Thu Jun 10 18:09:09 2021
Last write time:          Thu Jun 10 18:09:08 2021
Mount count:              2
Maximum mount count:      -1
Last checked:             Thu Jun 10 18:02:32 2021
Check interval:           0 (<none>)
Lifetime writes:          2798 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       1835023
Default directory hash:   half_md4
Directory Hash Seed:      afa9cd9d-9b2a-4277-9a06-0ce63f9c092d
Journal backup:           inode blocks

以上のことから、ファイルシステムが作成されるまでに、 物理ディスク(セクタ) → 物理ボリューム(PE) → 論理ボリューム(LE) → ファイルシステム(ファイルシステムブロック)
の順でマッピングされていることが分かった。

逆にいうと、ユーザがファイルにアクセスするまでには以下の経路を辿ることとなる。
(図中、オレンジがデータの格納場所)

f:id:yassy_225:20210619201417p:plain