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就完全被移除了。