文章目錄
- 前言
- 🍁 1.導讀
- 🍁2.概念
- ⛳️ 2.1 LVM
- ⛳️ 2.2 PE
- ⛳️ 2.3 PV
- ⛳️ 2.4 VG
- ⛳️ 2.4 LV
- 🍁3.邏輯卷常用指令
- 🍁4.實戰案例
- ⛳️ 4.1 LVM 全流程操作
- ⛳️ 4.2 Linux系統分區大小擴充
前言
近期正在給客戶部署幾套新的Linux作業系統,講LVM的基本知識做了下總結
🍁 1.導讀
想像一個情況,你在當初規劃主機的時候将 /home 隻給他 50G ,等到使用者衆多之後導緻這
個 filesystem 不夠大, 此時你能怎麼作?多數的朋友都是這樣:再加一顆新硬碟,然後重新
分區、格式化,将 /home 的資料完整的複制過來, 然後将原本的 partition 解除安裝重新挂載新的
partition 。啊!好忙碌啊!若是第二次分區卻給的容量太多!導緻很多磁盤容量被浪費了!
你想要将這個 partition 縮小時,又該如何作?将上述的流程再搞一遍!唉~煩死了,尤其複
制很花時間ㄟ~有沒有更簡單的方法呢? 有的!那就是我們這個小節要介紹的 LVM 這玩意
兒!
🍁2.概念
LVM使用分層結構,如下圖所示
PE(Physical Extend) 實體拓展
PV(Physical Volume) 實體卷
VG(Volume Group) 卷組
LV(Logical Volume) 邏輯卷
⛳️ 2.1 LVM
LVM 的全名是 Logical Volume Manager,中文可以翻譯作邏輯卷軸管理者。之是以稱為“卷
軸”可能是因為可以将 filesystem 像卷軸一樣伸長或縮短之故吧!LVM 的作法是将幾個實體的
partitions (或 disk) 通過軟體組合成為一塊看起來是獨立的大磁盤 (VG) ,然後将這塊大
磁盤再經過分區成為可使用分區 (LV), 最終就能夠挂載使用了。但是為什麼這樣的系統可
以進行 filesystem 的擴充或縮小呢?其實與一個稱為 PE 的項目有關!
⛳️ 2.2 PE
Physical Extent, PE, 實體範圍區塊
LVM 預設使用 4MB 的 PE 區塊,而 LVM 的 LV 在 32 位系統上最多僅能含有 65534 個 PE
(lvm1 的格式),是以預設的 LVM 的 LV 會有 4M*65534/(1024M/G)=256G。這個 PE 很
有趣喔!他是整個 LVM 最小的儲存區塊,也就是說,其實我們的檔案資料都是借由寫入 PE
來處理的。簡單的說,這個 PE 就有點像檔案系統裡面的 block 大小啦。 這樣說應該就比較
好了解了吧?是以調整 PE 會影響到 LVM 的最大容量喔!不過,在 CentOS 6.x 以後,由于
直接使用 lvm2 的各項格式功能,以及系統轉為 64 位,是以這個限制已經不存在了。
⛳️ 2.3 PV
Physical Volume, PV, 實體卷軸
我們實際的 partition (或 Disk) 需要調整系統識别碼 (system ID) 成為 8e (LVM 的識别
碼),然後再經過 pvcreate 的指令将他轉成 LVM 最底層的實體卷軸 (PV) ,之後才能夠将
這些 PV 加以利用!
⛳️ 2.4 VG
Volume Group, VG, 卷軸群組
所謂的 LVM 大磁盤就是将許多 PV 整合成這個 VG 的東西就是啦!是以 VG 就是 LVM 組合
起來的大磁盤!這麼想就好了。 那麼這個大磁盤最大可以到多少容量呢?這與下面要說明的
PE 以及 LVM 的格式版本有關喔~在預設的情況下, 使用 32位的 Linux 系統時,基本上 LV
最大僅能支援到 65534 個 PE 而已,若使用預設的 PE 為 4MB 的情況下, 最大容量則僅能
達到約 256GB 而已~不過,這個問題在 64位的 Linux 系統上面已經不存在了!LV 幾乎沒有
啥容量限制了!
⛳️ 2.4 LV
Logical Volume, LV, 邏輯卷軸
最終的 VG 還會被切成 LV,這個 LV 就是最後可以被格式化使用的類似分區的咚咚了!那麼
LV 是否可以随意指定大小呢? 當然不可以!既然 PE 是整個 LVM 的最小儲存機關,那麼 LV
的大小就與在此 LV 内的 PE 總數有關。 為了友善使用者利用 LVM 來管理其系統,是以 LV
的裝置檔案名通常指定為“ /dev/vgname/lvname ”的樣式!
通過 PV, VG, LV 的規劃之後,再利用 mkfs 就可以将你的 LV 格式化成為可以利用的檔案系統
了!而且這個檔案系統的容量在未來還能夠進行擴充或減少, 而且裡面的資料還不會被影
響!實在是很“福氣啦!
🍁3.邏輯卷常用指令
pvcreate /dev/sda4
pvdisplay
pvs
vgcreate vg_orasoft /dev/sda4
vgdisplay
vgs
lvcreate -n lv_orasoft_u01 -L 1G vg_orasoft
lvdisplay
lvs
mkfs.ext4 /dev/vg_orasoft/lv_orasoft_u01
mkdir /u11
mount /dev/vg_orasoft/lv_orasoft_u01 /u11
–mv /u01/* /u11/
–擴充邏輯卷
vgextend vg_orasoft /dev/sdb3
–lvextend -L +9G /dev/vg_orasoft/lv_orasoft_u01
lvextend -L 20G /dev/vg_orasoft/lv_orasoft_u01
resize2fs /dev/vg_orasoft/lv_orasoft_u01 #更新檔案系統
–收縮邏輯卷
lvreduce -L -4G /dev/vg_orasoft/lv_orasoft_u01
–重命名邏輯卷
lvrename /dev/vg_orasoft/lv_ora_soft_u01 /dev/vg_orasoft/lv_orasoft_u01
— /etc/fstab
/dev/vg_orasoft/lv_orasoft_u01 /u01 ext4 defaults 0 0
/dev/vg_orasoft/lv_orasoft_u02 /u02 ext4 defaults 0 0
/dev/vg_orasoft/lv_orasoft_u03 /u03 ext4 defaults 0 0
/dev/vg_orasoft/lv_oradata_u04 /u04 ext4 defaults 0 0
—找邏輯卷
lvmdiskscan
vgchange -ay
—删除邏輯卷
①首先将正在使用的邏輯卷解除安裝掉,通過 umount 指令
②将邏輯卷先删除,通過 lvremove 指令
③删除卷組,通過 vgremove 指令
④最後再删除的實體卷,通過 pvremove 指令
🍁4.實戰案例
⛳️ 4.1 LVM 全流程操作
對/dev/sdb 進行分區
50G磁盤大約分 5個 PE,每個 PE 大約 10G
[root@rac1 ~]# fdisk -l
[root@rac1 ~]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +10G
Command (m for help): d #删除分區
Partition number (1-4): 4 #選擇要删除分區的分區号,我們選第四個
Disk identifier: 0x000b7170
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
/dev/sdb3 2613 3918 10490445 83 Linux
Command (m for help): P
Disk identifier: 0x000b7170
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
/dev/sdb3 2613 3918 10490445 83 Linux
/dev/sdb4 3919 6527 20956792+ 5 Extended
/dev/sdb5 3919 5224 10490413+ 83 Linux
/dev/sdb6 5225 6527 10466316 83 Linux
Command (m for help): t
Partition number (1-6): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
[root@rac1 ~]# fdisk -l | grep dev
Disk /dev/sda: 53.7 GB, 53687091200 bytes
/dev/sda1 * 1 26 204800 83 Linux
/dev/sda2 26 2637 20971520 8e Linux LVM
/dev/sda3 2637 6528 31251456 8e Linux LVM
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
/dev/sdb1 1 1306 10490413+ 8e Linux LVM
/dev/sdb2 1307 2612 10490445 8e Linux LVM
/dev/sdb3 2613 3918 10490445 8e Linux LVM
/dev/sdb4 3919 6527 20956792+ 5 Extended
/dev/sdb5 3919 5224 10490413+ 8e Linux LVM
/dev/sdb6 5225 6527 10466316 8e Linux LVM
Disk /dev/mapper/vg_root-Vol03: 2147 MB, 2147483648 bytes
Disk /dev/mapper/vg_root-Vol00: 21.5 GB, 21474836480 bytes
Disk /dev/mapper/vg_root-Vol02: 10.7 GB, 10737418240 bytes
Disk /dev/mapper/vg_root-Vol01: 10.7 GB, 10737418240 bytes
(1)建立 PV
[root@rac1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_root lvm2 a-- 20.00g 7.80g
/dev/sda3 vg_root lvm2 a-- 29.80g 0
[root@rac1 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@rac1 ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created
root@rac1 ~]# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created
root@rac1 ~]# pvcreate /dev/sdb5
Physical volume "/dev/sdb5" successfully created
[root@rac1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_root lvm2 a-- 20.00g 7.80g
/dev/sda3 vg_root lvm2 a-- 29.80g 0
/dev/sdb1 lvm2 a-- 10.00g 10.00g
/dev/sdb2 lvm2 a-- 10.00g 10.00g
/dev/sdb3 lvm2 a-- 10.00g 10.00g
/dev/sdb5 lvm2 a-- 10.00g 10.00g
(2)建立 VG
[root@rac1 ~]# vgcreate vg_orasoft /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
Volume group "vg_orasoft" successfully created
[root@rac1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_orasoft 4 0 0 wz--n- 40.00g 40.00g
vg_root 2 4 0 wz--n- 49.80g 7.80g
(3)建立 LV
[root@rac1 ~]# lvcreate -n lv_orasoft_u01 -L 40G vg_orasoft
Logical volume "lv_orasoft_u01" created
[root@rac1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_orasoft_u01 vg_orasoft -wi-a----- 40.00g
Vol00 vg_root -wi-ao---- 20.00g
Vol01 vg_root -wi-ao---- 10.00g
Vol02 vg_root -wi-ao---- 10.00g
Vol03 vg_root -wi-ao---- 2.00g
(4)建立檔案系統:
[root@rac1 ~]# mkfs.ext4 /dev/vg_orasoft/lv_orasoft_u01
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@rac1 ~]# mkdir /u01
[root@rac1 ~]# mount /dev/vg_orasoft/lv_orasoft_u01 /u01
[root@rac1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_root-Vol00 20G 5.6G 14G 30% /
tmpfs 996M 76K 996M 1% /dev/shm
/dev/sda1 194M 35M 150M 19% /boot
/dev/mapper/vg_root-Vol01 9.9G 151M 9.2G 2% /home
/dev/mapper/vg_root-Vol02 9.9G 151M 9.2G 2% /tmp
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/sr0 3.6G 3.6G 0 100% /media/cdrom
/dev/mapper/vg_orasoft-lv_orasoft_u01 40G 176M 38G 1% /u01
(5)加入/etc/fstab 檔案
/dev/vg_orasoft/lv_orasoft_u01 /u01 ext4 defaults 0 0
⛳️ 4.2 Linux系統分區大小擴充
擴充前
擴充後