1. 程式人生 > >邏輯卷擴展物理卷的磁盤邊界

邏輯卷擴展物理卷的磁盤邊界

邏輯卷

在日常的使用中我們可能會出現這種情況,就是在系統中有兩塊硬盤,一塊為4GB,另一塊為8GB,這兩塊磁盤的總容量就是12GB,現在有需要將其分為兩塊6GB的磁盤,如果只是使用普通的分區方式就無法做到了。因為這種需要,所以就有了邏輯卷這個東西,使用邏輯卷我們就可以將所有的磁盤空間進行整合,然後在按照自己的需求來進行分配每個分區的空間。邏輯卷的英文叫做:Logical Volume,管理一個邏輯卷需要的工具叫做:Logical Volume Manager,簡稱為:LVM——邏輯卷管理。實現LVM管理的步驟是首先要創建一個物理卷PV,然後基於這個PV物理卷創建卷組和邏輯塊設備,在創建的卷組的同時指定PE的大小(註意:一旦PE大小被指定,就不允許更改)。在創建完成物理卷之後就可以在已經創建的卷組中創建邏輯卷了。此時的邏輯卷已經是一個按照用戶的想法分好大小的分區了。所以接下來的操作就和如何使用一塊分區是一樣的,所以接下來要在邏輯卷中創建文件系統(高級格式化)。在創建好文件系統之後的最後一步就是掛載了。下面分別對這些操作進行詳細的說明。


在進行下面的操作之前,請先在系統中添加一塊至少16GB的硬盤:

如果是在虛擬機中的centos系統,可以使用設置來添加一塊新的磁盤,在添加之後,要想讓系統識別有兩種方法,第一種是重啟系統,第二種是使用下面的命令,讓系統重讀接口(三條命令最好都執行一遍,因為不確定新分配的磁盤插到哪個接口):

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

執行上面的命令之後,在使用fdisk -l命令就可以看到新插入的磁盤,圖一:

************************************************

技術分享

************************************************

然後在這塊磁盤中使用fdisk命令分出兩個分區,如圖二所示:

************************************************

技術分享

************************************************


在分配分區之後就可以使用下面的命令對物理卷進行管理操作:

pvcreate:創建物理卷

pvdisplay:顯示物理卷的詳細信息

pvs:顯示物理卷的簡單信息

pvremove:刪除物理卷

pvmove:將某個物理卷中的所有的PE移動到其他物理卷中;


操作一般是按照以下步驟來進行:

一、創建物理卷

[[email protected] ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[[email protected] ~]#

在創建物理卷之後可以使用pvdisplay和pvs來查看物理卷的信息

[[email protected] ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               FcpUsa-ZhHR-Ytf6-TmD7-p6sU-eZd1-rPj5nc
   
  "/dev/sdb2" is a new physical volume of "11.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               11.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               TKz5OL-4tld-hCVg-5aAz-PUCR-ZFPm-fH5XIu
   
[[email protected] ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1       lvm2 ---   5.00g  5.00g
  /dev/sdb2       lvm2 ---  11.00g 11.00g
[[email protected] ~]#


二、創建卷組,創建卷組就像是將兩個磁盤的容量融合在一起。對卷組的管理操作命令如下:

vgcreate:創建卷組

-s #{kKmMgG}:指定PE的大小,如果省略該選項,默認的PE為4M;

[[email protected] ~]# vgcreate test /dev/sdb1 /dev/sdb2
  Volume group "test" successfully created
[[email protected] ~]#


vgremove:刪除卷組

vgextend:擴展卷組容量,將新的pv添加到卷組中

vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgreduce:縮減卷組容量,將pv從卷組中移除;在做此操作之前,應該先使用pvmove,保證被移除的pv上沒有被占用的PE;

vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgdisplay:顯示卷組的詳細信息

vgs:顯示卷組的簡短信息



在創建了卷組之後使用“vgs”命令就可以看到在剛才創建的這個test卷組中有了16G的容量:

[[email protected] ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   2   0   0 wz--n- 15.99g 15.99g
[[email protected] ~]#

這樣就把兩個磁盤整合在了一起,接下來的步驟就是類似於在一個磁盤中進行分區



三、創建邏輯卷

對邏輯卷的進行管理操作的命令有:

lvcreate:創建邏輯卷

-L LV_SIZE(#{kK|mM|gG}):指定邏輯卷的大小,不能超過卷組的容量;

-l #%{FREE|VG|ORIGIN|PVS}:指定邏輯卷占用對應存儲單元的百分比;

-n LV_NAME:指定邏輯卷的名稱

-i #:在創建邏輯卷的時候,以條帶的方式創建,並指明這個邏輯卷上有#個條帶

-I #:在創建邏輯卷的時候,以條帶的方式創建,並指明CHUNK的大小;

lvremove:移除邏輯卷

lvdisplay:顯示邏輯卷的詳細信息

lvs:顯示邏輯卷的簡短信息

lvchange:修改LV的狀態

-ay:激活邏輯卷

-an:停用邏輯卷

lvextend:擴展邏輯卷的空間,

註意:一定要先擴展邏輯卷的物理邊界,再擴展邏輯卷的邏輯邊界;

使用ext系列文件系統的時候,resize2fs命令擴展邏輯邊界;


擴大邏輯卷的物理邊界:

lvextend -L [+]SIZE /PATH/TO/LVM

如果SIZE有+:表示在原有邏輯卷容量的基礎上,增加SIZE空間

如果SIZE無+:表示將邏輯卷的容量擴大到SIZE空間

擴大邏輯卷的邏輯邊界:

e2fsck /PATH/TO/LVM

resize2fs [-f] /PATH/TO/LVM

lvreduce:縮減邏輯卷的空間

註意:先縮減邏輯卷的邏輯邊界,再縮減邏輯卷的物理邊界;

使用ext系列文件系統的時候,resize2fs命令縮減邏輯邊界

lvreduce -L [-]SIZE /PATH/TO/LVM

如果SIZE有-:表示在原有邏輯卷容量的基礎上,削減SIZE空間

如果SIZE無-:表示將邏輯卷的容量直接削減至SIZE空間

umount /PATH/TO/LVM

e2fsck /PATH/TO/LVM //強制校驗數據一致性

resize2fs -f /PATH/TO/LVM LV_SiZE //修改邏輯卷的邏輯邊界,LV_SIZE為調整後的邏輯卷大小

lvchange -an /PATH/TO/LVM //關閉邏輯卷

lvreduce -L [+]SIZE /PATH/TO/LVM //修改邏輯卷的物理邊界,大小要和邏輯邊界保持一致

lvchange -ay /PATH/TO/LVM //重新激活邏輯卷

mount /PATH/TO/LVM /PATH/TO/LVM_MOUNT_POINT


創建兩個邏輯卷,均為8GB,但是會執行失敗,因為在建立卷組的時候總共建立的空間為16GB,在這16GB中會占用一定的空間來保存一些重要的數據,所以在這裏第二塊創建的8GB邏輯卷會失敗,但是只要分配的空間小一點就會成功:

[[email protected] ~]# lvcreate -L +8G -n lvtest1 test 
  Logical volume "lvtest1" created.
[[email protected] ~]# lvcreate -L +8G -n lvtest2 test 
  Volume group "test" has insufficient free space (2046 extents): 2048 required.
[[email protected] ~]# lvcreate -L +7G -n lvtest2 test 
  Logical volume "lvtest2" created.
[[email protected] ~]#



創建成功之後,使用“lvs”命令就可以看到在當前的系統中有了兩個分區:

[[email protected] ~]# lvs
  LV      VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest1 test -wi-a----- 8.00g                                                    
  lvtest2 test -wi-a----- 7.00g                                                    
[[email protected] ~]#


這兩個分區保存在/dev/目錄中剛才創建的卷組裏

[[email protected] ~]# ls /dev/test/
lvtest1  lvtest2
[[email protected] ~]#


在找到這兩個分區之後就可以在每個分區中創建文件系統,然後掛載進行使用(創建文件系統和掛載的方法查看原先的博客)。這樣我們就獲得了一個為8GB,一個為7GB的分區,再來看一下原始的分區是5GB和11GB,這就是LVM邏輯卷的功能,它可以使我們在不重新分區的情況下,自由的分配磁盤的大小。


在需要進行數據的備份的時候,就用到了邏輯卷的快照。快照,本身也是一種邏輯卷;目標邏輯卷的另外一個訪問路徑;快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝,對於需要備份或者復制的現有數據集臨時拷貝以及其它操作來說,快照是最合適的選擇。快照只有在它們和原來的邏輯卷不同時才會消耗空間。在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變才會使用這些空間。當原來的邏輯卷中有所改變時,會將舊的數據復制到快照中。快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據也可以使用lvextend擴展快照卷。快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享。由於快照區與原本的LV共用很多PE的區塊,因此快照去與被快照的LV必須要要在同一個VG上!系統恢復的時候的文件數量不能高於快照區的實際容量。


快照邏輯卷

lvcreate -L SNAPSHOT_SIZE -s -p r -n SNAPSHOT_NAME /PATH/TO/ORIGIN_LVM

-L SIZE:指定快照邏輯卷的大小

-s:創建一個快照邏輯卷

-p r:創建處理的邏輯卷是只讀權限

-n SNAPSHOT_NAME:指定快照邏輯卷的名稱


邏輯卷擴展物理卷的磁盤邊界