物理ディスク、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) → ファイルシステム(ファイルシステムブロック)
の順でマッピングされていることが分かった。
逆にいうと、ユーザがファイルにアクセスするまでには以下の経路を辿ることとなる。
(図中、オレンジがデータの格納場所)