什麼是 LVM
- 可彈性調整檔案磁區大小
- Physical Volume, PV(實體卷宗)
- Volume Group, VG(卷宗群組)
- Logical Volume, LV(邏輯卷宗)
- 非效能取向
- 寫入方式
- 線性(預設)
- A partition 用完時,在使用 B partition
- 交錯(像 RAID 0)
- 一份資料用兩顆硬碟來寫入的概念
- 線性(預設)
LVM 可以整合多個實體 partition 在一起, 讓這些 partitions 看起來就像是一個磁碟一樣。還可以在未來新增或移除其他的實體 partition 到這個 LVM 管理的磁碟當中。 by 鳥歌
Physical Volume, PV
利用 fdisk
將劃分的硬碟調整 system ID
為 8e
- pvcreate
- 將實體磁區建立為 PV
- pvscan
- 列出系統中 PV 磁區
- pvdisplay
- 顯示系統上 PV 狀態
- pvremove
- 將 PV 屬性移除
Volume Group, VG
VG
就是 LVM
組合起來的大磁碟,多個 PV
組合而成。
- vgcreate
- 建立 VG
- vgscan
- 列出系統中 VG 的卷區
- vgdisplay
- 顯示系統上 VG 狀態
- vgremove
- 將 VG 移除
- vgextend
- VG 內新增加額外 PV
- vgreduce
- 在 VG 內移除 PV
- vgchange
- 設定 VG 是否啟動
Logical Volume, LV
最後用來格式化,建立分割區,最後裝置名稱為 /dev/vg_NAME/lv_name
- lvcreate
- 建立 LV
- –size 設定大小
- -n 設定名稱
- -p 設定存取權限(r、rw)
- -s 設定快照
- lvscan
- 列出系統中 LV 的卷區
- lvdisplay
- 顯示系統中 LV 狀態
- lvremove
- 將 LV 移除
- lvextend
- LV 內增加容量
- lvreduce
- LV 內減少容量
- lvresize
- 調整 LV 容量大小
PV、VG、LV 整理
實作
/dev/sdb 新增一顆 1GB 硬碟,切分三個 LVM 磁區分別為 100 MB。
以下是變換預設磁區為 LVM
Command (m for help): t
Partition number (1-3, default 3): 1
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): t
Partition number (1-3, default 3): 2
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): t
Partition number (1-3, default 3): 3
Partition type (type L to list all types): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x49871a65
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 206847 204800 100M 8e Linux LVM
/dev/sdb2 206848 411647 204800 100M 8e Linux LVM
/dev/sdb3 411648 616447 204800 100M 8e Linux LVM
建立三組 PV
$ for i in $(seq 1 3) ; do sudo pvcreate /dev/sdb$i; done
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
掃瞄檢查 PV 狀態
$ sudo pvscan
PV /dev/sda5 VG ubuntu-vg lvm2 [19.52 GiB / 916.00 MiB free]
PV /dev/sdb3 lvm2 [100.00 MiB]
PV /dev/sdb1 lvm2 [100.00 MiB]
PV /dev/sdb2 lvm2 [100.00 MiB]
Total: 4 [19.81 GiB] / in use: 1 [19.52 GiB] / in no VG: 3 [300.00 MiB]
$ sudo pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "100.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 100.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID gzH4Bq-9csW-FSRP-jSvy-pOvf-0D0S-W8mVpx
建立 VG
建立一組 VG,名稱為 bossvg 並將 /dev/sdb1
和 /dev/sdb2
加入
$ sudo vgcreate bossvg /dev/sdb1
Volume group "bossvg" successfully created
$ sudo vgextend bossvg /dev/sdb2
Volume group "bossvg" successfully extended
$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "ubuntu-vg" using metadata type lvm2
Found volume group "bossvg" using metadata type lvm2
cch@ubuntu:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.52 GiB
PE Size 4.00 MiB
Total PE 4997
Alloc PE / Size 4768 / 18.62 GiB
Free PE / Size 229 / 916.00 MiB
VG UUID Nc3WGO-0HbI-rht1-YtjR-78be-deZp-Ezc2dM
--- Volume group ---
VG Name bossvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 192.00 MiB
PE Size 4.00 MiB
Total PE 48
Alloc PE / Size 0 / 0
Free PE / Size 48 / 192.00 MiB
VG UUID fPJc75-tztw-Qszi-n9t9-5mfO-Vehn-F2WO9u
$ sudo pvscan
PV /dev/sda5 VG ubuntu-vg lvm2 [19.52 GiB / 916.00 MiB free]
PV /dev/sdb1 VG bossvg lvm2 [96.00 MiB / 96.00 MiB free]
PV /dev/sdb2 VG bossvg lvm2 [96.00 MiB / 96.00 MiB free]
PV /dev/sdb3 lvm2 [100.00 MiB]
Total: 4 [19.80 GiB] / in use: 3 [19.71 GiB] / in no VG: 1 [100.00 MiB]
建立一組 LV
從 bossvg 分出 130 MB 給 bosslv,並格式化,將他 mount
至 /mnt/templv
$ sudo lvcreate --size 130MB -n bosslv bossvg
Rounding up size to full physical extent 132.00 MiB
Logical volume "bosslv" created.
$ sudo lvscan
ACTIVE '/dev/ubuntu-vg/root' [17.67 GiB] inherit
ACTIVE '/dev/ubuntu-vg/swap_1' [976.00 MiB] inherit
ACTIVE '/dev/bossvg/bosslv' [132.00 MiB] inherit
$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/root
LV Name root
VG Name ubuntu-vg
LV UUID do4I3J-zub8-7rGz-h0vn-LENG-TlsX-agNYfm
LV Write Access read/write
LV Creation host, time ubuntu, 2018-11-27 21:21:14 +0800
LV Status available
# open 1
LV Size 17.67 GiB
Current LE 4524
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Path /dev/ubuntu-vg/swap_1
LV Name swap_1
VG Name ubuntu-vg
LV UUID DtptD7-aHhN-oqr1-fhRa-ZkSy-39HN-O13099
LV Write Access read/write
LV Creation host, time ubuntu, 2018-11-27 21:21:15 +0800
LV Status available
# open 2
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
--- Logical volume ---
LV Path /dev/bossvg/bosslv
LV Name bosslv
VG Name bossvg
LV UUID fb7AXW-sj3u-Ut2r-SGJf-03Kl-dyFB-lUjzkI
LV Write Access read/write
LV Creation host, time ubuntu, 2019-09-01 00:57:10 +0800
LV Status available
# open 0
LV Size 132.00 MiB
Current LE 33
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:2
格式化
$ sudo mkfs.ext4 /dev/bossvg/bosslv
mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 135168 1k blocks and 33864 inodes
Filesystem UUID: b652f4b2-5903-4c17-a6e1-86d71b41bcfe
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
掛載
$ sudo mkdir /mnt/templv
cch@ubuntu:~$ sudo mount /dev/bossvg/bosslv /mnt/templv/
cch@ubuntu:~$ ls /mnt/templv/
lost+found
$ df -Th /mnt/templv/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/bossvg-bosslv ext4 124M 1.6M 114M 2% /mnt/templv
VG 放大
再新增 30MB 空間
$ sudo lvresize --size +30MB /dev/bossvg/bosslv
Rounding size to boundary between physical extents: 32.00 MiB
Size of logical volume bossvg/bosslv changed from 132.00 MiB (33 extents) to 164.00 MiB (41 extents).
Logical volume bosslv successfully resized.
$ sudo vgdisplay; sudo lvscan
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.52 GiB
PE Size 4.00 MiB
Total PE 4997
Alloc PE / Size 4768 / 18.62 GiB
Free PE / Size 229 / 916.00 MiB
VG UUID Nc3WGO-0HbI-rht1-YtjR-78be-deZp-Ezc2dM
--- Volume group ---
VG Name bossvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 192.00 MiB
PE Size 4.00 MiB
Total PE 48
Alloc PE / Size 41 / 164.00 MiB
Free PE / Size 7 / 28.00 MiB
VG UUID fPJc75-tztw-Qszi-n9t9-5mfO-Vehn-F2WO9u
ACTIVE '/dev/ubuntu-vg/root' [17.67 GiB] inherit
ACTIVE '/dev/ubuntu-vg/swap_1' [976.00 MiB] inherit
ACTIVE '/dev/bossvg/bosslv' [164.00 MiB] inherit
移除 LVM 流程
- 先卸載系統上面的 LVM 檔案系統 (包括快照與所有 LV);
- 使用 lvremove 移除 LV ;
- 使用 vgchange -a n VGname 讓 VGname 這個 VG 不具有 Active 的標誌;
- 使用 vgremove 移除 VG:
- 使用 pvremove 移除 PV;
- 最後,使用 fdisk 修改 ID 回來啊!
By 鳥歌