一、什么是LVM?

    LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以实现一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。 

   dm模块:device mapper 设备映射组件,能够将一个或者多个底层设备组织成一个逻辑设备的模块。

二、 LVM基本术语

前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

      物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。

物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

      卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

      逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

      PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

      LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

由N个磁盘可以组成一个很大的空间VG1,然后从VG1上面划分需要使用的分区。

     1. PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区,如上图所示: 几个LV建立在VG上,VG建立在PV之上,PV是物理卷,可以是整块硬盘或者硬盘分区。       

     2.VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。   

     3.LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。

LVM解析_第1张图片

1、查看系统中新增加的硬盘

[root@ads3 ~]# fdisk -l

2、在/dev/sdb上划分4个10G分区备用这里分区格式需要调整为8e  【8e  Linux LVM 】

分别是sdb1,sdb5,6,7

[root@ads3 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2838e1c6
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  8e  Linux LVM
/dev/sdb2            1307       13054    94365810    5  Extended
/dev/sdb5            1307        2612    10490413+  8e  Linux LVM
/dev/sdb6            2613        3918    10490413+  8e  Linux LVM
/dev/sdb7            3919        5224    10490413+  8e  Linux LVM

3.介绍pv管理工具

pvs  简要pv信息显示

pvdisplay  显示PV的详细信息

pvcreate   /dev/device

创建PV,查看PV,查看PV的详细信息

[root@ads3 ~]# pvcreate /dev/sdb7

[root@ads3 ~]# pvdisplay

如果想查看某个具体的pv,可以    pvdisplay   /dev/sdb7

4 VG的管理工具

vgs 可以简要显示所有卷组

vgdisplay   可以显示详细信息

vgcreate  创建vg

创建vg,查看vg

[root@ads3 ~]# vgcreate myvg /dev/sdb7
[root@ads3 ~]# vgdisplay myvg
--- Volume group ---
VG Name               myvg
System ID
Format                lvm2
Metadata Areas        1
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                1
Act PV                1
VG Size               10.00 GiB
PE Size               4.00 MiB
Total PE              2560
Alloc PE / Size       0 / 0
Free  PE / Size       2560 / 10.00 GiB
VG UUID               IqtLDN-aRmA-Wmzc-6EYw-GooA-fcz6-6JUFzg
这里可以看到 PE的大小为4M,此时再查看pv状态,发现PE的大小就已经确定
[root@ads3 ~]# pvdisplay  /dev/sdb7
--- Physical volume ---
PV Name               /dev/sdb7
VG Name               myvg
PV Size               10.00 GiB / not usable 4.54 MiB
Allocatable           yes
PE Size               4.00 MiB
Total PE              2560
Free PE               2560
Allocated PE          0
PV UUID               SXyy1i-qb1j-ixlk-Q1js-RPT8-CaWN-WWhmBt

通过使用命令pvs发现我们已经创建了三个pv

[root@ads3 ~]# pvs
PV         VG   Fmt  Attr PSize  PFree
/dev/sdb7  myvg lvm2 a--u 10.00g 10.00g
/dev/sdb8       lvm2 ----  3.01g  3.01g
/dev/sdb9       lvm2 ---- 20.01g 20.01g

现在我们扩展下VG的大小,并查看发现myvg已经变大

[root@ads3 ~]# vgextend myvg /dev/sdb8
[root@ads3 ~]# vgdisplay myvg

移除pv,使用命令pvmove    命令如: pvmove /dev/sdb8,然后再vgreduce myvg 、dev/sdb8,从VG当中移除,此命令在生产环境中操作极具风险性,所以不再演示操作,也不建议大家以后操作

LV管理工具

lvs

lvdisplay

lvcreate  -L #[mMgGtT]   -n NAME VolumeGroup

在myvg当中创建一个mylv,指定大小为11.3G 指定名字为mylv

[root@ads3 ~]# lvcreate -L 11.3G -n mylv myvg

创建完成lv之后就可以像软raid分区一样,格式化挂载使用了

[root@ads3 ~]# mkfs -t ext4 -b 2048 -L mylv /dev/myvg/mylv

创建目录并将mylv挂载

[root@ads3 mapper]# mkdir /backup003
[root@ads3 mapper]# mount /dev/mapper/myvg-mylv /backup003

进入目录,然后下载两个文件并查看


[root@ads3 mapper]# cd /backup003
[root@ads3 backup003]# wget http://down1.chinaunix.net/distfiles/httpd-2.2.0.tar.bz2
[root@ads3 backup003]# wget http://down1.chinaunix.net/distfiles/nginx-1.2.5.tar.gz
[root@ads3 backup003]# ls
httpd-2.2.0.tar.bz2  lost+found  nginx-1.2.5.tar.gz


扩展逻辑卷 lvextend -L [+][mMgGtT] /dev/VG_NAME/LV_NAME

[root@ads3 backup003]# vgextend myvg /dev/sdb9
Volume group "myvg" successfully extended
[root@ads3 backup003]# vgdisplay
--- Volume group ---
VG Name               myvg
System ID
Format                lvm2
Metadata Areas        3
Metadata Sequence No  4
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                3
Act PV                3
VG Size               33.02 GiB
PE Size               4.00 MiB
Total PE              8452
Alloc PE / Size       2893 / 11.30 GiB
Free  PE / Size       5559 / 21.71 GiB
VG UUID               IqtLDN-aRmA-Wmzc-6EYw-GooA-fcz6-6JUFzg

将lv扩展到20G的大小

[root@ads3 backup003]# lvextend -L 20G /dev/mapper/myvg-mylv 
Size of logical volume myvg/mylv changed from 11.30 GiB (2893 extents) to 20.00 GiB (5120 extents).
Logical volume mylv successfully resized.

扩展lv首先是lv的大小扩展,然后是文件系统的扩展,即先修改物理便捷,在修改逻辑边界

[root@ads3 backup003]# resize2fs /dev/mapper/myvg-mylv

然后进行解除挂载,重新挂载

[root@ads3 ~]# umount /dev/mapper/myvg-mylv
[root@ads3 ~]# mount /dev/mapper/myvg-mylv /backup003

然后可以看到目录大小已经改变

[root@ads3 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              48G  1.7G   44G   4% /
tmpfs                 931M     0  931M   0% /dev/shm
/dev/sda1             1.9G   76M  1.8G   5% /boot
/dev/sda3              20G   44M   19G   1% /data
/dev/mapper/myvg-mylv
20G   20M   19G   1% /backup003

缩减逻辑卷,危险性较大,不建议操作,不允许联机进行的

1   umount  /dev/VG_NAME/LV_NAME

2   做文件系统检测  e2fsck -f    /dev/VG_NAME/LV_NAME

3   修改其逻辑边界,resize2fs /dev/mapper/myvg-mylv  #[mMgGtT] 并指明缩减至多大

4   lvreduce -L [-] ##[mMgGtT]  /dev/mapper/myvg-mylv

5    mount /dev/mapper/myvg-mylv /backup003

示例:

[root@ads3 ~]# umount /dev/mapper/myvg-mylv
[root@ads3 ~]#  e2fsck -f   /dev/mapper/myvg-mylv
e2fsck 1.41.12 (17-May-2010)
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
mylv: 13/1310720 files (0.0% non-contiguous), 207882/10485760 blocks
[root@ads3 ~]# resize2fs /dev/mapper/myvg-mylv 12G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/myvg-mylv to 6291456 (2k) blocks.
The filesystem on /dev/mapper/myvg-mylv is now 6291456 blocks long.
[root@ads3 ~]# lvreduce -L 12G /dev/mapper/myvg-mylv
WARNING: Reducing active logical volume to 12.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 20.00 GiB (5120 extents) to 12.00 GiB (3072 extents).
Logical volume mylv successfully resized.
[root@ads3 ~]# mount /dev/mapper/myvg-mylv /backup003
[root@ads3 ~]# cd /backup003
[root@ads3 backup003]# ls
httpd-2.2.0.tar.bz2  lost+found  nginx-1.2.5.tar.gz

文件系统挂载使用: 挂载光盘设备,光盘设备文件是/dev/sr0,而符号链接文件一般为 /dev/cdrom

[root@ads3 ~]# mount -o ro /dev/sr0 /mnt   以只读的方式挂载光驱,卸载光驱文件系统  umount   /dev/sr0

dd命令的使用,用法是  dd   if  = 源文件    of  =  目标文件 ;bs 复制单元大小,count= n 复制多少个bs

实例如下:

[root@ads3 ~]# dd if=/etc/fstab of=/tmp/fstab2 bs=1 count=10

备份mbr      [root@ads3 ~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR    [root@ads3 ~]# dd if=/dev/zero  of=/dev/sda  bs=512 count=1

两个特殊设备:

/dev/null   数据黑洞   /dev/zero   字符制造

一种挂载光盘镜像文件的合理方式:

步骤说明:

1 下载光盘镜像至backup003目录;

2 查看目录下的镜像文件  

3 挂载镜像文件至/mnt下   

4 查看

[root@ads3 backup003]# wget     
--2018-02-26 15:31:30--  http://mirrors.163.com/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso
Resolving mirrors.163.com... 59.111.0.251
Connecting to mirrors.163.com|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4521459712 (4.2G) [application/octet-stream]
Saving to: “CentOS-7-x86_64-DVD-1708.iso”
100%[=================================================================================================================>] 4,521,459,712 10.7M/s   in 6m 45s  
2018-02-26 15:38:15 (10.7 MB/s) - “CentOS-7-x86_64-DVD-1708.iso” saved [4521459712/4521459712]
[root@ads3 backup003]# ls
CentOS-7-x86_64-DVD-1708.iso  httpd-2.2.0.tar.bz2  lost+found  nginx-1.2.5.tar.gz
[root@ads3 backup003]# mount CentOS-7-x86_64-DVD-1708.iso /mnt -o loop
[root@ads3 backup003]# cd /mnt
[root@ads3 mnt]# ls
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
[root@ads3 mnt]# ll
total 664
-rw-rw-r--. 3 root root     14 Sep  5 13:25 CentOS_BuildTag
drwxr-xr-x. 3 root root   2048 Sep  5 13:36 EFI
-rw-rw-r--. 3 root root    227 Aug 30 14:33 EULA
-rw-rw-r--. 3 root root  18009 Dec  9  2015 GPL
drwxr-xr-x. 3 root root   2048 Sep  5 13:46 images
drwxr-xr-x. 2 root root   2048 Sep  5 13:36 isolinux
drwxr-xr-x. 2 root root   2048 Sep  5 13:36 LiveOS
drwxrwxr-x. 2 root root 641024 Sep  4 22:05 Packages
drwxr-xr-x. 2 root root   4096 Sep  5 13:43 repodata
-rw-rw-r--. 3 root root   1690 Dec  9  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 3 root root   1690 Dec  9  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root   2883 Sep  6 10:51 TRANS.TBL