参考资料列表

本文部分资料参考自以下列表

  • https://www.ibm.com/developerworks/cn/linux/l-lvm2/ 比较详细地描述了Linux 逻辑卷的管理

  • https://linux.die.net/man/8/lvm Linux LVM2工具手册

本文将从以下几个方面介绍LVM

  • 什么是逻辑卷

  • 逻辑卷的结构

  • 逻辑卷的管理

  • 迁移逻辑卷到新的系统

  • 删除逻辑卷

  • 逻辑卷快照

什么是逻辑卷

逻辑卷管理(LVM)指系统将物理卷管理抽象到更高的层次,常常会形成更简单的管理模式。与物理磁盘和分区不同,逻辑卷展现给我们的是逻辑上的存储结构。LVM 可以将分区和磁盘聚合成一个虚拟磁盘(virtual disk),从而用小的存储空间组成一个统一的大空间。这个虚拟磁盘在 LVM 术语中称为卷组(volume group)

将众多比较小的物理磁盘设备组织起来创建一个比单个磁盘本身还要大的文件系统,并不是LVM的唯一用途,它还可以

  • 在磁盘列表中添加磁盘和分区,对现有的文件系统进行扩展。

  • 用一个 160GB 磁盘替换两个 80GB 磁盘,而不需要让系统离线,也不需要在磁盘之间手工转移 。

  • 当存储空间远大于我们所需要的空间的时候,我们可以将物理硬盘从磁盘列表中去掉,从而减少存储空间。

  • 使用快照(snapshot)执行一致的备份(本文后面会进一步讨论)

为了理解起来更加的形象,我们来思考这样一个问题,假设我们一共有三个物理硬盘,容量分别是200G,100G,80G,我们如何来创建一个大于300G的文件系统呢?在没有接触到LVM之前,我们恐怕是将这个三个硬盘挂载到系统中,然后进行分区,创建文件系统来使用。比如下图这样。

但是这样的分区模式有些时候是没有办法满足我们的需求的,我们想要的是一个完整的300G的独立文件系统,而此时使用LVM就能够实现这样的设计。

物理磁盘到逻辑的映射

如图所示,我们从逻辑上实现了 创建了一个大于300G的文件系统,而且在用户看来,根本不清楚底层一共有多少个硬盘,只知道有一个文件系统可以用来存储数据。当然,这对用户来说就足够了。具体的实验将在稍后的内容中实现。

逻辑卷的结构

LVM 的组成一共包含三种元素,(Volume,物理和逻辑卷,卷组),区段(物理和逻辑区段),设备映射器 。 接下来,我们分别介绍这三种元素各代表什么意思。

Linux LVM 组织为物理卷(PV)、卷组(VG)和逻辑卷(LV)。物理卷 是物理磁盘或物理磁盘分区(比如 /dev/sdb1 或 /dev/sdc)。卷组 是物理卷的集合。卷组 可以在逻辑上划分成多个逻辑卷。

物理磁盘到逻辑卷的映射

卷组是实现将n个PV映射成m个LV的关键。我们可以这样来理解。当我们将多个PV划分到一个卷组中去了之后(也就是VG0),就可以创建多个任意容量的LV(逻辑卷),在这些逻辑卷看来,他们的底层实际上就是一个380G的空间,他们可以自由分配。如图所示,我们在VG0上划分了一个LV0,在LV0和FREE SPACE 看来,VG0就是一个整体,不关心VG0是由多少个PV组合而来。在实际的使用过程中,用户就会将LV0看作一个物理磁盘分区来使用。
在创建 LV 之后,可以使用任何文件系统对它进行格式化并将它挂载在某个挂载点上,然后就可以开始使用它了。 如下图所示,给创建出来的LV0格式化文件系统,并将其挂载到/app 目录下。

区段

为了实现n个PV到m个LV的映射,PV和VG划分的基本的数据块必须要大小一致,我们就将这些基本的数据块称为区段。也就是物理区段(PE)和逻辑区段(LE) 。虽然是n个PV到m个LV的映射,但是PE和LE总是一对一映射的(如下图中红色区段与绿色区段)。
在LVM2中,默认的区段大小是4M,也就是说,在划分LV的时候,会以4M为基本单位进行划分,这个概念与磁盘存储数据的块(Block 默认4k)是类似的。在实际的使用中,最好不要修改这个默认值,因为有可能会降低LVM的效率。

这里有一点需要注意。物理区段的分配并非是连续的,也就是说,属于LV0的逻辑区段,他们所对应的物理区段有可能来自不同的物理设备。这也再一次证实了,卷组在对应物理卷到逻辑卷的映射上起到了关键性的作用。

设备映射器

通俗的来理解的话,或许应该是这样的。当我们在系统中创建了多个卷组(VG0,VG1…)之后,又在每个卷组上创建了多个逻辑卷(LV1,LV2…)比方说,如下所示的结构。

#采用文件夹的形式模式LVM[root@localhost test]# tree.
├── VG0
│   ├── LV0
│   ├── LV1
│   └── LV2
└── VG1├── LV0└── LV1

这样的话,我们需要对每一个逻辑卷进行有效的标识,以便我们能够快捷的访问,设备映射器应运而生。
在大多数的Linux 发行版中设备映射器会被默认安装。在创建VG和LV的时候,如果我们不指定名字的话,设备映射器就会默认生成名称,并指定到物理设备。对于前面的示例,设备映射器会在 /dev 文件系统中创建下面的设备节点,设备名称一般为 /dev/dm-#。 /dev/mapper/VG0-LV0 ,/dev/VG0/LV0 是生成的设备名(/dev/dm-#)相应的软连接。

注意名称的格式标准:/dev/{vg_name}/{lv_name} -> /dev/mapper/{vg_name}{lv_name}

逻辑卷的管理

对于逻辑卷的管理通常包括创建,新增,缩减和删除。将通过接下来的实验介绍以下逻辑卷的管理。 首先看一下我们的实验环境 。 我们将使用sdb,sdc,sdd三个物理设备来实现我们在前文所描述的案例。sda在本实例中将不会使用。

[root@localhost ~]#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   55G  0 part /
├─sda3   8:3    0   50G  0 part /app
├─sda4   8:4    0  512B  0 part
└─sda5   8:5    0    2G  0 part [SWAP]
sdb      8:16   0  200G  0 disk
├─sdb1   8:17   0  100G  0 part
└─sdb2   8:18   0  100G  0 part
sdc      8:32   0  100G  0 disk
sdd      8:48   0   80G  0 disk

创建物理卷

当物理设备添加到系统中之后,我们可以对物理设备进行分区,也可以直接拿过来使用,也就是说,我们可以将 sdb2 和sdc 、sdd 一起组合使用,组成一个逻辑卷,而不是使用sdb整个磁盘都使用。同时有一点需要注意,如果要使用分区来构建逻辑卷的话,在创建该分区的时候,分区的类型应该是 Linux LVM ,如下所示

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   209717247   104857600   8e  Linux LVM
/dev/sdb2       209717248   419430399   104856576   8e  Linux LVM

我们这里会直接使用整个 /dev/sdb 设备来创建逻辑卷。

[root@localhost ~]#pvcreate /dev/sd{b{1,2},c,d}Physical volume "/dev/sdb1" successfully created.Physical volume "/dev/sdb2" successfully created.Physical volume "/dev/sdc" successfully created.Physical volume "/dev/sdd" successfully created.[root@localhost ~]#pvsPV         VG Fmt  Attr PSize   PFree  /dev/sdb1     lvm2 ---  100.00g 100.00g/dev/sdb2     lvm2 ---  100.00g 100.00g/dev/sdc      lvm2 ---  100.00g 100.00g/dev/sdd      lvm2 ---   80.00g  80.00g

物理卷已经成功的创建了。使用 pvs 命令可以查看生成的物理卷的信息。从列表中,我们可以看到,所有的物理卷还没有相应卷组(VG),因为我们还没有进行划分。使用pvdisplay 命令可以看到每个物理卷的详细信息。

[root@localhost ~]#pvdisplay "/dev/sdd" is a new physical volume of "80.00 GiB"--- NEW Physical volume ---PV Name               /dev/sddVG Name               PV Size               80.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               HJE2wS-rX0U-FUcq-32TI-YUjv-k0jO-qDp0Rh   "/dev/sdb1" is a new physical volume of "100.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb1VG Name               PV Size               100.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               SQnDDE-U3BB-X9TY-07ix-Hn5x-EBdj-RgAWDq   "/dev/sdc" is a new physical volume of "100.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdcVG Name               PV Size               100.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               5l0Nf9-snrM-oG0j-Si4y-s3Tb-qRw8-kod0xD   "/dev/sdb2" is a new physical volume of "100.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdb2VG Name               PV Size               100.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               jnHzv4-PEYl-qOvO-n5Ee-Nt8r-Wbkg-5GN03S

从上面的详细信息中可以看到 VG Name 还没有值, PE Size 也没有值, 那么接下来,我们就要创建卷组,创建了卷组之后,我们再回过头查看以下这些物理卷的详细信息,就会发生很大的变化 。

创建卷组

在创建卷组的过程中,我们可以人为地指定卷组的名称,和物理区块(PE)的大小。这里我们这里不指定。

#创建卷组
[root@localhost ~]#vgcreate VG0 /dev/sd{b{1,2},c,d}Volume group "VG0" successfully created[root@localhost ~]#vgsVG  #PV #LV #SN Attr   VSize   VFree  VG0   4   0   0 wz--n- 379.98g 379.98g[root@localhost ~]#pvsPV         VG  Fmt  Attr PSize   PFree  /dev/sdb1  VG0 lvm2 a--  100.00g 100.00g/dev/sdb2  VG0 lvm2 a--  100.00g 100.00g/dev/sdc   VG0 lvm2 a--  100.00g 100.00g/dev/sdd   VG0 lvm2 a--   80.00g  80.00g

创建卷组结束之后,我们就可以看到相应的物理卷已经有了所属的卷组叫做VG0,同样我们还是使用pvdisplay 来看一下每一个物理卷的详细信息。

[root@localhost ~]#pvdisplay --- Physical volume ---PV Name               /dev/sdb1VG Name               VG0PV Size               100.00 GiB / not usable 4.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              25599Free PE               25599Allocated PE          0PV UUID               SQnDDE-U3BB-X9TY-07ix-Hn5x-EBdj-RgAWDq--- Physical volume ---PV Name               /dev/sdb2VG Name               VG0PV Size               100.00 GiB / not usable 3.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              25599Free PE               25599Allocated PE          0PV UUID               jnHzv4-PEYl-qOvO-n5Ee-Nt8r-Wbkg-5GN03S--- Physical volume ---PV Name               /dev/sdcVG Name               VG0PV Size               100.00 GiB / not usable 4.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              25599Free PE               25599Allocated PE          0PV UUID               5l0Nf9-snrM-oG0j-Si4y-s3Tb-qRw8-kod0xD--- Physical volume ---PV Name               /dev/sddVG Name               VG0PV Size               80.00 GiB / not usable 4.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              20479Free PE               20479Allocated PE          0PV UUID               HJE2wS-rX0U-FUcq-32TI-YUjv-k0jO-qDp0Rh

由上面的详细信息,我们发现 PE的默认大小就是4M,这也就是说,以后我们在分配磁盘大小的时候,应该以4M为最小单位进行划分。同样我们还能够看到卷组名(VG Name),空闲的区块( Free PE)。 如果想要看卷组的详细信息,我们使用 vgdisplay 命令来查看卷组VG0的详细信息。

[root@localhost ~]#vgdisplay --- Volume group ---VG Name               VG0                        #卷组名称System ID             Format                lvm2                   #Format版本Metadata Areas        4Metadata Sequence No  1VG Access             read/write             VG Status             resizableMAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                4Act PV                4VG Size               379.98 GiB               #卷组的大小PE Size               4.00 MiB                #默认区块的大小Total PE              97276Alloc PE / Size       0 / 0   Free  PE / Size       97276 / 379.98 GiBVG UUID               rrI0HJ-JPwB-CWtU-ddM0-kvJ5-7Beo-uV5qEy

创建逻辑卷

只有了卷组还不足够,因为从文章开头的案例中我们可以知道,没有逻辑卷和文件系统,用户并不能直接使用。接下来我们在卷组 VG0 的基础上创建一个逻辑卷LV0。在创建逻辑卷的过程中,需要指定逻辑卷的大小。指定逻辑卷的大小有三种方式,一是指定PE的个数,二是直接指定逻辑卷的大小,三是直接使用百分比来指定,都是可以的。

[root@localhost ~]#lvcreate -n LV0 -l 50%vg VG0[root@localhost ~]#lvcreate -n LV0 -l 100%FREE VG0[root@localhost ~]#lvcreate -n LV0 -L 250G VG0Logical volume "LV0" created.#创建成功之后系统中已经有了一个逻辑卷[root@localhost ~]#lvsLV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync ConvertLV0  VG0 -wi-a----- 250.00g

此时我们使用 pvdisplay命令来查看所有的物理卷状态的时候,我们会发现,物理卷的PE等各种信息已经发生了变化。

[root@localhost ~]#pvdisplay --- Physical volume ---PV Name               /dev/sdb1VG Name               VG0PV Size               100.00 GiB / not usable 4.00 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              25599Free PE               0                  #已经全部被分配Allocated PE          25599PV UUID               SQnDDE-U3BB-X9TY-07ix-Hn5x-EBdj-RgAWDq--- Physical volume ---PV Name               /dev/sdb2VG Name               VG0PV Size               100.00 GiB / not usable 3.00 MiBAllocatable           yes (but full)PE Size               4.00 MiBTotal PE              25599Free PE               0                    #已经全部被分配Allocated PE          25599PV UUID               jnHzv4-PEYl-qOvO-n5Ee-Nt8r-Wbkg-5GN03S--- Physical volume ---PV Name               /dev/sdcVG Name               VG0PV Size               100.00 GiB / not usable 4.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              25599Free PE               12797               #还有一部分没有被使用Allocated PE          12802  PV UUID               5l0Nf9-snrM-oG0j-Si4y-s3Tb-qRw8-kod0xD--- Physical volume ---PV Name               /dev/sddVG Name               VG0PV Size               80.00 GiB / not usable 4.00 MiBAllocatable           yes PE Size               4.00 MiBTotal PE              20479Free PE               20479               #还没有被使用Allocated PE          0PV UUID               HJE2wS-rX0U-FUcq-32TI-YUjv-k0jO-qDp0Rh

从上面的信息中,我们看到物理卷发生了变化,那么相应的卷组呢?

[root@localhost ~]#vgdisplay --- Volume group ---VG Name               VG0System ID             Format                lvm2Metadata Areas        4Metadata Sequence No  2VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                1Open LV               0Max PV                0Cur PV                4Act PV                4VG Size               379.98 GiBPE Size               4.00 MiBTotal PE              97276Alloc PE / Size       64000 / 250.00 GiB         #已经被占用的PEFree  PE / Size       33276 / 129.98 GiB           #还剩下没有被使用的PEVG UUID               rrI0HJ-JPwB-CWtU-ddM0-kvJ5-7Beo-uV5qEy

同样,因为我们已经创建了逻辑卷,我们可以使用lvdisplay 来查看逻辑卷的详细信息。

[root@localhost ~]#lvdisplay --- Logical volume ---LV Path                /dev/VG0/LV0   #已经生成了设备名称LV Name                LV0VG Name                VG0LV UUID                D3dpT9-EYFP-ieGm-DiYm-Ey4P-O5JM-EMtrOhLV Write Access        read/writeLV Creation host, time localhost.localdomain, 2017-08-15 21:51:32 +0800LV Status              available  # open                 0LV Size                250.00 GiB     #逻辑卷的大小Current LE             64000         #当前一共有多少LE 逻辑区块Segments               3Allocation             inheritRead ahead sectors     auto- currently set to     8192Block device           253:0

给逻辑卷创建文件系统

逻辑卷创建成功之后,就可以将其作为一个分区来使用了。就像物理分区一样,我们首先对逻辑卷创建文件系统。

#CentOS 7中默认的文件系统是xfs
[root@localhost ~]#mkfs.xfs /dev/VG0/LV0
meta-data=/dev/VG0/LV0           isize=512    agcount=4, agsize=16384000 blks         =                       sectsz=512   attr=2, projid32bit=1         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=65536000, imaxpct=25         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=32000, version=2         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0  # 使用blkid 可以查看文件系统是否已经成功创建
[root@localhost ~]#blkid
/dev/sdb1: UUID="SQnDDE-U3BB-X9TY-07ix-Hn5x-EBdj-RgAWDq" TYPE="LVM2_member"
/dev/sdb2: UUID="jnHzv4-PEYl-qOvO-n5Ee-Nt8r-Wbkg-5GN03S" TYPE="LVM2_member"
/dev/sdc: UUID="5l0Nf9-snrM-oG0j-Si4y-s3Tb-qRw8-kod0xD" TYPE="LVM2_member"
/dev/sdd: UUID="HJE2wS-rX0U-FUcq-32TI-YUjv-k0jO-qDp0Rh" TYPE="LVM2_member"
/dev/mapper/VG0-LV0: UUID="56cde737-2618-4ff5-9298-1cb15a80f04e" TYPE="xfs"

创建了文件系统之后,将LV0挂载到 /app 目录下,就可以正常访问 LV0了,当然挂载的方式有临时挂载和永久挂载两种方式,永久挂载就是将挂载选项写到 /etc/fstab 文件中,我们这里不再详细介绍。

扩展逻辑卷

现在我们假设LV0这个逻辑卷的空间已经使用完了,需要进行扩展,我们在之前的信息中已经看到,卷组VG0中还有120多G的空间没有使用,我们就从这段未使用的空间中为LV0进行扩展 。指定需要扩展的空间的大小时,与创建时的使用方法是一致的,可以有多种灵活的方式。

[root@localhost ~]#lvextend -L +50G /dev/VG0/LV0 Size of logical volume VG0/LV0 changed from 250.00 GiB (64000 extents) to 300.00 GiB (76800 extents).Logical volume VG0/LV0 successfully resized.[root@localhost ~]#lvsLV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync ConvertLV0  VG0 -wi-a----- 300.00g

我们看到LV0的大小已经成功的发生了变化,然后我们再查看一下所有块设备的使用情况 使用 df -h 命令来查看

[root@localhost ~]#df -h
Filesystem           Size  Used Avail Use% Mounted on....................../dev/mapper/VG0-LV0  250G   33M  250G   1% /mnt/lv0   # LV0的大小没有发生变化

此时出现了一个状况,LV0的容量明明已经发生了变化,但是使用 df 命令查看块设备使用情况的时候,LV0的大小却没有发生变化。这是因为,我们刚刚追加的那部分空间没有文件系统,所以文件系统的容量没有发生变化。因此我们需要给刚刚追加的那部分逻辑卷同步文件系统 。

#不同的文件系统  同步的命令是不一样的。其他文件系统的命令是resize2fs[root@localhost ~]#xfs_growfs /mnt/lv0.................[root@localhost ~]#df -h
Filesystem           Size  Used Avail Use% Mounted on........../dev/mapper/VG0-LV0  300G   33M  300G   1% /mnt/lv0   #逻辑卷的大小已经发生了变化

从整个扩展的过程中,我们看出,只要LV0的空间不足,我们就可以很灵活的给LV0扩展存储空间。如果VG0的空间不足够使用了,那我们就可以重新加入一个物理磁盘,并按照此过程将物理卷添加到VG0中,只要使用vgextend命令就可以。

缩减逻辑卷

对于XFS文件系统的逻辑卷,只能进行扩展,不能进行缩减,这一点是很遗憾的。同时缩减逻辑卷也是有很大风险的,对于ext类型的文件系统来说,如果要缩减逻辑卷,就需要将设备取消挂载,这点会影响到用户的使用,同时如果逻辑卷上已经存在了大量的数据,进行缩减的过程有可能对数据造成损坏,最好事前有所备份,所以在实际生产中,缩减逻辑卷的操作应该谨慎为之。

我们首先使用一下命令重新创建一个ext4的逻辑卷 LV1,用来实现我们缩减逻辑卷的实验。

#创建逻辑卷
[root@localhost ~]#lvcreate -n LV1 -l 100%FREE VG0 #格式化文件系统
[root@localhost ~]#mkfs.ext4 /dev/VG0/LV1 #编辑 /etc/fatab 文件 并挂载该LV1
[root@localhost ~]#mount -a  #此时系统中结构如图所示 [root@localhost ~]#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   55G  0 part /
├─sda3        8:3    0   50G  0 part /app
├─sda4        8:4    0  512B  0 part
└─sda5        8:5    0    2G  0 part [SWAP]
sdb           8:16   0  200G  0 disk
├─sdb1        8:17   0  100G  0 part
│ └─VG0-LV0 253:0    0  300G  0 lvm  /mnt/lv0
└─sdb2        8:18   0  100G  0 part └─VG0-LV0 253:0    0  300G  0 lvm  /mnt/lv0
sdc           8:32   0  100G  0 disk
└─VG0-LV0   253:0    0  300G  0 lvm  /mnt/lv0
sdd           8:48   0   80G  0 disk
├─VG0-LV0   253:0    0  300G  0 lvm  /mnt/lv0
└─VG0-LV1   253:1    0   80G  0 lvm  /mnt/lv1

卷组VG0的所有空间都被使用了。接下来我们就可以进行缩减逻辑卷的实验。

取消逻辑卷的挂载

我们之前就已经说过,逻辑卷在挂载的时候是不能进行缩减的。因此我们先取消该逻辑卷的挂载。

[root@localhost ~]#umount /mnt/lv1

缩减逻辑卷的空间

系统会提示 应该先检查文件系统,所以我们就先检查一下。

#检查文件系统 -f 表示强制性检查[root@localhost ~]#e2fsck -f /dev/VG0/LV1# 直接将文件系统的大小缩减到 50G
[root@localhost ~]#resize2fs /dev/VG0/LV1 50G# 将逻辑卷的空间缩减到50G
[root@localhost ~]#lvreduce -L 50G /dev/VG0/LV1WARNING: Reducing active logical volume to 50.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce VG0/LV1? [y/n]: y  Size of logical volume VG0/LV1 changed from 79.98 GiB (20476 extents) to 50.00 GiB (12800 extents).Logical volume VG0/LV1 successfully resized.

在这一步中,一共有三个步骤。准备步骤:强制性检查文件系统。然后:先缩减文件系统大小。接着:缩减逻辑卷。 这三步,缺一不可。

重新挂载

,逻辑卷缩减之后,将逻辑卷重新挂载到之前的目录中就可以重新访问逻辑卷了。 重新查看块设备的使用情况,就可以发现逻辑卷发生了变化

[root@localhost ~]#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   55G  0 part /
├─sda3        8:3    0   50G  0 part /app
├─sda4        8:4    0  512B  0 part
└─sda5        8:5    0    2G  0 part [SWAP]
sdb           8:16   0  200G  0 disk
├─sdb1        8:17   0  100G  0 part
│ └─VG0-LV0 253:0    0  300G  0 lvm  /mnt/lv0
└─sdb2        8:18   0  100G  0 part └─VG0-LV0 253:0    0  300G  0 lvm  /mnt/lv0
sdc           8:32   0  100G  0 disk
└─VG0-LV0   253:0    0  300G  0 lvm  /mnt/lv0
sdd           8:48   0   80G  0 disk
├─VG0-LV0   253:0    0  300G  0 lvm  /mnt/lv0
└─VG0-LV1   253:1    0   50G  0 lvm  /mnt/lv1

迁移逻辑卷到新的系统

我首先在另外一个虚拟机中创建一个逻辑卷,并在里面存入相应的数据,然后来模拟我们的迁移逻辑卷的实验。在另外一个虚拟机中创建LV0逻辑卷的操作,如下图所示。

此时该系统中块设备列表如下所示。 LV0。就是我们刚刚创建的逻辑卷。

[root@centos6 lv0]#lsblk
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0               11:0    1  3.7G  0 rom  /media/CentOS_6.9_Final
sda                8:0    0  200G  0 disk
├─sda1             8:1    0 1000M  0 part /boot
├─sda2             8:2    0 53.7G  0 part /
├─sda3             8:3    0 48.8G  0 part /app
├─sda4             8:4    0    1K  0 part
└─sda5             8:5    0    2G  0 part [SWAP]
sdb                8:16   0   20G  0 disk
└─VG0-LV0 (dm-0) 253:0    0   10G  0 lvm  /mnt/lv0

现在我们要将刚刚创建的这个逻辑卷迁移到一个新的系统中,而且我们要保证,数据不能丢失。同时,我们考虑一下,万一我们要迁移到的新的文件系统中有跟我们新创建的逻辑卷同名的逻辑卷该如何处理,比方说像,下面这样。 注意,两个系统不一样,但是逻辑卷的名字一致。

#CentOS6 中的逻辑卷,即将被迁移到CentOS7中
[root@centos6 ~]#lvsLV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync ConvertLV0  VG0  -wi-ao---- 10.00g  #CentOS 7 中的逻辑卷,即将迁移到这里。
[root@localhost ~]#lvsLV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync ConvertLV0  VG0 -wi-ao---- 300.00g                                                    LV1  VG0 -wi-ao----  50.00g

总结一下迁移过程中的重要步骤,一共有如下几步。 在源主机上

  • 将旧的逻辑卷解除挂载 umount /mnt/lv0

  • 修改旧的卷组名称 vgrename VG0 NEWVG0

  • 修改旧的逻辑卷的名称 lvrename /dev/NEWVG0/LV0 NEWLV0

  • 将旧的卷组设置为非活动状态 vgchange -an NEWVG0

  • 将旧的卷组导出 vgexport NEWVG0

  • 将硬盘拆下 安装到新的主机上

相关的操作如下所示,操作成功之后,将硬盘文件拆下,接到新的主机上。

[root@centos6 ~]#umount /mnt/lv0 [root@centos6 ~]#vgrename VG0 NEWVG0Volume group "VG0" successfully renamed to "NEWVG0"[root@centos6 ~]#lvrename /dev/NEWVG0/LV0 NEWLV0Renamed "LV0" to "NEWLV0" in volume group "NEWVG0"[root@centos6 ~]#vgchange -an NEWVG0 0 logical volume(s) in volume group "NEWVG0" now active[root@centos6 ~]#vgexport NEWVG0 Volume group "NEWVG0" successfully exported

在目标主机上

  • 在新的系统中安装硬盘,并将其导入文件系统。 vgimport NEWVG0

  • 激活新的卷组 vgchange -ay NEWVG0

  • 重新挂载 mount /dev/NEWVG0/NEWLV0 /mnt/newlv0

在加装了新的硬盘之后,我们可以看到系统中已经添加了一块新的硬盘。

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   55G  0 part /
├─sda3            8:3    0   50G  0 part /app
├─sda4            8:4    0    1K  0 part
└─sda5            8:5    0    2G  0 part [SWAP]
sdb               8:16   0  200G  0 disk
├─sdb1            8:17   0  100G  0 part
│ └─VG0-LV0     253:0    0  300G  0 lvm  /mnt/lv0
└─sdb2            8:18   0  100G  0 part └─VG0-LV0     253:0    0  300G  0 lvm  /mnt/lv0
sdc               8:32   0  100G  0 disk
└─VG0-LV0       253:0    0  300G  0 lvm  /mnt/lv0
sdd               8:48   0   80G  0 disk
├─VG0-LV0       253:0    0  300G  0 lvm  /mnt/lv0
└─VG0-LV1       253:1    0   50G  0 lvm  /mnt/lv1
sde               8:64   0   20G  0 disk
└─NEWVG0-NEWLV0 253:2    0   10G  0 lvm

使用pvscan 命令可以查看到系统中已经有一个处于 exported 状态的 设备,及其详细的信息。

[root@localhost ~]#pvscanPV /dev/sdb1   VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdb2   VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdc    VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdd    VG VG0             lvm2 [80.00 GiB / 29.98 GiB free]PV /dev/sde     is in exported VG NEWVG0 [20.00 GiB / 10.00 GiB free]Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0   ]

接下来我们将新的NEWVG0 导入到系统中。

#导入新的卷组
[root@localhost ~]#vgimport NEWVG0 Volume group "NEWVG0" successfully imported#将新的卷组激活[root@localhost ~]#vgchange -ay NEWVG0 1 logical volume(s) in volume group "NEWVG0" now active

此时我们再使用pvscan 来查看的话,状态应该与之前已经不一样了。

# 状态已经发生了相应的变化[root@localhost ~]#pvscanPV /dev/sdb1   VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdb2   VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdc    VG VG0             lvm2 [100.00 GiB / 0    free]PV /dev/sdd    VG VG0             lvm2 [80.00 GiB / 29.98 GiB free]PV /dev/sde    VG NEWVG0          lvm2 [20.00 GiB / 10.00 GiB free]Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0   ]

将已经添加好的逻辑卷重新挂载就可以继续使用了。

[root@localhost ~]#mkdir /mnt/newlv0[root@localhost ~]#mount /dev/NEWVG0/NEWLV0 /mnt/newlv0[root@localhost ~]#cd /mnt/newlv0[root@localhost newlv0]#ls
acpid             iptables.old     readahead
atd               irqbalance       readonly-root
auditd            kdump            rngd
authconfig        kernel           rsyslog
................

删除逻辑卷

在完成了上面的大部分操作之后,我们又有了一个新的想法,如果我想将某个分区,从卷组中去掉该怎样做?
实际中,我们可能面临众多的困难,比方说,该分区中已经存储了很多的数据,这样的话,我们是不能直接删除的。假设我们有下面这样的一组逻辑卷(只是假设,为了用来佐证)

[root@localhost ~]#pvsPV         VG     Fmt  Attr PSize   PFree /dev/sdb1  VG0    lvm2 a--  100.00g     0 /dev/sdb2  VG0    lvm2 a--  100.00g     0 /dev/sdc   VG0    lvm2 a--  10.00g  89.98g/dev/sdd   VG0    lvm2 a--   80.00g 29.98g

如果我们要将/dev/sdd 这个分区删除掉,那么我们首先就要在同一个卷组(VG0)中找到与/dev/sdd 已经使用掉的空间同样大小的空间,来做迁移。然后将/dev/sdd 的空间 移动到 /dev/sdc中,此时就可以进行删除了。

这样,我们就详细的介绍了逻辑卷的详细使用,以及在使用过程中需要注意的相关内容。实际上,逻辑卷还有快照,关于快照的内容在逻辑卷中也是很重要的一部分内容,实际使用中也是非常重要的,以后有机会会详细地介绍。如若本片文章中有描述不合理的地方,敬请留言,我会及时改正。



个人博客地址:http://www.pojun.tech/ 欢迎访问

本文转自Eumenides_s 51CTO博客,原文链接:http://blog.51cto.com/xiaoshuaigege/1965104,如需转载请自行联系原作者

逻辑卷管理(LVM)相关推荐

  1. 逻辑卷管理LVM (Logical Volume Manager)

    什么是LVM? LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 ...

  2. 逻辑卷管理LVM(logical volume manager)

    LVM的全名是logical volume manager,中文翻译逻辑卷管理器.之所以称为卷是因为可以将文件系统像卷一样伸长和缩短,LVM的做法是将几个物理的分区(或磁盘)通过软件组合成为一块独立的 ...

  3. Android逻辑卷管理LVM,LINUX——LVM逻辑卷管理

    LVM: logical volumes manager LVM逻辑卷部署 物理卷->卷组->逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...

  4. Linux17-磁盘分区、文件系统、逻辑卷管理LVM

    目录 一.磁盘分区.文件系统.永久挂载 1.1.MBR分区方案 1.2.使用fdisk.mkfs.partprobe.blkid.lsblk等命令管理MBR分区 1.3.swap分区 1.4.GPT分 ...

  5. boot lvm 分区_怎样使用kickstart创建逻辑卷管理(LVM)分区

    怎样使用kickstart创建逻辑卷管理(LVM)分区 解决方法: 在ks.cfg文件的'Disk Partition Information'下添加以下选项,使用kickstart创建逻辑卷管理(L ...

  6. LVM的逻辑卷管理及CentOS挂载

    LVM的逻辑卷管理 LVM:逻辑卷管理器,脱胎于AIX,解决了基本磁盘的无法扩容的限制 基本概念: PV:物理卷,PV可以是一块磁盘或磁盘上的一个分区(Linux) VG:卷组,多块PV组成 PE:物 ...

  7. linux文件系统与磁盘(三)LVM逻辑卷管理

    前言 LVM(Logic Volume Manager,逻辑卷管理),是Linux管理磁盘的一种方式.在Windows及其他操作系统当中,也有类似的管理方式. 一.基本概念 1.何为逻辑卷管理LVM ...

  8. Linux进阶篇--磁盘阵列(RAID)和逻辑卷管理

    磁盘阵列RAID RAID:RedundantArrays of Inexpensive(Independent)Disks 早期被称为RedundantArrays of Inexpensive D ...

  9. IBM小型机AIX操作系统总结06--逻辑卷管理LVM

    (需要Word版笔记的请私信留邮箱) [IBM小型机AIX操作系统总结06–逻辑卷管理LVM] 注意: LVM ( LogicalVolumeManager ) 即逻辑卷管理,和Linux区别的是,在 ...

  10. 【Linux逻辑卷管理】之pvcreate、pvdisplay和pvremove

    文章目录 一.逻辑卷管理(LVM)概念 1. LVM 定义 2. 物理卷(PV) 3. 卷组(VG) 4. 逻辑卷(LV) 二.创建逻辑卷 1. pvcreate命令将分区标记为物理卷,==创建物理卷 ...

最新文章

  1. 用VB开发SAP接口程序
  2. SAP Commerce开发时的Spring学习要点记录
  3. Memcached的基础梳理
  4. 吴恩达作业1:逻辑回归实现猫的分类
  5. 固态硬盘ps3111开卡工具_固态硬盘必备工具:系统无损迁移、僵尸文件立现原形...
  6. Linux操作系统使用基础05:Linux磁盘与文件系统管理
  7. [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(2)
  8. Atitit dubbo使用总结 attilax总结 艾龙 总结 1. 概念 1 1.1. Dubbo提供的注册中心有如下几种类型可供选择: 2 1.1.1. Multicast注册中心 2 1.1
  9. 关于电力系统标准规约的一些理解
  10. 《数字图像处理 第三版》(冈萨雷斯)——第十章 图像分割
  11. 移除PDF文件打开密码
  12. “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
  13. ActiveSync 与 Pocket PC 2003 仿真器 建立同步
  14. arm mali 天梯图_手机CPU天梯图2018年12月最新版 秒懂十二月手机处理器排名
  15. 亚马逊运营应提升哪些自身能力
  16. 工作被拥抱变化了该怎么办?
  17. windows下C++实现Unicode和ASCII编码的互转
  18. 初识AS3(十)——加载外部文件进度…
  19. Epub格式怎么转换成PDF格式?这个方法轻松解决
  20. 《C++Primer 第五版》——第八章 IO 库

热门文章

  1. Deepin中如何使用adb和fastboot工具
  2. 视频教程-通俗易懂的RPC框架Dubbo视频教程-Java
  3. 有什么好用的画c语言流程图的软件?
  4. 大小端及转换(C++)
  5. linux查看ipmi端口down,Linux通过命令行设置IPMI的解决方法
  6. 留言板php数据库_php实现留言板功能(连接数据库)的实例讲解
  7. c#oracle数组超出,急问:System.IndexOutOfRangeException: 索引超出了数组界限解决方案
  8. CSU 2124智慧树(建图+BFS)
  9. 一文带你快速全面掌握Java反射机制面试题
  10. 库仑计BQ27441使用