擴展LVM
上面我們的測試是vg是4G,我們的創建的lv是2G的,我們想給創建的lv擴展1G空間。
 [root@centos7 ~]$ lvextend -L +1G /dev/vg_test_01/lv_test_01 # 我們擴大1G, +1G表示在原有基礎上擴大1G,我們這里是有vg是有空間的,沒有的話就需要創建pv,擴大vg在做
Size of logical volume vg_test_01/lv_test_01 changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
Logical volume vg_test_01/lv_test_01 successfully resized.
[root@centos7 ~]$ df -h # 上面的命令提示lv已經到3G了, 但是使用df-h 查看還是2g
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.9G 41G 11% /
devtmpfs 979M 4.0K 979M 1% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 22M 971M 3% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 976M 130M 780M 15% /boot
/dev/sda5 20G 307M 18G 2% /app
tmpfs 199M 32K 199M 1% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg_test_01-lv_test_01 2.0G 33M 2.0G 2% /mnt/test_01
[root@centos7 ~]$ resize2fs /dev/mapper/vg_test_01-lv_test_01 # 需要增長下文件系統的,讓文件系統和lv大小匹配下
meta-data=/dev/mapper/vg_test_01-lv_test_01 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 786432
[root@centos7 ~]$ df -h # 再次查看就是一致的了
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.9G 41G 11% /
devtmpfs 979M 4.0K 979M 1% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 22M 971M 3% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 976M 130M 780M 15% /boot
/dev/sda5 20G 307M 18G 2% /app
tmpfs 199M 32K 199M 1% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg_test_01-lv_test_01 3.0G 33M 3.0G 2% /mnt/test_01

注意:
- ext系列可以使用resieze2fs去調整。其他的文件系統可以參考http://tldp.org/HOWTO/LVM-HOWTO/extendlv.html
- lvextentd 有個-r選項,自動去調整大小,匹配lv和文件系統大小的。
縮減LVM
邏輯卷的大小可以減小,也可以增加。 但是,在縮小卷本身之前,請記住縮小文件系統的大小或存在于卷中的任何文件是非常重要的,否則可能會丟失數據。
注意: xfs,jsf文件系統是沒法縮減lvm的,因為這2個文件系統沒法縮減文件系統大小的。參考http://tldp.org/HOWTO/LVM-HOWTO/reducelv.html
主要步驟:
- 檢查空間使用情況和分析
- umount設備
- 縮減文件系統大小
- 縮減lv大小
- 恢復掛載設備
上面我們的邏輯卷是3G的大小,在縮減之前我們需要確保縮減的空間不能影響數據的存放的。
檢查工作
[root@centos7 ~]$ cp -a /etc/ /mnt/test_01/ # 我這里模擬下,只能目錄有文件的情況
[root@centos7 ~]$ du -sh /mnt/test_01/ # 查看下大小
42M /mnt/test_01/
[root@centos7 ~]$ df -h # 查看邏輯卷分區利用情況 ,數據才存放76M,我們的邏輯卷都3G呢, 如果我們想縮減1G,完全沒有問題的。
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.9G 41G 11% /
devtmpfs 979M 4.0K 979M 1% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 22M 971M 3% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 976M 130M 780M 15% /boot
/dev/sda5 20G 307M 18G 2% /app
tmpfs 199M 32K 199M 1% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg_test_01-lv_test_01 3.0G 76M 3.0G 3% /mnt/test_01
縮減空間
 [root@centos7 ~]$ umount /dev/vg_test_01/lv_test_01 # 取消掛載
[root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # resieze2fs定義下文件系統大小
resize2fs 1.42.9 (28-Dec-2013)
Please run ’e2fsck -f /dev/vg_test_01/lv_test_01’ first.
[root@centos7 ~]$ e2fsck -f /dev/vg_test_01/lv_test_01 #上面的命令要檢查,那就檢查下
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/vg_test_01/lv_test_01: 3614/196608 files (0.1% non-contiguous), 42361/786432 blocks
[root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # 檢查完,那就執行縮減文件系統大小
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg_test_01/lv_test_01 to 262144 (4k) blocks.
The filesystem on /dev/vg_test_01/lv_test_01 is now 262144 blocks long.
[root@centos7 ~]$ lvreduce -L 1G /dev/vg_test_01/lv_test_01 # 縮減下邏輯卷到1G,這里有提示,縮減可能會丟失數據,輸入y即可
WARNING: Reducing active logical volume to 1.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_test_01/lv_test_01? [y/n]: yG
Size of logical volume vg_test_01/lv_test_01 changed from 3.00 GiB (768 extents) to 1.00 GiB (256 extents).
Logical volume vg_test_01/lv_test_01 successfully resized.
[root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/test_01/ # 恢復掛載
[root@centos7 ~]$ ll /mnt/test_01/
total 28
drwxr-xr-x. 140 root root 12288 Dec 7 13:54 etc
drwx. 2 root root 16384 Dec 7 15:47 lost+found
[root@centos7 ~]$ df -h # 檢查下
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.9G 41G 11% /
devtmpfs 979M 4.0K 979M 1% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 22M 971M 3% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 976M 130M 780M 15% /boot
/dev/sda5 20G 307M 18G 2% /app
tmpfs 199M 32K 199M 1% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/vg_test_01-lv_test_01 944M 52M 825M 6% /mnt/test_01

遷移LVM的vg
移動vg到另外一個機器上
主要步驟:
- 檢查和分析
- 一些預處理工作
- umount文件系統
- 設置卷組非活動
- 導出卷組
- 取出設備,插入到新機器
- 導入卷組
- 激活卷組
- 掛載文件系統
檢查分析
[root@centos7 ~]$ vgs
VG #PV #LV #SN Attr VSize VFree
vg_test_01 4 1 0 wzn- 3.98g 2.98g
[root@centos7 ~]$ pvs
l PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_test_01 lvm2 a 1020.00m 0
/dev/sdb2 lvm2 - 1.00g 1.00g
/dev/sdc1 vg_test_01 lvm2 a 1020.00m 1016.00m
/dev/sdc2 lvm2 - 1.00g 1.00g
/dev/sdd1 vg_test_01 lvm2 a 1020.00m 1020.00m
/dev/sdd2 lvm2 - 5.00g 5.00g
/dev/sde1 vg_test_01 lvm2 a 1020.00m 1020.00m
/dev/sde2 lvm2 - 2.00g 2.00g
[root@centos7 ~]$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_test_01 vg_test_01 -wi-ao 1.00g
我們使用lvs,vgs,pvs分別查看信息。發現我們vg是3G的大小。lv是1G的大小。但是vg的pv來自不同的磁盤的。我們要遷移vg。不能把包含pv都遷移過去把。 那這一下子需要4個盤的。
我們把pv數據遷移下,到時候摘盤的時候只那一個就可以多好。 發現/dev/sdd2是一個5G的盤。 打算使用/dev/sdd這個盤作為遷移盤來遷移數據。
一些預處理工作
[root@centos7 ~]$ umount /mnt/test_01/ # 去除掛載 [root@centos7 ~]$ vgchange -an vg_test_01 # 設置vg不激活
0 logical volume(s) in volume group "vg_test_01" now active [root@centos7 ~]$ pvmove /dev/sd{b1,c1,e1} # 遷移pv數據
/dev/sdb1: Moved: 0.00%
/dev/sdb1: Moved: 100.00%
[root@centos7 ~]$ pvs # 確保pv都是空的,沒有數據存放了。
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg_test_01 lvm2 a 1020.00m 1020.00m
/dev/sdb2 lvm2 - 1.00g 1.00g
/dev/sdc1 vg_test_01 lvm2 a 1020.00m 1016.00m
/dev/sdc2 lvm2 - 1.00g 1.00g
/dev/sdd1 vg_test_01 lvm2 a 1020.00m 0
/dev/sdd2 vg_test_01 lvm2 a <5.00g <5.00g
/dev/sde1 vg_test_01 lvm2 a 1020.00m 1020.00m
/dev/sde2 lvm2 - 2.00g 2.00g
[root@centos7 ~]$ vgreduce vg_test_01 /dev/sd{b1,c1,e1} # 縮減vg 去除b1,c1,e1
Removed "/dev/sdb1" from volume group "vg_test_01"
Removed "/dev/sdc1" from volume group "vg_test_01"
Removed "/dev/sde1" from volume group "vg_test_01"
[root@centos7 ~]$ pvremove /dev/sd{b1,c1,e1} # 移除pv,這里提示,
Lables on physical volume "/dev/sdb1" sucdessfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
Labels on physical volume "/dev/sde1" successfully wiped.
導出vg
[root@centos7 ~]$ vgdisplay # 導出前的確認
- Volume group -
VG Name vg_test_01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 24
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 5.99 GiB
PE Size 4.00 MiB
Total PE 1534
Alloc PE / Size 256 / 1.00 GiB
Free PE / Size 1278 / 4.99 GiB
VG UUID sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY
[root@centos7 ~]$ vgexport vg_test_01 # 導出vg發現有激活的設備,需要關閉
Volume group "vg_test_01" has active logical volumes
[root@centos7 ~]$ vgchange -an vg_test_01 # 設置為非激活
0 logical volume(s) in volume group "vg_test_01" now active
[root@centos7 ~]$ vgexport vg_test_01 # 導出, 要看到成功導出才可以,這里注意了, 如果這個vg名字和目標機器有重名的話, 這里使用rename改下在導出
Volume group "vg_test_01" successfully exported
[root@centos7 ~]$ sync # 多執行幾次sync。 防止內存和磁盤沒有同步的問題。
[root@centos7 ~]$ sync
[root@centos7 ~]$ sync
[root@centos7 ~]$ sync
我這里把這個磁盤取出來安裝到另外一個機器上面。下面的一部分操作在新機器上執行。注意啦。
識別硬件
 [root@centos6 ~]$ /git/Bash/other/scan_scsi_device.sh # 執行下掃描硬件腳本,我自己寫的,后面把這個bash腳本貼出來
start scan
/sys/devices/pci0000:00/0000:00:07.1/host0/scsi_host/host0/scan scan finished.
/sys/devices/pci0000:00/0000:00:07.1/host1/scsi_host/host1/scan scan finished.
/sys/devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2/scan scan finished.
end scan
please use lsblk check,
[root@centos6 ~]$ lsblk # 使用lsblk查看,可以發現,識別出來就是那個/dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final
sr1 11:1 1 8.1G 0 rom /media/CentOS 7 x86_64
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 48.8G 0 part /
├─sda3 8:3 0 19.5G 0 part /app
├─sda5 8:5 0 2G 0 part [SWAP]
├─sda4 8:4 0 2M 0 part
└─sda6 8:6 0 1G 0 part
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 20G 0 part
├─sdb3 8:19 0 1G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 20G 0 part
├─sdb6 8:22 0 1G 0 part
└─sdb7 8:23 0 1G 0 part
sr2 11:2 1 3.7G 0 rom /media/CentOS_6.9_Final_
sr3 11:3 1 2G 0 rom /media/CentOS_6.9_Final__
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 1G 0 part
└─sdc2 8:34 0 5G 0 part

腳本內容如下
[root@centos6 ~]$ cat /git/Bash/other/scan_scsi_device.sh
#!/bin/bash
#================================================
#FileName :scan_scsi_device
#Author :zhaojiedi
#Description:如果你添加了一個新的硬盤設備, 但是沒有被系統識別,使用如下腳本可以識別出來,
#DateTime :2017-11-30 18:03:27
#Version :V1.0
#Other :最新版本建議從這里獲取https://github.com/zhaojiedi1992/Bash
#================================================
#!/bin/bash
echo "start scan"
for i in `find /sys/devices/ -name scan` do
echo "- - -" > $i
echo $i scan finished.
done
echo "end scan"
echo -e "\033[32mplease use lsblk check\033[0m"
導入并掛載
[root@centos6 ~]$ vgscan # vg掃描
Reading all physical volumes. This may take a while...
Found exported volume group ", vg_test_01" using metadata type lvm2
[root@centos6 ~]$ pvscan # pv掃描
PV /dev/sdc1 is in exported VG vg_test_01 [1020.00 MiB / 0 free]
PV /dev/sdc2 is in exported VG vg_test_01 [5.00 GiB / 4.99 GiB free]
Total: 2 [5.99 GiB] / in use: 2 [5.99 GiB] / in no VG: 0 [0 ]
[root@centos6 ~]$ vgimport vg_test_01 # 確認無錯誤的就導入。
Volume group "vg_test_01" successfully imported
[root@centos6 ~]$ vgs # 查看下vg信息
VG #PV #LV #SN Attr VSize VFree
vg_test_01 2 1 0 wzn- 5.99g 4.99g
[root@centos6 ~]$ vgchange -ay vg_test_01 # 激活vg
1 logical volume(s) in volume group "vg_test_01" now active
[root@centos6 ~]$ mkdir /mnt/new_test # 創建掛載點
[root@centos6 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/new_test/ # 掛載
[root@centos6 ~]$ du -sh /mnt/new_test/ # 確認文件沒有丟失
45M /mnt/new_test/
快照LVM
分析下當前環境,我把vg移動到centos6上了。一下操作在centos6上執行的。
[root@centos6 ~]$ vgs # 查看下vg信息, 一共6G,還有5G呢。
VG #PV #LV #SN Attr VSize VFree
vg_test_01 2 1 0 wzn- 5.99g 4.99g
[root@centos6 ~]$ pvs # 有2個pv
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg_test_01 lvm2 au 1020.00m 0
/dev/sdc2 vg_test_01 lvm2 au 5, SPAN>.00g 4.99g
我們剛才給/mnt/new_test目錄掛載邏輯卷vg_test_01。假如我們的/mnt/new_test的內容一直在變化。想去備份數據就需要快照卷了。
創建快照
[root@centos6 etc]$ lvcreate -L 500M -s -p r -n vg_test_01_snapshot /dev/vg_test_01/lv_test_01 # -L指定大小, -s 表示創建快照而不是普通邏輯卷,-p r 指定權限為只讀的, -n指定名字
Logical volume "vg_test_01_snapshot" created.
注意: 如果使用的xfs文件系統, 掛載的時候需要加入nouuid,ro選項,且創建快照的時候不能指定-p r選項。具體參考: http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html
模擬一些數據修改操作
[root@centos6 etc]$ echo "zhaojiedi1992" >>/mnt/new_test/zhaojiedi1992.txt # 制作一些修改情況
[root@centos6 etc]$ vim /mnt/new_test/etc/motd
監控快照情況
[root@centos6 ~]$ lvdisplay /dev/vg_test_01/vg_test_01_snapshot
- Logical volume -
LV Path /dev/vg_test_01/vg_test_01_snapshot
LV Name vg_test_01_snapshot
VG Name vg_test_01
LV UUID pZ8x2u-lqPA-uLef-P816-dS8V-wZ0y-PKWWwL
LV Write Access read only #只讀的
LV Creation host, time centos6.magedu.com, 2017-12-02 06:11:56 +0800
LV snapshot status active destination for lv_test_01 # 這是lv_test_01的快照
LV Status available
# open 0
LV Size 1.00 GiB # 快照的總大小
Current LE 256
COW-table size 500.00 MiB
COW-table LE 125
Allocated to snapshot 0.01% # 這個地方可以看當前快照占用情況。
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
掛載快照并備份
[root@centos6 etc]$ mkdir /mnt/test_bak # 創建一個快照掛載目錄
[root@centos6 etc]$ mount /dev/vg_test_01/vg_test_01_snapshot /mnt/test_bak/ # 掛載,因為我們上面創建快照的時候指定-pr只讀的
mount: block device /dev/mapper/vg_test_01-vg_test_01_snapshot is write-protected, mounting read-only
[root@centos6 etc]$ cat /mnt/test_bak/ # 快照后的zhaojiedi1992.txt沒有的。
etc/ lost+found/
[root@centos6 etc]$ cat /mnt/test_bak/etc/motd # 這個地方的文件也是快照前的樣子。沒有問題
Welcom you this system
[root@centos6 etc]$ tar -jcvf /root/test.tar.bz acl selinux xattrs /mnt/test_bak/ # 備份數據趕緊的
移除快照
[root@centos6 etc]$ umount /mnt/test_bak/ # 取消掛載
[root@centos6 etc]$ lvremove /dev/vg_test_01/vg_test_01_snapshot # 移除了快照卷
Do you really want to remove active logical volume vg_test_01_snapshot? [y/n]: y
Logical volume "vg_test_01_snapshot" successfully removed
參考資料
redhat : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/create_lvm-x86
suse : https://www.suse.com/documentation/sles11/stor_admin/data/lvm.html
lvm how to : http://tldp.org/HOWTO/LVM-HOWTO/index.html
|