5.2 LVM
参考: Archwiki https://wiki.archlinux.jp/index.php/LVM
LVM: Logical Volume Management(論理ボリューム管理)
論理ボリューム: 仮想的なパーティション
パーティションの下記の制約を回避する
- パーティションのサイズ変更ができない
- 別のディスクにパーティションを移動させることができない
- ディスクのサイズを超える大きさのパーティションは作成できない
5.2.1 LVMの仕組み
-
PV: Physical Volume (物理ボリューム)
- 1台のハードディスクや1つのパーティション
-
PE: Physical Extent (物理エクステント)
- 物理ボリュームを構成する一定サイズ
-
VG: Volume Group (ボリュームグループ)
- 1つ以上の物理ボリュームを束ねたもの
- 仮想的なディスクといえる
-
LV: Logical Volume (論理ボリューム)
- ボリュームグループ内で物理エクステントから論理ボリュームが構成される
- 仮想的なパーティションといえる
5.2.2 LVMの作成
dd if=/dev/zero of=~/fs/loop0 bs=1M count=2048
sudo losetup /dev/loop0 ~/fs/loop0
LVM用のパーティションの準備
パーティションのタイプをLinux LVM
にしておく必要がある
sudo gdisk /dev/loop0
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): h
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): l
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
3000 ONIE boot 3001 ONIE config 4100 PowerPC PReP boot
4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8302 Linux /home 8400 Intel Rapid Start 8e00 Linux LVM
a500 FreeBSD disklabel a501 FreeBSD boot a502 FreeBSD swap
a503 FreeBSD UFS a504 FreeBSD ZFS a505 FreeBSD Vinum/RAID
a580 Midnight BSD data a581 Midnight BSD boot a582 Midnight BSD swap
a583 Midnight BSD UFS a584 Midnight BSD ZFS a585 Midnight BSD Vinum
a800 Apple UFS a901 NetBSD swap a902 NetBSD FFS
a903 NetBSD LFS a904 NetBSD concatenated a905 NetBSD encrypted
a906 NetBSD RAID ab00 Apple boot af00 Apple HFS/HFS+
af01 Apple RAID af02 Apple RAID offline af03 Apple label
af04 AppleTV recovery af05 Apple Core Storage be00 Solaris boot
bf00 Solaris root bf01 Solaris /usr & Mac Z bf02 Solaris swap
bf03 Solaris backup bf04 Solaris /var bf05 Solaris /home
bf06 Solaris alternate se bf07 Solaris Reserved 1 bf08 Solaris Reserved 2
bf09 Solaris Reserved 3 bf0a Solaris Reserved 4 bf0b Solaris Reserved 5
c001 HP-UX data c002 HP-UX service ea00 Freedesktop $BOOT
eb00 Haiku BFS ed00 Sony system partitio ed01 Lenovo system partit
ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition
fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p
fd00 Linux RAID
Command (? for help):
これ
8e00 Linux LVM
sudo parted /dev/loop0
GNU Parted 3.1
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
(parted) mklabel gpt
(parted)
(parted) mkpart "Linux LVM" 0% 50%
(parted) mkpart "Linux LVM" 50% 100%
(parted)
(parted) p
Model: Loopback device (loopback)
Disk /dev/loop0: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1074MB 1073MB Linux LVM
2 1074MB 2146MB 1073MB Linux LVM
(parted) q
Information: You may need to update /etc/fstab.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
|-sda1 8:1 0 200M 0 part /boot/efi
`-sda2 8:2 0 19.8G 0 part /
loop0 7:0 0 2G 0 loop
|-loop0p1 259:0 0 1023M 0 loop
`-loop0p2 259:1 0 1023M 0 loop
物理ボリュームの初期化
sudo pvcreate /dev/loop0p1 /dev/loop0p2
sudo: pvcreate: command not found
無いので入れる
yum provides pvcreate
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: ftp-srv2.kddilabs.jp
* updates: ftp-srv2.kddilabs.jp
7:lvm2-2.02.187-6.el7.x86_64 : Userland logical volume management tools
Repo : base
Matched from:
Filename : /usr/sbin/pvcreate
sudo yum install -y lvm2
sudo pvcreate /dev/loop0p1 /dev/loop0p2
Physical volume "/dev/loop0p1" successfully created.
Physical volume "/dev/loop0p2" successfully created.
ボリュームグループの作成
sudo vgcreate sample_vg /dev/loop0p1 /dev/loop0p2
Volume group "sample_vg" successfully created
論理ボリュームの作成
sudo lvcreate -L 500M -n lv01 sample_vg
Logical volume "lv01" created.
論理ボリュームの状態確認
sudo lvscan
ACTIVE '/dev/sample_vg/lv01' [500.00 MiB] inherit
ファイルシステムの作成とマウント
sudo mkfs.ext4 /dev/sample_vg/lv01
sudo mkdir /mnt/lv01
sudo mount /dev/sample_vg/lv01 /mnt/lv01
grep -e lv /proc/mounts
/dev/mapper/sample_vg-lv01 /mnt/lv01 ext4 rw,seclabel,relatime,data=ordered 0 0
device mapper
ls -l /dev/mapper/sample_vg-lv01
lrwxrwxrwx. 1 root root 7 Dec 16 14:25 /dev/mapper/sample_vg-lv01 -> ../dm-0
/dev/${VG名}/${LV名}
は/dev/mapper/${VG名}-${LV名}
にマッピングされる/dev/mapper/sample_vg-lv01
は/dev/dm-0
へのsymlink
5.2.3 LVMの管理
物理ボリュームの情報表示
pvdisplay
: 詳細
sudo pvdisplay /dev/loop0p1
--- Physical volume ---
PV Name /dev/loop0p1
VG Name sample_vg
PV Size 1023.00 MiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 130
Allocated PE 125
PV UUID Wp1PwK-KKQS-Haim-qkmQ-1bS4-mdlW-cL3s7a
- どのVGを構成しているか
- Physical Extentのサイズ
- etc.
pvscan
: 簡潔な一覧
sudo pvscan
PV /dev/loop0p1 VG sample_vg lvm2 [1020.00 MiB / 520.00 MiB free]
PV /dev/loop0p2 VG sample_vg lvm2 [1020.00 MiB / 1020.00 MiB free]
Total: 2 [1.99 GiB] / in use: 2 [1.99 GiB] / in no VG: 0 [0 ]
ボリュームグループの拡張
dd if=/dev/zero of=~/fs/loop1 bs=1M count=512
sudo losetup /dev/loop1 ~/fs/loop1
sudo vgextend sample_vg /dev/loop1
Volume group "sample_vg" successfully extended
物理ボリュームの移動
sudo pvmove /dev/loop0p1 /dev/loop1
/dev/loop0p1: Moved: 4.00%
/dev/loop0p1: Moved: 100.00%
ボリュームグループの縮小
sudo vgreduce sample_vg /dev/loop0p1
Removed "/dev/loop0p1" from volume group "sample_vg"
sudo pvscan
PV /dev/loop0p2 VG sample_vg lvm2 [1020.00 MiB / 1020.00 MiB free]
PV /dev/loop1 VG sample_vg lvm2 [508.00 MiB / 8.00 MiB free]
PV /dev/loop0p1 lvm2 [1023.00 MiB]
Total: 3 [2.49 GiB] / in use: 2 [1.49 GiB] / in no VG: 1 [1023.00 MiB]
ボリュームグループの情報表示
sudo vgdisplay
--- Volume group ---
VG Name sample_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1.49 GiB
PE Size 4.00 MiB
Total PE 382
Alloc PE / Size 125 / 500.00 MiB
Free PE / Size 257 / 1.00 GiB
VG UUID ofkWLQ-lHLm-4jxz-BQuk-LK1A-eESK-Z8NoUQ
論理ボリュームの情報表示
sudo lvdisplay
--- Logical volume ---
LV Path /dev/sample_vg/lv01
LV Name lv01
VG Name sample_vg
LV UUID O7UHNc-mDvg-bCvf-SBN8-UU2l-mypp-mJU2bL
LV Write Access read/write
LV Creation host, time lpic2-study-1, 2020-12-16 14:44:42 +0000
LV Status available
# open 0
LV Size 500.00 MiB
Current LE 125
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
論理ボリュームの拡張
sudo lvextend -L +300M /dev/sample_vg/lv01
Size of logical volume sample_vg/lv01 changed from 500.00 MiB (125 extents) to 800.00 MiB (200 extents).
Logical volume sample_vg/lv01 successfully resized.
論理ボリュームは広がるがファイルシステムまで追従してくれるわけではない
ファイルシステムの整合性をチェックした後、resize2fs
でリサイズする必要がある
sudo e2fsck -f /dev/sample_vg/lv01
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sample_vg/lv01: 11/128016 files (0.0% non-contiguous), 26684/512000 blocks
sudo resize2fs /dev/sample_vg/lv01
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/sample_vg/lv01 to 819200 (1k) blocks.
The filesystem on /dev/sample_vg/lv01 is now 819200 blocks long.
論理ボリュームの縮小
sudo lvreduce -L -300M /dev/sample_vg/lv01
WARNING: Reducing active logical volume to 500.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce sample_vg/lv01? [y/n]: y
Size of logical volume sample_vg/lv01 changed from 800.00 MiB (200 extents) to 500.00 MiB (125 extents).
Logical volume sample_vg/lv01 successfully resized.
データはぶっ壊れる
論理ボリュームの拡張 — XFSの場合
sudo mkfs.xfs -f /dev/sample_vg/lv01
meta-data=/dev/sample_vg/lv01 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
sudo lvextend -L +300M /dev/sample_vg/lv01
Size of logical volume sample_vg/lv01 changed from 500.00 MiB (125 extents) to 800.00 MiB (200 extents).
Logical volume sample_vg/lv01 successfully resized.
sudo xfs_repair /dev/sample_vg/lv01
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
XFSのサイズ拡張の場合、マウントしている必要があるよう
sudo xfs_growfs /dev/sample_vg/lv01
xfs_growfs: /dev/sample_vg/lv01 is not a mounted XFS filesystem
sudo mount /dev/sample_vg/lv01 /mnt/lv01
sudo xfs_growfs /dev/sample_vg/lv01
meta-data=/dev/mapper/sample_vg-lv01 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 128000 to 204800data blocks changed from 128000 to 204800
スナップショットの作成
アンマウントせずにバックアップを取る技術
論理ボリュームの10%~20%くらい目安
sudo lvcreate -s -L 100M -n snap0 /dev/sample_vg/lv01
Logical volume "snap0" created.
ls -l /dev/sample_vg/
total 0
lrwxrwxrwx. 1 root root 7 Dec 16 15:17 lv01 -> ../dm-0
lrwxrwxrwx. 1 root root 7 Dec 16 15:17 snap0 -> ../dm-3
スナップショット領域は丸コピーではない
ある時点での論理ボリュームの状態を起点として、変更時に変更前のものをcopy on writeする感じ
スナップショットをさらにdumpしてバックアップ完了
dump 0uf /dev/loop2 /dev/sample_vg/snap0
論理ボリュームの削除
sudo lvremove /dev/sample_vg/snap0
Do you really want to remove active logical volume sample_vg/snap0? [y/n]: y
Logical volume "snap0" successfully removed
sudo umount /mnt/lv01
sudo lvremove /dev/sample_vg/lv01
Do you really want to remove active logical volume sample_vg/lv01? [y/n]: y
Logical volume "lv01" successfully removed
ボリュームグループの削除
sudo vgremove sample_vg
Volume group "sample_vg" successfully removed
物理ボリュームの削除
sudo pvremove /dev/loop0p1
Labels on physical volume "/dev/loop0p1" successfully wiped.
sudo pvremove /dev/loop0p2
Labels on physical volume "/dev/loop0p2" successfully wiped.
sudo pvremove /dev/loop2
No PV found on device /dev/loop2.