linux磁盤管理系列三:LVM的使用

linux磁盤管理系列三:LVM的使用

LVM是什麼

LVM是Linux操做系統的邏輯卷管理器。 如今有兩個Linux版本的LVM,分別是 LVM1,LVM2。LVM1是一種已經被認爲穩定了幾年的成熟產品,LVM2 是最新最好的LVM版本。 LVM2幾乎徹底向後兼容使用LVM1建立的卷。此例外是快照(在升級到LVM 2以前,必須刪除快照卷)。html

LVM簡介

邏輯卷管理提供了比傳統的磁盤和分區視圖更高級別的計算機系統上磁盤存儲的視圖。 這使得系統管理員能夠更靈活地將存儲分配給應用程序和用戶。node

在邏輯卷管理器的控制下建立的存儲卷能夠隨意調整大小和移動,儘管這可能須要對文件系統工具進行一些升級。linux

邏輯卷管理器還容許管理用戶定義組中的存儲卷,容許系統管理員處理明顯命名的卷組(如「development」和「sales」),而不是物理磁盤名稱,例如「sda」和「sdb」git

LVM基本術語

volume group (VG) 

卷組是LVM中使用的最高級別的抽象。 它將邏輯卷和物理卷集合在一塊兒成爲一個管理單元。github

physical volume (PV)

一個物理卷一般是一個硬盤,雖然它可能只是一個看起來像一個硬盤(如軟件RAID設備)的設備。vim

logical volume (LV)

至關於非LVM系統中的磁盤分區。 LV做爲標準塊設備可見; 所以LV能夠包含文件系統(例如/ home)。centos

physical extent (PE) 

每一個物理卷都被劃分爲數據塊(稱爲物理擴展盤區),這些擴展盤區與卷組的邏輯盤區具備相同的大小。bash

logical extent (LE)

每一個邏輯卷都被分割成數據塊,稱爲邏輯盤區。 卷組中的全部邏輯卷的區段大小都是相同的。app

幾個概念的關係

一個具體的例子將有助於:ide

假設咱們有一個名爲VG1的卷組,這個卷組的物理盤區大小爲4MB。 在這個卷組中,咱們引入了2個硬盤分區/dev/hda1和/dev/hdb1。 
這些分區將成爲物理卷PV1和PV2(管理員能夠自行決定是否提供更有意義的名稱)。
PV被分紅4MB塊,由於這是卷組的大小。磁盤大小不一樣,咱們在PV1中得到99個擴展盤區,在PV2中得到248個擴展盤區。 
咱們如今能夠建立本身的邏輯卷,它能夠是1到347(248 + 99)範圍之間的任何大小。 
當建立邏輯卷時,在邏輯盤區和物理盤區之間定義映射,例如, 邏輯盤區1能夠映射到PV1的物理盤區51上,寫入邏輯盤的第一個4MB的數據實際上被寫入到PV1的第51盤區。

映射模式

線性映射 : 將分配必定範圍的PE到LV的一個區域,例如LE 1 - 99映射到PV1,LE 100 - 347映射到PV2。

分條映射 : 將跨多個物理卷交織邏輯盤區的塊,這個方式必定程度上提升了性能,具體以下

  1st chunk of LE[1] -> PV1[1], #第一個邏輯塊在PV1設備上, 第二個在PV2設備上,等等。
  2nd chunk of LE[1] -> PV2[1],
  3rd chunk of LE[1] -> PV3[1],
  4th chunk of LE[1] -> PV1[2],

Snapshots(快照):

這是LVM提供的一個很是棒的功能就是快照了,他容許管理員建立一個新的塊設備來呈現一個邏輯卷的的精確副本,在某個時間凍結,管理員能夠及時備份指定一致狀態下的數據,備份完畢就能夠刪除設備了。

快照最初包含有關快照的一些元數據,但沒有來自源邏輯卷的實際數據。快照使用寫時複製(copy on write)技術來檢測數據在原始數據塊中什麼時候更改。它將拍攝快照時保存的值複製到快照卷中的塊中,而後容許將新數據存儲在源塊中。

隨着更多塊從源邏輯捲上的原始值發生更改,快照大小也會增長。若是快照卷變滿,它將被丟棄,因此分配足夠的空間是很是重要的,具體取決於你數據的變換狀況,若是快照大小和原始數據同樣大,它將永遠不會溢出的。

安裝LVM

[root@centos7 ~]$ rpm -q lvm2                           # 查看lvm2是否安裝了, 我使用的centos7,這是安裝的了
lvm2-2.02.171-8.el7.x86_64
[root@centos7 ~]$ # yum -y install lvm2                 # 沒有安裝的話使用yum安裝

經常使用命令簡介

複製代碼

[root@centos7 ~]$ pv                                                   # 使用tab按鍵獲取pv相關命令
pvchange   pvck       pvcreate   pvdisplay  pvmove     pvremove   pvresize   pvs        pvscan
[root@centos7 ~]$ vg                                                   # 使用tabl按鍵獲取vg相關的命令
vgcfgbackup    vgck           vgdisplay      vgimport       vgmknodes      vgrename       vgsplit
vgcfgrestore   vgconvert      vgexport       vgimportclone  vgreduce       vgs            
vgchange       vgcreate       vgextend       vgmerge        vgremove       vgscan         
[root@centos7 ~]$ lv                                                   # 使用tabl按鍵獲取lv先關的命令
lvchange     lvdisplay    lvmconf      lvmdump      lvmsadc      lvremove     lvs          
lvconvert    lvextend     lvmconfig    lvmetad      lvmsar       lvrename     lvscan       
lvcreate     lvm          lvmdiskscan  lvmpolld     lvreduce     lvresize

複製代碼

上面的命令比較多,簡單介紹幾個經常使用的命令。

  • pv打頭的:表明pv相關的命令
  • vg帶頭的:表明vg相關的命令
  • lv帶頭的: 表明lv相關的命令
  • create:建立相關
  • remove:移除相關
  • display:顯示相關
  • import:導入 相關
  • export:導出相關
  • rename:重命名
  • vgchange:改變狀態相關
  • extend:擴展相關
  • reduce:縮進相關

使用LVM

pv建立

pv做用:初始化磁盤和磁盤分區

在將磁盤或者磁盤分區用做物理卷(PV)以前,你須要對其進行初始化工做。

[root@centos7 ~]$ pvcreate /dev/sdb1

注意:

  1. 不建議對整個磁盤作PV初始化工做。由於其餘操做系統不能識別LVM元數據,致使咱們認爲磁盤是空閒的,從新設置分區覆蓋原有數據
  2.  若是是分區須要調整分區的類型爲LVM(代碼爲8e)

分區並設置分區類型

複製代碼

[root@centos7 ~]$ fdisk -l

Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b0b8a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   270534655   134217728   83  Linux
/dev/sda3       270534656   372934655    51200000   83  Linux
/dev/sda4       372934656   419430399    23247872    5  Extended
/dev/sda5       372938752   413898751    20480000   83  Linux

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x93d380cf

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   8e  Linux LVM
/dev/sdb2         2099200     4196351     1048576   8e  Linux LVM

Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x73afb36f

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1            2048     2099199     1048576   8e  Linux LVM
/dev/sde2         2099200     6293503     2097152   8e  Linux LVM

Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7e0900d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048     2099199     1048576   8e  Linux LVM
/dev/sdd2         2099200    12584959     5242880   8e  Linux LVM

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc56b90d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   8e  Linux LVM
/dev/sdc2         2099200     4196351     1048576   8e  Linux LVM

Disk /dev/sdf: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@centos7 ~]$ partprobe 
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@centos7 ~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  128G  0 part 
├─sda3   8:3    0 48.8G  0 part /
├─sda4   8:4    0  512B  0 part 
└─sda5   8:5    0 19.5G  0 part /app
sdb      8:16   0  100G  0 disk 
├─sdb1   8:17   0    1G  0 part 
└─sdb2   8:18   0    1G  0 part 
sdc      8:32   0   20G  0 disk 
├─sdc1   8:33   0    1G  0 part 
└─sdc2   8:34   0    1G  0 part 
sdd      8:48   0   20G  0 disk 
├─sdd1   8:49   0    1G  0 part 
└─sdd2   8:50   0    5G  0 part 
sde      8:64   0   20G  0 disk 
├─sde1   8:65   0    1G  0 part 
└─sde2   8:66   0    2G  0 part 
sdf      8:80   0   20G  0 disk 
sr0     11:0    1  8.1G  0 rom  /run/media/root/CentOS 7 x86_64

複製代碼

上面咱們在/dev/sd{b,c,d,e}這4個盤每一個都有2個類型爲lvm的盤。接下來使用pvcreat初始化爲物理卷

複製代碼

[root@centos7 ~]$ pvcreate /dev/sd{b1,b2,c1,c2,d1,d2,e1,e2} -y        # 這裏加入了-y選項,以前的盤有文件系統的。 我這裏強制建立了
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Wiping xfs_external_log signature on /dev/sdb2.
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdc2" successfully created.
  Physical volume "/dev/sdd1" successfully created.
  Physical volume "/dev/sdd2" successfully created.
  Physical volume "/dev/sde1" successfully created.
  Physical volume "/dev/sde2" successfully created.

複製代碼

pv信息查看

複製代碼

[root@centos7 ~]$ pvs                                           # 詳細信息可使用pvdisplay查看
  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 1020.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

複製代碼

vg建立

vg的建立是比較簡單的。

[root@centos7 ~]$ vgcreate  vg_test_01 /dev/sd{b1,c1,d1,e1}    # 上面咱們建立了8個pv,這裏咱們使用4個1的設備去建立vg,建立後默認vg是激活狀態的
  Volume group "vg_test_01" successfully created

vg信息的查看

複製代碼

[root@centos7 ~]$ vgs                                 # 查看簡短的信息
  VG         #PV #LV #SN Attr   VSize VFree
  vg_test_01   4   0   0 wz--n- 3.98g 3.98g
[root@centos7 ~]$ vgdisplay                           # 查看詳細的信息
  --- Volume group ---
  VG Name               vg_test_01                    # vg的名字
  System ID             
  Format                lvm2                          # lvm格式, 這裏是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               3.98 GiB                       # 這是咱們4個pv的總大小
  PE Size               4.00 MiB                       # pe的大小
  Total PE              1020
  Alloc PE / Size       0 / 0                          # 分配的大小,這裏咱們尚未建立lv,因此爲0
  Free  PE / Size       1020 / 3.98 GiB                # 分配後剩餘的空間,第一個數是剩餘的個數,第二個數是剩餘的空間大小,2個都是剩餘的只是單位表示不同而已
  VG UUID               Y5NjjP-e3Aq-3u6E-gw6P-fLyy-Y5pN-ryyN9R  # vg設備的uuid

複製代碼

vg的激活

[root@centos7 ~]$ vgchange -a y vg_test_01                               # 咱們上面就是激活狀態的,若是咱們重啓系統,或者vgchange -y n命令關閉了,就須要這個命令啓動下
  0 logical volume(s) in volume group "vg_test_01" now active

vg的移除

[root@centos7 ~]$ vgchange -a n vg_test_01                       # 要想移除vg,須要先關閉vg才能移除,這裏先關閉
  0 logical volume(s) in volume group "vg_test_01" now active
[root@centos7 ~]$ vgremove  vg_test_01                           # 移除vg,

vg的添加成員

[root@centos7 ~]$ vgcreate  vg_test_01 /dev/sd{b1,c1,d1,e1}       # 上面我把vg刪了,這裏從新添加進來
  Volume group "vg_test_01" successfully created
[root@centos7 ~]$ vgextend vg_test_01  /dev/sdb2                  # 添加一個pv2到vg中來
  Volume group "vg_test_01" successfully extended

vg的刪除成員

這個操做須要使用vgdisplay查看vg的使用狀況和刪除的pv上沒有數據。若是有使用pvmove遷移完畢數據才能移除。

[root@centos7 ~]$ vgreduce  vg_test_01  /dev/sdb2
  Removed "/dev/sdb2" from volume group "vg_test_01"

lv的建立

複製代碼

[root@centos7 ~]$ vgdisplay                        # lv邏輯卷建立以前, 須要查看下vg信息
  --- Volume group ---
  VG Name               vg_test_01
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  3
  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               3.98 GiB
  PE Size               4.00 MiB
  Total PE              1020
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1020 / 3.98 GiB
  VG UUID               sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY
   
[root@centos7 ~]$ lvcreate -L 2G  -n lv_test_01 vg_test_01                 # 咱們的vg是近4G的,我這裏建立一個2G的lv,以前磁盤使用了文件系統慈愛有以下警告。輸入y便可。
WARNING: linux_raid_member signature detected on /dev/vg_test_01/lv_test_01 at offset 4096. Wipe it? [y/n]: y
  Wiping linux_raid_member signature on /dev/vg_test_01/lv_test_01.
WARNING: ext4 signature detected on /dev/vg_test_01/lv_test_01 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/vg_test_01/lv_test_01.
  Logical volume "lv_test_01" created.

複製代碼

lv的移除

[root@centos7 ~]$ lvremove  /dev/vg_test_01/lv_test_01     
# 這個移除咱們上面建立lv_test_01這個邏輯卷, 下面提示這個是活動的邏輯卷,輸入y就能夠了
Do you really want to remove active logical volume vg_test_01/lv_test_01? [y/n]: y
  Logical volume "lv_test_01" successfully removed

注意: 若是這個lv被掛載了。 請先umount

掛載文件系統

複製代碼

[root@centos7 ~]$ lvcreate -L 2G  -n lv_test_01 vg_test_01                             # 上面咱們刪除了lv,這裏須要建立出來
  Logical volume "lv_test_01" created.
[root@centos7 ~]$ mkfs.ext4  /dev/vg_test_01/lv_test_01                                  # 這裏我使用ext4 文件系統了。centos7默認使用的文件系統是xfs,可是xfs不支持縮減的

[root@centos7 ~]$ mkdir /mnt/test_01                                                    # 建立掛載點目錄
[root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01  /mnt/test_01/                       # 掛載邏輯卷

複製代碼

擴展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

複製代碼

注意:

  1.    ext系列可使用resieze2fs去調整。其餘的文件系統能夠參考http://tldp.org/HOWTO/LVM-HOWTO/extendlv.html
  2.    lvextentd 有個-r選項,自動去調整大小,匹配lv和文件系統大小的。

縮減LVM

邏輯卷的大小能夠減少,也能夠增長。 可是,在縮小卷自己以前,請記住縮小文件系統的大小或存在於卷中的任何文件是很是重要的,不然可能會丟失數據。

注意: xfs,jsf文件系統是無法縮減lvm的,由於這2個文件系統無法縮減文件系統大小的。參考http://tldp.org/HOWTO/LVM-HOWTO/reducelv.html

主要步驟:

  1.   檢查空間使用狀況和分析
  2.   umount設備
  3.   縮減文件系統大小
  4.   縮減lv大小
  5.   恢復掛載設備

上面咱們的邏輯卷是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到另一個機器上

主要步驟:

  1.   檢查和分析
  2.        一些預處理工做
  3.        umount文件系統
  4.   設置卷組非活動
  5.   導出卷組
  6.   取出設備,插入到新機器
  7.   導入卷組
  8.   激活卷組
  9.   掛載文件系統

檢查分析

複製代碼

[root@centos7 ~]$ vgs
  VG         #PV #LV #SN Attr   VSize VFree
  vg_test_01   4   1   0 wz--n- 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 wz--n- 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 wz--n- 5.99g 4.99g
[root@centos6 ~]$ pvs                                       # 有2個pv
  PV         VG         Fmt  Attr PSize    PFree
  /dev/sdc1  vg_test_01 lvm2 a--u 1020.00m    0 
  /dev/sdc2  vg_test_01 lvm2 a--u    5.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

相關文章
相關標籤/搜索