LVM(逻辑卷管理)

            1.首先就是必须准备几个空闲的分区。更改分区的系统ID。使用的是fdisk命令。下面是我分好的。怎么样分区可以查看之前的怎样分区和更改系统ID的方法点

          

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   fd  Linux raid autodetect
/dev/sdb2         2099200     4196351     1048576   fd  Linux raid autodetect
/dev/sdb3         4196352     6293503     1048576   fd  Linux raid autodetect
/dev/sdb4         6293504    16777215     5241856    5  Extended
/dev/sdb5         6295552     8392703     1048576   8e  Linux LVM
/dev/sdb6         8394752    10491903     1048576   8e  Linux LVM
/dev/sdb7        10493952    12591103     1048576   8e  Linux LVM</span>

  2.我是将/dev/sdb的5到7这个逻辑分区创建成Linux LVM的系统.下来就是创建PV了。顺便介绍以下与PV有关的命令。

     pvcreate  /dev/???     创建PV

     pvremove /dev/???    移除PV

     pvs                             查看都有什么PV

     pvdisplay                    查看每个PV的详细信息

     pvscan                       扫描每个PV

     pvmove                      将某个PV上的信息移除.(在减小VG前的操作)

创建PV

[root@localhost ~]# pvcreate /dev/sdb{5..6}
  Physical volume "/dev/sdb5" successfully created
  Physical volume "/dev/sdb6" successfully created

查看一下PV的详细信息

[root@localhost ~]# pvdisplay
  "/dev/sdb6" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb6
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               cLQFAV-7i5L-ZANZ-Rp17-5yAu-5BVq-ma5SHZ
   
  "/dev/sdb5" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               mUDQqt-ZdFd-j3O4-at2z-l4ej-6His-c0H0eo

简单的查询PV

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb5       lvm2 ---  1.00g 1.00g
  /dev/sdb6       lvm2 ---  1.00g 1.00g

扫描PV

[root@localhost ~]# pvscan
  PV /dev/sdb6         lvm2 [1.00 GiB]
  PV /dev/sdb5         lvm2 [1.00 GiB]
  Total: 2 [2.00 GiB] / in use: 0 [0   ] / in no VG: 2 [2.00 GiB]

3.开始创建VG了。(同样介绍以下与VG相关的命令)

 vgcreate     <vgname>   [-s 数字M]    /dev/???     创建VG(加 -s 指定PE大小。默认4M)

 vgremove    <vgname>         移除VG

 vgextend     <vgname>   /dev/???       扩展VG

 vgreduce    <vgname>   /dev/???        缩小VG

 vgs        查看所有的vg

 vgdisplay    查看vg的详细信息

创建VG

[root@localhost ~]# vgcreate myvg /dev/sdb{5..6}
  Volume group "myvg" successfully created

查看VG的详细信息。

[root@localhost ~]# vgdisplay myvg
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               1.99 GiB
  PE Size               4.00 MiB
  Total PE              510
  Alloc PE / Size       0 / 0   
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               MNVQIj-GpzA-fxDq-zBeE-mO8j-EDDA-i20b3N

扩展VG

[root@localhost ~]# vgextend myvg /dev/sdb7
  Volume group "myvg" successfully extended

缩小一个VG(从VG移除PV时一定要先将PV上的数据移到其他的PV上去,避免数据丢失)

[root@localhost ~]# pvmove /dev/sdb7
  No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdb7
  Removed "/dev/sdb7" from volume group "myvg"

4.好了可以创建LV了(最终的逻辑卷)

  lvcreate  -n LV_name  -L  卷大小            创建逻辑卷LV

  lvremove    /dev/vgname/lvname                       移除LV

  lvextend                          扩大LV

  lvreduce                          缩小LV

  lvs                                   查看LV都有哪些

  lvdisplay                         查看LV的详细信息 

创建LV

[root@localhost ~]# lvcreate -n mylv -L 2000M myvg
  Logical volume "mylv" created.

格式化LV,并挂在使用

[root@localhost ~]# mkfs.xfs /dev/myvg/mylv 
meta-data=/dev/myvg/mylv         isize=256    agcount=4, agsize=128000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=512000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/myvg/mylv /mnt/lvm

查看一下LV是否被挂载

[root@localhost ~]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.3G   14G  24% /
devtmpfs              devtmpfs  1.4G     0  1.4G   0% /dev
tmpfs                 tmpfs     1.4G  144K  1.4G   1% /dev/shm
tmpfs                 tmpfs     1.4G  9.0M  1.4G   1% /run
tmpfs                 tmpfs     1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  199M   98M  68% /boot
/dev/md0              xfs      1020M   33M  988M   4% /mnt/md0
/dev/sr0              iso9660   4.1G  4.1G     0 100% /mnt/cdrom
tmpfs                 tmpfs     280M   20K  280M   1% /run/user/0
/dev/mapper/myvg-mylv xfs       2.0G   33M  2.0G   2% /mnt/lvm

查看LV的详细信息

[root@localhost ~]# lvdisplay /dev/myvg/mylv
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                6QgSCw-bDjJ-yaoJ-a7nO-IOGB-eTJe-oVObZb
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-10-28 17:08:20 +0800
  LV Status              available
  # open                 1
  LV Size                1.95 GiB
  Current LE             500
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

移除LV(移除前需要卸载)

[root@localhost ~]# lvremove /dev/myvg/mylv 
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

重点来啦(怎么实现LV的扩展。缩小。快照)

实现LV的扩展:

        (前提:文件系统的边界不可以超越物理边界)     

  lv的扩展用lvextend ,文件系统的扩展用xfs_growfs(以CentOS7的默认文件系统xfs为例)

 lvextend  -L  [+]#  /PATH/VG/LV   (物理边界)#代表大小

  xfs_growfs   /PATH/VG/LV    (文件系统的边界)

下面演示一下处在挂载状态时的Lv扩展

1.先查看一下我的LVM有多大

[root@localhost lvm]#  df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.3G   14G  24% /
devtmpfs              devtmpfs  1.4G     0  1.4G   0% /dev
tmpfs                 tmpfs     1.4G  144K  1.4G   1% /dev/shm
tmpfs                 tmpfs     1.4G  9.0M  1.4G   1% /run
tmpfs                 tmpfs     1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  199M   98M  68% /boot
/dev/md0              xfs      1020M   33M  988M   4% /mnt/md0
/dev/sr0              iso9660   4.1G  4.1G     0 100% /mnt/cdrom
tmpfs                 tmpfs     280M   20K  280M   1% /run/user/0
/dev/mapper/myvg-mylv xfs       2.0G   33M  2.0G   2% /mnt/lvm

2.好了。添加PV,并加入VG中

[root@localhost lvm]# pvs
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/sdb5  myvg lvm2 a--  1020.00m     0 
  /dev/sdb6  myvg lvm2 a--  1020.00m 40.00m
  /dev/sdb7       lvm2 ---     1.00g  1.00g
[root@localhost lvm]# vgextend myvg /dev/sdb7
  Volume group "myvg" successfully extended

3.将VG的添加至LV。使得LV的物理边界扩大

[root@localhost lvm]# lvextend -L +1G /dev/myvg/mylv 
  Size of logical volume myvg/mylv changed from 1.95 GiB (500 extents) to 2.95 GiB (756 extents).
  Logical volume mylv successfully resized.

4.扩展文件系统的边界。

[root@localhost lvm]# xfs_growfs /dev/myvg/mylv 
meta-data=/dev/mapper/myvg-mylv  isize=256    agcount=4, agsize=128000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=512000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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 512000 to 774144

5.查看。看吧。文件系统在没卸载的情况下被扩展成了3G

[root@localhost lvm]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.3G   14G  24% /
devtmpfs              devtmpfs  1.4G     0  1.4G   0% /dev
tmpfs                 tmpfs     1.4G  144K  1.4G   1% /dev/shm
tmpfs                 tmpfs     1.4G  9.0M  1.4G   1% /run
tmpfs                 tmpfs     1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  199M   98M  68% /boot
/dev/md0              xfs      1020M   33M  988M   4% /mnt/md0
/dev/sr0              iso9660   4.1G  4.1G     0 100% /mnt/cdrom
tmpfs                 tmpfs     280M   20K  280M   1% /run/user/0
/dev/mapper/myvg-mylv xfs       3.0G   33M  3.0G   2% /mnt/lvm

6.(注意,这个扩展过程不威胁该文件系统的原有数据)

下面LVM的缩小

注意:1.不能在线缩小,缩小前需要卸载

         2.确保缩小后的空间大小依然可以存放文件系统

         3.在缩小前应该强行检查文件,以确保文件系统处于一致性。

但是很不幸CentOS的xfs 似乎不能被缩小,所以我又重新将/dev/myvg/mylv格式化为ext4来做这次演示

1.看看现在的大小

[root@localhost mnt]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.3G   14G  24% /
devtmpfs              devtmpfs  1.4G     0  1.4G   0% /dev
tmpfs                 tmpfs     1.4G  528K  1.4G   1% /dev/shm
tmpfs                 tmpfs     1.4G  9.0M  1.4G   1% /run
tmpfs                 tmpfs     1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  199M   98M  68% /boot
/dev/md0              xfs      1020M   33M  988M   4% /mnt/md0
/dev/sr0              iso9660   4.1G  4.1G     0 100% /mnt/cdrom
tmpfs                 tmpfs     280M   28K  280M   1% /run/user/0
/dev/mapper/myvg-mylv ext4      2.4G  6.0M  2.3G   1% /mnt/lvm

2.先卸载,再强制检查文件

[root@localhost mnt]# umount /dev/myvg/mylv 
[root@localhost mnt]# e2fsck -f /dev/myvg/mylv 
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/myvg/mylv: 11/163840 files (0.0% non-contiguous), 28212/655360 blocks

3.缩小文件系统

[root@localhost mnt]# resize2fs /dev/myvg/mylv 1G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 262144 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 262144 blocks long.

4.缩小物理边界

[root@localhost mnt]# lvreduce -L 1G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 1.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 2.50 GiB (640 extents) to 1.00 GiB (256 extents).
  Logical volume mylv successfully resized.

5.查看文件系统大小(真的缩小了)

[root@localhost mnt]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.3G   14G  24% /
devtmpfs              devtmpfs  1.4G     0  1.4G   0% /dev
tmpfs                 tmpfs     1.4G  528K  1.4G   1% /dev/shm
tmpfs                 tmpfs     1.4G  9.0M  1.4G   1% /run
tmpfs                 tmpfs     1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  199M   98M  68% /boot
/dev/md0              xfs      1020M   33M  988M   4% /mnt/md0
/dev/sr0              iso9660   4.1G  4.1G     0 100% /mnt/cdrom
tmpfs                 tmpfs     280M   28K  280M   1% /run/user/0
/dev/mapper/myvg-mylv ext4      944M  5.1M  874M   1% /mnt/lvm

LVM的快照卷

1.生命周期内为整个数据时长,数据增长量不能超出快照卷的大小

2.快照卷的创建需要创建成只读模式

3.快照卷和原卷在同一个卷组内

lvcreate

     -s

     -p  r|w

给原文件加点东西再拍快照

[root@localhost lvm]# ls
issue  login.defs  lost+found

lvcreate -L # -n SLV_NAME -p r  /PATH/VG/LV

[root@localhost mnt]# lvcreate -L 50M -n mylv_snap -s -p r /dev/myvg/mylv
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mylv_snap" created.

改变一下原磁盘内容

[root@localhost lvm]# ls
issue  login.defs  lost+found
[root@localhost lvm]# rm issue -f
[root@localhost lvm]# echo "王八蛋" >> login.defs

再挂载起来。

[root@localhost mnt]# mkdir /mnt/snap
[root@localhost mnt]# mount /dev/myvg/mylv_snap  !*
mount /dev/myvg/mylv_snap  /mnt/snap
mount: /dev/mapper/myvg-mylv_snap is write-protected, mounting read-only
[root@localhost mnt]#

进入挂载目录发现源文件都还在。而且login.defs这个文件还在

[root@localhost lvm]# cd /mnt/snap/
[root@localhost snap]# ls
issue  login.defs  lost+found
[root@localhost snap]# tail login.defs 
UMASK           077

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes

# Use SHA512 to encrypt password.
ENCRYPT_METHOD MD5

MD5_CRYPT_ENAB yes

恢复快照卷的操作

1.进入快照目录。打包其中的内容

[root@localhost snap]# tar jcf /mnt/snap.tar.bz2 issue login.defs 
[root@localhost snap]# cd ../

注意。快照是只读的。打包路径别放到快照这了。

2.卸载快照卷。并删除

[root@localhost mnt]# umount /mnt/snap
[root@localhost mnt]# lvremove /dev/myvg/mylv-snap 
Do you really want to remove active logical volume mylv-snap? [y/n]: y
  Logical volume "mylv-snap" successfully removed

3.解压缩至原LV的目录(还原)

[root@localhost lvm]# ls
login.defs  lost+found
[root@localhost lvm]# tar xf /mnt/snap.tar.bz2 -C .
[root@localhost lvm]# ls
issue  login.defs  lost+found

OK拉