## LVM簡易操作
### LVM 大概可以分成三個層級
* PV: Physical Volume,它可以是實體的硬碟,也可以是RAID設備或是虛擬硬碟
* VG: 為了更良好的使用資源引入了Pool的概念,如同Thread Pool有需要時就從裡面分配CPU, Memory資源不用時也可以回收,Volume Group概念也類似一個Pool只是它分配的資源是硬碟空間,以前的Linux檔案系統ext4可以任意增減空間,就好比D槽空間不夠了可以從C槽挖一些空間給D槽,然而在CentOS7以後的預設xfs檔案系統只能增加不能減少。
* LV: Logic Volume實際分配出去的空間
### 簡單的在VMware Workstation操作一下
1. 看現在的磁碟分區
在Linux各種裝置如網卡硬碟都會擺在/dev目錄底下,CentOS中通常是sd開頭a-z結尾,透過ls /dev/sd\*可以看到現在有幾個磁碟區,磁碟區類似於Windows底下的C,D,E磁碟
```
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
```
2. 關機增加硬碟一個30G硬碟再次使用ls會看到增加了一個sdb
```
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb
```
使用df -h不會看到變化根目錄還是46G
```
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 5.0G 41G 11% /
/dev/sda1 1014M 185M 830M 19% /boot
```
3. 進行磁碟分區Partition
```
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2de7dbdc.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
```
不重開機直接重讀分區表
```
[root@localhost ~]# partprobe
```
這時使用ls /dev/sd* 可以看到新分區sdb1
```
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1
```
### 完成磁碟分區接著就可以進行LVM三部曲(pvcreate, vgextend, lvextend)
1. 創造PV,透過pv-create告訴LVM將剛才完成的分區sdb1變成PV
```
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
```
2. 查詢現有VG,CentOS預設名稱為centos
```
[root@localhost ~]# vgdisplay | grep VG Name
VG Name centos
```
2. 將PV加到VG中
```
[root@localhost ~]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended
```
3. 再用vgdisplay看一下現在整個VG有 78.99 GiB其中Free PE有 30.00 GiB
```
[root@localhost ~]# vgdisplay | tail -n 7
VG Size 78.99 GiB
PE Size 4.00 MiB
Total PE 20222
Alloc PE / Size 12542 / 48.99 GiB
Free PE / Size 7680 / 30.00 GiB
VG UUID 0nRJMA-erwh-JhGW-wxaf-S2VB-zED0-6KvXjn
```
4. 使用lv-extend將VG的空間分給目標LV Path
```
[root@localhost ~]# lvextend -l +7680 /dev/centos/root
Size of logical volume centos/root changed from <45.12 GiB (11550 extents) to <75.12 GiB.
Logical volume centos/root successfully resized.
```
5. 最後centos 7以後預設檔案系統都是xfs故要使用xfs_growfs告訴linux重新配置硬碟空間
```
[root@localhost ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2956800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=11827200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=5775, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 11827200 to 19691520
```
6. df -h 就可以看到空間增加
```
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 76G 5.0G 71G 7% /
```
##### PS: 如果要減少硬碟空只要反向使用reduce(減少)lvreduce空間就會回到VG