# 進階應用

#### VG Import/Export

用途：將 VG 的磁碟遷移至不同的主機上。

> 大致方法是在遷移磁碟前，先將 VG 做 Exort；遷移後做 VG Import。

- [How To Move LVM Volume Group To Another Machine In Linux](https://ostechnix.com/move-lvm-volume-group-to-another-machine/)

#### 移除 PV Disk

從一個現有 LV 中移除正在使用的一個 PV Disk (/dev/sdb1)

> NOTE: 這個 LV 的所屬 VG 必須要有足夠的可用空間 [https://access.redhat.com/site/documentation/en-US/Red\_Hat\_Enterprise\_Linux/6/html-single/Logical\_Volume\_Manager\_Administration/index.html#disk\_remove\_ex](https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Logical_Volume_Manager_Administration/index.html#disk_remove_ex)
> 
> [http://www.tecmint.com/lvm-storage-migration/](http://www.tecmint.com/lvm-storage-migration/)

```
# pvs -o+pv_used
  PV         VG   Fmt  Attr PSize  PFree  Used
  /dev/sda1  myvg lvm2 a-   17.15G 12.15G  5.00G
  /dev/sdb1  myvg lvm2 a-   17.15G 12.15G  5.00G
  /dev/sdc1  myvg lvm2 a-   17.15G 12.15G  5.00G
  /dev/sdd1  myvg lvm2 a-   17.15G  2.15G 15.00G
```

```
# pvremove /dev/sdb1
  /dev/sdb1: Moved: 2.0%
 ...
  /dev/sdb1: Moved: 79.2%
 ...
  /dev/sdb1: Moved: 100.0%
```

```
# pvs -o+pv_used
  PV         VG   Fmt  Attr PSize  PFree  Used
  /dev/sda1  myvg lvm2 a-   17.15G  7.15G 10.00G
  /dev/sdb1  myvg lvm2 a-   17.15G 17.15G     0
  /dev/sdc1  myvg lvm2 a-   17.15G 12.15G  5.00G
  /dev/sdd1  myvg lvm2 a-   17.15G  2.15G 15.00G
```

```
# vgreduce myvg /dev/sdb1
  Removed "/dev/sdb1" from volume group "myvg"
[root@tng3-1 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda1  myvg lvm2 a-   17.15G  7.15G
  /dev/sdb1       lvm2 --   17.15G 17.15G
  /dev/sdc1  myvg lvm2 a-   17.15G 12.15G
  /dev/sdd1  myvg lvm2 a-   17.15G  2.15G
```

#### 搬移 PV Disk

搬移現有 PV Disk (/dev/sdb1) 內的所有資料至一個新的 PV Disk (/dev/sdd1)

方法一：使用 Mirror 方式 \*建議\*

參考連結:

- [https://www.thegeekdiary.com/centos-rhel-7-how-to-create-and-remove-the-lvm-mirrors-using-lvconvert/](https://www.thegeekdiary.com/centos-rhel-7-how-to-create-and-remove-the-lvm-mirrors-using-lvconvert/)
- [https://linux.m2osw.com/creating-drive-mirror-lvm-including-exact-partition-cloning](https://linux.m2osw.com/creating-drive-mirror-lvm-including-exact-partition-cloning)

說明:

- VG: vg\_data
- LV: db\_worktmp, lv\_mydev, lv\_worktmp
- PV: from /dev/sdb1 to /dev/sdc

1\. 確認新硬碟的容量需求

```
#> lvs -a -o name,copy_percent,devices,lv_size vg_data

  LV         Cpy%Sync Devices         LSize
  db_worktmp          /dev/sdb1(0)      20.00g
  lv_mydev            /dev/sdb1(5121)   60.00g
  lv_mydev            /dev/sdb1(10242)  60.00g
  lv_worktmp          /dev/sdb1(20482) 500.00m 
```

2\. 將新硬碟加入到同一個 VG 內

```
#> vgextend vg_data /dev/sdc
```

3\. 逐一將所有 LV 作完 Mirror

```
#> lvconvert -m1 vg_data/db_worktmp
#> lvconvert -m1 vg_data/lv_mydev
#> lvconvert -m1 vg_data/lv_worktmp 

檢查 Mirror 時的進度
#> lvs -a -o name,copy_percent,devices,lv_size vg_data 
```

4\. 逐一將所有 LV 移除 Mirror，需指定舊硬碟代號

```
#> lvconvert -m0 vg_data/db_worktmp /dev/sdb1
#> lvconvert -m0 vg_data/lv_mydev /dev/sdb1
#> lvconvert -m0 vg_data/lv_worktmp /dev/sdb1
```

5\. 從 VG 裡移除 PV /dev/sdb1, 再移除整個 PV

```
#> vgreduce vg_data /dev/sdb1
#> pvremove /dev/sdb1 
```

方法二：使用 PV 搬移指令 pvmove

NOTE: PV 必須在同一個 VG 才能互相搬移

```
# pvs -o+pv_used
  PV         VG   Fmt  Attr PSize  PFree  Used
  /dev/sda1  myvg lvm2 a-   17.15G  7.15G 10.00G
  /dev/sdb1  myvg lvm2 a-   17.15G 15.15G  2.00G
  /dev/sdc1  myvg lvm2 a-   17.15G 15.15G  2.00G
```

```
# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created
```

```
# vgextend myvg /dev/sdd1
  Volume group "myvg" successfully extended
[root@tng3-1]# pvs -o+pv_used
  PV         VG   Fmt  Attr PSize  PFree  Used
  /dev/sda1   myvg lvm2 a-   17.15G  7.15G 10.00G
  /dev/sdb1   myvg lvm2 a-   17.15G 15.15G  2.00G
  /dev/sdc1   myvg lvm2 a-   17.15G 15.15G  2.00G
  /dev/sdd1   myvg lvm2 a-   17.15G 17.15G     0
```

```
# pvmove /dev/sdb1 /dev/sdd1
  /dev/sdb1: Moved: 10.0%
...
  /dev/sdb1: Moved: 79.7%
...
  /dev/sdb1: Moved: 100.0%

[root@tng3-1]# pvs -o+pv_used
  PV          VG   Fmt  Attr PSize  PFree  Used
  /dev/sda1   myvg lvm2 a-   17.15G  7.15G 10.00G
  /dev/sdb1   myvg lvm2 a-   17.15G 17.15G     0
  /dev/sdc1   myvg lvm2 a-   17.15G 15.15G  2.00G
  /dev/sdd1   myvg lvm2 a-   17.15G 15.15G  2.00G 
```

```
# vgreduce myvg /dev/sdb1
  Removed "/dev/sdb1" from volume group "myvg"
```