第6章 LVM詳解


6.1 LVM相關概念和機制

LVM(Logical Volume Manager)可以讓分區變得彈性,可以隨時隨地的擴大和縮小分區大小,前提是該分區是LVM格式的。

lvm需要使用的軟件包為lvm2,一般在CentOS發行版中都已經預安裝了。

  • PV(Physical Volume)即物理卷

  硬盤分區后(還未格式化為文件系統)使用pvcreate命令可以將分區創建為pv,要求分區的system ID為8e,即為LVM格式的系統標識符。

  • VG(Volume Group)即卷組

將多個PV組合起來,使用vgcreate命令創建成卷組,這樣卷組包含了多個PV就比較大了,相當於重新整合了多個分區后得到的磁盤。雖然VG是整合多個PV的,但是創建VG時會將VG所有的空間根據指定的PE大小划分為多個PE,在LVM模式下的存儲都以PE為單元,類似於文件系統的Block。

  • PE(Physical Extend)

PE是VG中的存儲單元。實際存儲的數據都是存儲在這里面的。

  • LV(Logical Volume)

VG相當於整合過的硬盤,那么LV就相當於分區,只不過該分區是通過VG來划分的。VG中有很多PE單元,可以指定將多少個PE划分給一個LV,也可以直接指定大小(如多少兆)來划分。划分為LV之后就相當於划分了分區,只需再對LV進行格式化即可變成普通的文件系統。

通俗地講,非LVM管理的分區步驟是將硬盤分區,然后將分區格式化為文件系統。而使用LVM,則是在硬盤分區為特定的LVM標識符的分區后將其轉變為LVM可管理的PV,其實PV仍然類似於分區,然后將幾個PV整合為類似於磁盤的VG,最后划分VG為LV,此時LV就成了LVM可管理的分區,只需再對其格式化即可成為文件系統。

  • LE(logical extent)

PE是物理存儲單元,而LE則是邏輯存儲單元,也即為lv中的邏輯存儲單元,和pe的大小是一樣的。從vg中划分lv,實際上是從vg中划分vg中的pe,只不過划分lv后它不再稱為pe,而是成為le。

LVM之所以能夠伸縮容量,其實現的方法就是將LV里空閑的PE移出,或向LV中添加空閑的PE。

6.2 LVM的寫入機制

LV是從VG中划分出來的,LV中的PE很可能來自於多個PV。在向LV存儲數據時,有多種存儲機制,其中兩種是:

  • 線性模式(linear):先寫完來自於同一個PV的PE,再寫來自於下一個PV的PE。
  • 條帶模式(striped):一份數據拆分成多份,分別寫入該LV對應的每個PV中,所以讀寫性能較好,類似於RAID 0。

盡管striped讀寫性能較好也不建議使用該模式,因為lvm的着重點在於彈性容量擴展而非性能,要實現性能應該使用RAID來實現,而且使用striped模式時要進行容量的擴展和收縮將比較麻煩。默認的是使用線性模式。

6.3 LVM實現圖解

6.4 LVM的實現

以上圖為例。

首先需要將/dev/sdb下的分區/dev/sdb{1,2,3,5}修改為LVM格式的標識符(/dev/sdb4在后面擴容實驗中使用)。mbr格式下標識符是8e,gpt格式下是8300。

以下是gpt分區表格式的部分分區信息。

[root@server2 ~]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Number  Start (sector)    End (sector)  Size       Code
   1            2048        20000767   9.5 GiB     8E00
   2        20000768        26292223   3.0 GiB     8E00
   3        26292224        29296639   1.4 GiB     8E00
   4        29296640        33202175   1.9 GiB     8300
   5        33202176        37109759   1.9 GiB     8E00

6.4.1 管理PV

管理PV有幾個命令:pvscan、pvdisplay、pvcreate、pvremove和pvmove。

命令很簡單,基本都不需要任何選項。

功能

命令

創建PV

pvcreate

掃描並列出所有的pv

pvscan

列出pv屬性信息

pvdisplay

移除pv

pvremove

移動pv中的數據

pvmove

其中pvscan搜索目前有哪些pv,掃描之后將結果放在緩存中;pvdisplay會顯示每個pv的詳細信息,如PV name和pv size以及所屬的VG等。

直接將上述/dev/sdb{1,2,3,5}創建為pv。

[root@server2 ~]# pvcreate -y /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5     #  -y選項用於自動回答yes
  Wiping ext4 signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created
  Wiping ext2 signature on /dev/sdb2.
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdb5" successfully created

使用pvscan來查看哪些pv和基本屬性。

[root@server2 ~]# pvscan
  PV /dev/sdb1         lvm2 [9.54 GiB]
  PV /dev/sdb2         lvm2 [3.00 GiB]
  PV /dev/sdb5         lvm2 [1.86 GiB]
  PV /dev/sdb3         lvm2 [1.43 GiB]
 Total: 4 [15.83 GiB] / in use: 0 [0   ] / in no VG: 4 [15.83 GiB]

注意最后一行顯示的是"pv的總容量/已使用的pv容量/空閑的pv容量"

使用pvdisplay查看其中一個pv的屬性信息。

[root@server2 ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "9.54 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name              
  PV Size               9.54 GiB
  Allocatable           NO
  PE Size               0  
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               fRChUf-CL8d-2UwC-d94R-xa8a-MRYa-yvgFJ9

pvdisplay還有一個很重要的選項"-m",可以查看該設備中PE的使用分布圖。以下是某次顯示結果。

[root@server2 ~]# pvdisplay -m /dev/sdb2
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               firstvg
  PV Size               3.00 GiB / not usable 16.00 MiB
  Allocatable           yes
  PE Size               16.00 MiB
  Total PE              191
  Free PE               100
  Allocated PE          91
  PV UUID               uVgv3q-ANyy-02M1-wmGf-zmFR-Y16y-qLgNMV

  --- Physical Segments ---
  Physical extent 0 to 0: # 說明第0個PE正被使用。PV中PE的序號是從0開始編號的
    Logical volume      /dev/firstvg/first_lv
 Logical extents 450 to 450   # 該PE在LV中的第450個LE位置上
  Physical extent 1 to 100:         # 說明/dev/sdb2中,1-100序號的PE是空閑未被使用的
 FREE
 Physical extent 101 to 190:       # 說明101-190序號的PE是正使用中的,其在LV中的位置是551-640
    Logical volume      /dev/firstvg/first_lv
    Logical extents     551 to 640       

知道了PE的分布,就可以輕松地使用pvmove命令在設備之間進行PE數據的移動。具體關於pvmove的用法,見"收縮LVM磁盤"部分。

再測試pvremove,移除/dev/sdb5,然后將其添加回pv。

[root@server2 ~]# pvremove /dev/sdb5
  Labels on physical volume "/dev/sdb5" successfully wiped

[root@server2 ~]# pvcreate /dev/sdb5
  Physical volume "/dev/sdb5" successfully created

6.4.2 管理VG

管理VG也有幾個命令。

功能

命令

創建VG

vgcreate

掃描並列出所有的vg

vgscan

列出vg屬性信息

vgdisplay

移除vg,即刪除vg

vgremove

從vg中移除pv

vgreduce

將pv添加到vg中

vgextend

修改vg屬性

vgchange

同樣,vgscan搜尋有幾個vg並顯示vg的基本屬性,vgcreate是創建vg,vgdisplay是列出vg的詳細信息,vgremove是刪除整個vg,vgextend用於擴展vg即將pv添加到vg中,vgreduce是將pv移除出vg。除此之外還有一個命令vgchange,用於改變vg的屬性,如修改vg的狀態為激活狀態或未激活狀態。

創建一個vg,並將上述4個pv /dev/sdb{1,2,3,5}都添加到該vg中。注意vg是需要命名的,vg可以等同於磁盤的層次,而磁盤是有名稱的,如/dev/sdb,/dev/sdc等。同時創建vg時可以使用-s選項指定pe的大小,如果不指定默認為4M。

[root@server2 ~]# vgcreate -s 16M firstvg /dev/sdb{1,2,3,5}
  Volume group "firstvg" successfully created

此處創建的vg名稱為firstvg,指定pe大小為16M。創建vg后,是很難再修改pe大小的,只有空數據的vg可以修改,但這樣還不如重新創建vg。

注意,lvm1中每個vg中只能有65534個pe,所以指定pe的大小能改變每個vg的最大容量。但在lvm2中已經沒有該限制了,而現在說的lvm一般都指lvm2,這也是默認的版本。

創建了vg實際上是在/dev目錄下管理了一個vg目錄/dev/firstvg,不過只有在創建了lv該目錄才會被創建,而該vg中創建lv,將會在該目錄下生成鏈接文件指向/dev/dm設備。

再看看vgscan和vgdisplay吧。

[root@server2 ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "firstvg" using metadata type lvm2
[root@server2 ~]# vgdisplay firstvg 
  --- Volume group ---
  VG Name               firstvg
  System ID            
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               15.80 GiB
  PE Size               16.00 MiB
  Total PE              1011
  Alloc PE / Size       0 / 0  
  Free  PE / Size       1011 / 15.80 GiB
  VG UUID               GLwZTC-zUj9-mKas-CJ5m-Xf91-5Vqu-oEiJGj

從vg中移除一個pv,如/dev/sdb5,再vgdisplay,發現pv少了一個,pe相應的也減少了。

[root@server2 ~]# vgreduce firstvg /dev/sdb5
  Removed "/dev/sdb5" from volume group "firstvg"
[root@server2 ~]# vgdisplay firstvg
  --- Volume group ---
  VG Name               firstvg
  System ID            
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               13.94 GiB
  PE Size               16.00 MiB
  Total PE              892
  Alloc PE / Size       0 / 0  
  Free  PE / Size       892 / 13.94 GiB
  VG UUID               GLwZTC-zUj9-mKas-CJ5m-Xf91-5Vqu-oEiJGj

再將/dev/sdb5加入vg。

[root@server2 ~]# vgextend firstvg /dev/sdb5
  Volume group "firstvg" successfully extended

vgchange用於設置卷組的活動狀態,卷組的激活狀態主要影響的是lv。使用-a選項來設置。

將firstvg設置為活動狀態(active yes)。

shell> vgchange -a y firstvg

將firstvg設置為非激活狀態(active no)。

shell> vgchange -a n firstvg

6.4.3 管理LV

有了vg之后就可以根據vg進行分區,即創建LV。管理lv也有類似的一些命令。

功能

命令

創建LV

lvcreate

掃描並列出所有的lv

lvscan

列出lv屬性信息

lvdisplay

移除lv,即刪除lv

lvremove

縮小lv容量

lvreduce(lvresize)

增大lv容量

lvextend(lvresize)

改變lv容量

lvresize

對於lvcreate命令有幾個選項:

lvcreate {-L size(M/G) | -l PEnum} -n lv_name vg_name
選項說明:
-L:根據大小來創建lv,即分配多大空間給此lv
-l:根據PE的數量來創建lv,即分配多少個pe給此lv
-n:指定lv的名稱

前面創建的vg有1011個PE,總容量為15.8G。

[root@server2 ~]# vgdisplay | grep PE
  PE Size               16.00 MiB
  Total PE              1011
  Alloc PE / Size       0 / 0  
  Free  PE / Size       1011 / 15.80 GiB

使用-L和-l分別創建名稱為first_lv和sec_lv的lv。

[root@server2 ~]# lvcreate -L 5G -n first_lv firstvg
  Logical volume "first_lv" created.

[root@server2 ~]# lvcreate -l 160 -n sec_lv firstvg    
  Logical volume "sec_lv" created.

創建lv后,將在/dev/firstvg目錄中創建對應lv名稱的軟鏈接文件,同時也在/dev/mapper目錄下創建鏈接文件,它們都指向/dev/dm設備。

[root@server2 ~]# ls -l /dev/firstvg/
total 0
lrwxrwxrwx 1 root root 7 Jun  9 23:41 first_lv -> ../dm-0
lrwxrwxrwx 1 root root 7 Jun  9 23:42 sec_lv -> ../dm-1

[root@server2 ~]# ll /dev/mapper/
total 0
crw------- 1 root root 10, 236 Jun  6 02:44 control
lrwxrwxrwx 1 root root       7 Jun  9 23:41 firstvg-first_lv -> ../dm-0
lrwxrwxrwx 1 root root       7 Jun  9 23:42 firstvg-sec_lv -> ../dm-1

使用lvscan和lvdisplay查看lv信息。需要注意的是,如果lvdisplay要顯示某一個指定的lv,需要指定其全路徑,而不能簡單的指定lv名,當然如果不指定任何參數將顯示所有lv的信息。

[root@server2 ~]# lvscan
  ACTIVE            '/dev/firstvg/first_lv' [5.00 GiB] inherit
  ACTIVE            '/dev/firstvg/sec_lv' [2.50 GiB] inherit

[root@server2 ~]# lvdisplay /dev/firstvg/first_lv
  --- Logical volume ---
  LV Path                /dev/firstvg/first_lv
  LV Name                first_lv
  VG Name                firstvg
  LV UUID                f3cRXJ-vucN-aAw3-HRbX-Fhnq-mW6c-kmL7WA
  LV Write Access        read/write
  LV Creation host, time server2.longshuai.com, 2017-06-09 23:41:42 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

關於lv其他的命令留在后文lvm擴容和縮減的部分進行演示。

6.4.4 格式化lv為文件系統

再對lv進行格式化,即可形成文件系統,然后進行掛載使用。

[root@server2 ~]# mke2fs -t ext4 /dev/firstvg/first_lv 

對於lv格式化的文件系統類型如何查看?

可以先掛載再查看。

[root@server2 ~]# mount /dev/firstvg/first_lv /mnt

[root@server2 ~]# mount | grep /mnt
/dev/mapper/firstvg-first_lv on /mnt type ext4 (rw,relatime,data=ordered)

也可以使用file -s查看,但是由於/dev/firstvg和/dev/mapper下的lv都是鏈接到/dev/下塊設備的鏈接文件,所以只能對塊設備進行查看,否則查看的結果也僅僅只是個鏈接文件類型。

[root@server2 ~]# file -s /dev/dm-0
/dev/dm-0: Linux rev 1.0 ext4 filesystem data, UUID=f2a3b608-f4e9-431b-8c34-9c75eaf7d3b5 (needs journal recovery) (extents) (64bit) (large files) (huge files)

再去看看/dev/sdb的情況。

[root@server2 ~]# lsblk -f /dev/sdb
NAME                   FSTYPE      LABEL    UUID                                   MOUNTPOINT
sdb                                                                             
├─sdb1               LVM2_member         fRChUf-CL8d-2UwC-d94R-xa8a-MRYa-yvgFJ9
│ ├─firstvg-first_lv ext4                f2a3b608-f4e9-431b-8c34-9c75eaf7d3b5     /mnt
│ └─firstvg-sec_lv                                                             
├─sdb2               LVM2_member         uVgv3q-ANyy-02M1-wmGf-zmFR-Y16y-qLgNMV
├─sdb3               LVM2_member         L1byov-fbjK-M48t-Uabz-Ljn8-Q74C-ncdv8h
├─sdb4                                                                       
└─sdb5               LVM2_member         Lae2vc-VfyS-QoNS-rz2h-IXUv-xKQc-Q6YCxQ

6.5 對LVM磁盤擴容

lvm最大的優勢就是其可伸縮性,而其伸縮性又更偏重於擴容,這時使用lvm的最大原因。

擴容的實質是將vg中空閑的pe添加到lv中,所以只要vg中有空閑的pe,就可以進行擴容,即使沒有空閑的pe,也可以添加pv,將pv加入到vg中增加空閑pe。

擴容的兩個關鍵步驟如下:

(1).使用lvextend或者lvresize添加更多的pe或容量到lv中

(2).使用resize2fs命令(xfs則使用xfs_growfs)將lv增加后的容量增加到對應的文件系統中(此過程是修改文件系統而非LVM內容)

例如,將一直沒用到的/dev/sdb4作為first_lv的擴容來源。首先將/dev/sdb4創建成pv,加入到firstvg中。

[root@server2 ~]# parted /dev/sdb toggle 4 lvm
[root@server2 ~]# pvcreate /dev/sdb4
[root@server2 ~]# vgextend firstvg /dev/sdb4

查看firstvg中 空閑的pe數量。

[root@server2 ~]# vgdisplay firstvg  | grep -i pe
  Open LV               1
  PE Size               16.00 MiB
  Total PE              1130
  Alloc PE / Size       480 / 7.50 GiB
  Free  PE / Size       650 / 10.16 GiB

現在vg中有650個PE共10.16G容量可用。將其全部添加到first_lv中,有兩種方式添加:按容量大小添加和按PE數量添加。

[root@server2 ~]# umount /dev/firstvg/first_lv

[root@server2 ~]# lvextend -L +5G /dev/firstvg/first_lv   # 按容量大小添加

[root@server2 ~]# vgdisplay firstvg  | grep -i pe
  Open LV               1
  PE Size               16.00 MiB
  Total PE              1130
  Alloc PE / Size       800 / 12.50 GiB
  Free  PE / Size       330 / 5.16 GiB

[root@server2 ~]# lvextend -l +330 /dev/firstvg/first_lv  # 按PE數量添加

[root@server2 ~]# lvscan
  ACTIVE            '/dev/firstvg/first_lv' [15.16 GiB] inherit
  ACTIVE            '/dev/firstvg/sec_lv' [2.50 GiB] inherit

也可以使用lvresize來增加lv的容量方法和lvextend一樣。如:

shell> lvresize -L +5G /dev/firstvg/first_lv
shell> lvresize -l +330 /dev/firstvg/first_lv

將first_lv掛載,查看該lv對應文件系統的容量。

[root@server2 ~]# mount /dev/mapper/firstvg-first_lv /mnt

[root@server2 ~]# df -hT /mnt
Filesystem                   Type  Size  Used Avail Use% Mounted on
/dev/mapper/firstvg-first_lv ext4  4.8G   20M  4.6G   1% /mnt

發現容量並沒有增加,為什么呢?因為只是lv的容量增加了,而文件系統的容量卻沒有增加。所以使用resize2fs工具來改變ext文件系統的大小,如果是xfs文件系統,則使用xfs_growfs。

首先簡單看下resize2fs工具的使用說明。

可見,該工具可用於增大和縮減已卸載的設備對應的文件系統大小,對於linux 2.6內核之后的版本,還支持在線resize而無需卸載,但在實驗過程中好像不支持在線縮減,只能先卸載。

一般無需使用選項,直接使用resize2fs device的方式即可,如果失敗則嘗試使用-f選項強制改變大小。

[root@server2 ~]# resize2fs  /dev/firstvg/first_lv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/firstvg/first_lv is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/firstvg/first_lv is now 3973120 blocks long.
[root@server2 ~]# df -hT | grep -i /mnt
/dev/mapper/firstvg-first_lv ext4       15G   25M   15G   1% /mnt

再查看,size已經變為15G了。

6.6 收縮LVM磁盤

不用考慮收縮的功能,且xfs文件系統也不支持收縮。不過,看看如何收縮,可以加深lvm的理解,也可以真正搞懂pvdisplay和pvmove的用法。

目前first_lv的容量為15.16G。

[root@server2 ~]# lvscan
  ACTIVE            '/dev/firstvg/first_lv' [15.16 GiB] inherit
  ACTIVE            '/dev/firstvg/sec_lv' [2.50 GiB] inherit

而pv的使用情況則如下:

[root@server2 ~]# pvscan
  PV /dev/sdb1   VG firstvg   lvm2 [9.53 GiB / 0    free]
  PV /dev/sdb2   VG firstvg   lvm2 [2.98 GiB / 0    free]
  PV /dev/sdb3   VG firstvg   lvm2 [1.42 GiB / 0    free]
  PV /dev/sdb5   VG firstvg   lvm2 [1.86 GiB / 0    free]
  PV /dev/sdb4   VG firstvg   lvm2 [1.86 GiB / 0    free]
  Total: 5 [17.66 GiB] / in use: 5 [17.66 GiB] / in no VG: 0 [0   ]

如果想回收/dev/sdb2的2.98G呢?收縮的步驟和擴容的步驟相反。

(1). 首先卸載設備並使用resize2fs收縮文件系統的容量為目標大小

這里要收縮2.98G,原有15.16G,所以文件系統的目標容量為12.18G約算做12470M(因為resize2fs不能接受小數點的size參數,所以換算成整數,也可以直接算為12G),計算大小時應盡量多給出一點點的容量,所以此處算作收縮3.18G,目標12G。

[root@server2 ~]# umount /mnt                    

[root@server2 ~]# resize2fs /dev/firstvg/first_lv 12G
resize2fs 1.42.9 (28-Dec-2013)
Please run 'e2fsck -f /dev/firstvg/first_lv' first.

提示需要先運行e2fsck -f /dev/Myvg/first_lv,主要是為了檢查是否修改后的大小會影響數據。

[root@server2 ~]# e2fsck -f /dev/firstvg/first_lv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/firstvg/first_lv: 11/999424 files (0.0% non-contiguous), 101892/3973120 blocks
[root@server2 ~]# resize2fs /dev/firstvg/first_lv 12G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/firstvg/first_lv to 3145728 (4k) blocks.
The filesystem on /dev/firstvg/first_lv is now 3145728 blocks long.

(2). 再收縮lv。可以直接使用"-L"指定收縮容量,也可以使用"-l"指定收縮的PE數量。

例如此處使用-L來收縮。

[root@server2 ~]# lvreduce -L -3G /dev/firstvg/first_lv 
  Rounding size to boundary between physical extents: 2.99 GiB
  WARNING: Reducing active logical volume to 12.16 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce first_lv? [y/n]: y
  Size of logical volume firstvg/first_lv changed from 15.16 GiB (970 extents) to 12.16 GiB (779 extents).
  Logical volume first_lv successfully resized.

發現有警告:可能會損毀你的數據。如果在該lv下存儲的實際數據大於收縮后的容量,那么肯定會損毀一部分數據,但是如果存儲的數據小於收縮后的容量,那么就不會損毀任何數據,這是lvm無損修改分區大小的優點。此處由於在lv下完全沒有存儲數據,所以無需擔心會損毀,直接y確定reduce。

(3). pvmove移動PE

上面的過程已經釋放了3G大小的PE,但是這部分PE來源於何處?是否可以判斷此時能否移除/dev/sdb2?

首先查看哪些PV上有空閑的PE。

[root@server2 ~]# pvdisplay | grep 'PV Name\|Free'
  PV Name               /dev/sdb1
  Free PE               0
  PV Name               /dev/sdb2
  Free PE               0
  PV Name               /dev/sdb3
  Free PE               91
  PV Name               /dev/sdb5
  Free PE               0
  PV Name               /dev/sdb4
  Free PE               100

可見,此時空閑的PE分布在/dev/sdb4和/dev/sdb3上,/dev/sdb2並不能卸載。

那么現在需要做的事情是將/dev/sdb2上的PE移到其他設備上,使/dev/sdb2空閑出來。使用pvmove命令,該命令的執行內部會涉及到不少步驟,所以可能會消耗點時間。

因為/dev/sdb4上空閑了100個PE,所以從/dev/sdb2上移動100個PE到/dev/sdb4上。

[root@server2 ~]# pvmove /dev/sdb2:0-99 /dev/sdb4

這表示將/dev/sdb2上0-99編號的PE共100個移動到/dev/sdb4上。如果不加上[-99]這部分,則表示只移動0編號這一個PE。當然,在目標位置/dev/sdb4上也可以以同樣的方式指定移動到的目標PE位置上。

再移動/dev/sdb2上剩余的PE到/dev/sdb3上,但此時應該先看看/dev/sdb2上仍被占用的PE編號是哪些。

[root@server2 ~]# pvdisplay -m /dev/sdb2
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               firstvg
  PV Size               3.00 GiB / not usable 16.00 MiB
  Allocatable           yes
  PE Size               16.00 MiB
  Total PE              191
  Free PE               100
  Allocated PE          91
  PV UUID               uVgv3q-ANyy-02M1-wmGf-zmFR-Y16y-qLgNMV

  --- Physical Segments ---
  Physical extent 0 to 99:
    FREE
  Physical extent 100 to 100:
    Logical volume      /dev/firstvg/first_lv
    Logical extents     778 to 778
  Physical extent 101 to 190:
    Logical volume      /dev/firstvg/first_lv
    Logical extents     551 to 640

說明從100-190都是被占用的,要移動到/dev/sdb3上的就是這些PE。

[root@server2 ~]# pvmove /dev/sdb2:100-190 /dev/sdb3

現在/dev/sdb2已經完全空閑了,也就是可以從VG中移除,然后卸載出來。

[root@server2 ~]# pvdisplay  /dev/sdb2 
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               firstvg
  PV Size               3.00 GiB / not usable 16.00 MiB
  Allocatable           yes
  PE Size               16.00 MiB
  Total PE              191
  Free PE               191
  Allocated PE          0
  PV UUID               uVgv3q-ANyy-02M1-wmGf-zmFR-Y16y-qLgNMV

(4). 從vg中移除pv

[root@server2 ~]# vgreduce firstvg /dev/sdb2   

(5). 移除該pv

[root@server2 ~]# pvremove /dev/sdb2

現在/dev/sdb2就完全被移除了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM