## 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