一、LVM的磁盘管理
LVM(Logical volume Manager)是逻辑卷管理的简称。它是Linux环境下对磁盘分区进行管理的一种机制。 LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。 LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!! 二、LVM的原理 要想理解好LVM的原理,我们必须首先要掌握4个基本的逻辑卷概念。 ①PE (Physical Extend) 物理拓展 ②PV (Physical Volume) 物理卷 ③VG (Volume Group) 卷组 ④LV (Logical Volume) 逻辑卷 我们知道在使用LVM对磁盘进行动态管理以后,我们是以逻辑卷的方式呈现给上层的服务的。所以我们所有的操作目的,其实就是去创建一个LV(Logical Volume),逻辑卷就是用来取代我们之前的分区,我们通过对逻辑卷进行格式化,然后进行挂载操作就可以使用了。那么LVM的工作原理是什么呢?所谓无图无真相,咱们下面通过图来对逻辑卷的原理进行解释!!
1.将我们的物理硬盘格式化成PV(Physical Volume) 我们看到,这里有两块硬盘,一块是sda,另一块是sdb,在LVM磁盘管理里,我首先要将这两块硬盘格式化为我们的PV(Physical Volume),也就是我们的物理卷,其实格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位。比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。这个就是我们的第一步操作。 2.创建一个VG(Volume Group) 在将硬盘格式化成PV以后,我们第二步操作就是创建一个卷组,也就是VG(Volume Group),卷组在这里我们可以将其抽象化成一个空间池,VG的作用就是用来装PE的,我们可以把一个或者多个PV加到VG当中,因为在第一步操作时就已经将该硬盘划分成了多个PE,所以将多个PV加到VG里面后,VG里面就存放了许许多多来自不同PV中的PE,我们通过上面的图片就可以看到,我们格式化了两块硬盘,每个硬盘分别格式化成了3个PE,然后将两块硬盘的PE都加到了我们的VG当中,那么我们的VG当中就包含了6个PE,这6个PE就是两个硬盘的PE之和。通常创建一个卷组的时候我们会为其取一个名字,也就是该VG的名字。 3.基于VG创建我们最后要使用的LV(Logical Volume) 【注意】PV以及VG创建好以后我们是不能够直接使用的,因为PV、VG是我们逻辑卷底层的东西,我们其实最后使用的是在VG基础上创建的LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。 当我们创建好我们的VG以后,这个时候我们创建LV其实就是从VG中拿出我们指定数量的PE,还是拿上图来说,我们看到我们此时的VG里面已经拥有了6个PE,这时候我们创建了我们的第一个逻辑卷,它的大小是4个PE的大小,也就是16M(因为一个PE的默认大小是4M),而这4个PE有三个是来自于第一块硬盘,而另外一个PE则是来自第二块硬盘。当我们创建第二个逻辑卷时,它的大小就最多只有两个PE的大小了,因为其中的4个PE已经分配给了我们的第一个逻辑卷。 所以创建逻辑卷其实就是我们从VG中拿出我们指定数量的PE,VG中的PE可以来自不同的PV,我们可以创建的逻辑卷的大小取决于VG当中PE存在的数量,并且我们创建的逻辑卷其大小一定是PE的整数倍(即逻辑卷的大小一定要是4M的整数倍)。 4.将我们创建好的LV进行文件系统的格式化,然后挂载使用 在创建好LV以后,这个时候我们就能够对其进行文件系统的格式化了,我们最终使用的就是我们刚创建好的LV,其就相当于传统的文件管理的分区,我们首先要对其进行文件系统的格式化操作,然后通过mount命令对其进行挂载,这个时候我们就能够像使用平常的分区一样来使用我们的逻辑卷了。 我们在创建好LV以后,我们会在 /dev 目录下看到我们的LV信息,例如 /dev/vgname/lvname, 我们每创建一个VG,其会在/dev目录下创建一个以该VG名字命名的文件夹,在该VG的基础上创建好LV以后,我们会在这个VG目录下多出一个以LV名字命名的逻辑卷。 下面我们来对整个LVM的工作原理进行一个总结: (1)物理磁盘被格式化为PV,空间被划分为一个个的PE
(2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内 (3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘 (4)LV现在就直接可以格式化后挂载使用了 (5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
上文我们详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理,包括LVM中最重要的四个基本点(PE、PV、VG以及LV),下面将会详细的讲解LVM逻辑卷的创建、使用以及删除.
一、创建LVM逻辑卷
我们通过图文并茂的方式来看看如何创建我们的LVM,在上一篇随笔中,我们已经熟悉了LVM的工作原理,首先是要将我们的物理硬盘格式化成PV,然后将多个PV加入到创建好的VG中,最后通过VG创建我们的LV。所以我们第一步就是将我们的物理硬盘格式化成PV(物理卷) ①将物理硬盘格式化成PV(物理卷) 使用的是 pvcreate 命令 分区的大小为3G左右,通过 fdisk -l 命令可以查看
[iyunv@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x000e818f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 1288 10240000 83 Linux
/dev/sda3 1288 1479 1536000 82 Linux swap / Solaris
/dev/sda4 1479 2610 9085401 5 Extended
/dev/sda5 1479 2132 5245834+ 83 Linux
/dev/sda6 2133 2525 3156741 83 Linux
| 将sda5,sda6文件系统类型改为8e(Linux LVM)类型,并保存
[iyunv@localhost ~]# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): t //t:修改文件系统类型
Partition number (1-6): 5 //分区号
Hex code (type L to list codes): 8e //文件类型
Changed system type of partition 5 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): 8e
Changed system type of partition 6 to 8e (Linux LVM)
Command (m for help): p //显示分区表
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x000e818f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 1288 10240000 83 Linux
/dev/sda3 1288 1479 1536000 82 Linux swap / Solaris
/dev/sda4 1479 2610 9085401 5 Extended
/dev/sda5 1479 2132 5245834+ 8e Linux LVM
/dev/sda6 2133 2525 3156741 8e Linux LVM
Command (m for help): w //保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resour
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
| 使用命令 partx -a /dev/sda 让内核读入新的分区表,此命令一般执行两次
[iyunv@localhost ~]# partx -a /dev/sdaBLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
BLKPG: Device or resource busy
error adding partition 5
BLKPG: Device or resource busy
error adding partition 6
| 这里我们根据上面图所示,我们先将 /dev/sda5、 /dev/sda6 两块硬盘格式化成PV
[iyunv@localhost ~]# pvcreate /dev/sda5 /dev/sda6
Physical volume "/dev/sda5" successfully created
Physical volume "/dev/sda6" successfully created | 创建完PV以后,我们可以使用pvdisplay(显示详细信息)、pvs命令来查看当前pv的信息
[iyunv@localhost ~]# pvdisplay
"/dev/sda5" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda5
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID CMh0cW-CKSh-b4fU-MKo1-svma-RBHh-xX35EV
"/dev/sda6" is a new physical volume of "3.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sda6
VG Name
PV Size 3.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 5ZFFoW-j8r2-2D1q-Sh1T-uw3U-33r4-0haV9z
[iyunv@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 lvm2 --- 5.00g 5.00g
/dev/sda6 lvm2 --- 3.01g 3.01g
|
通过这两个命令我们可以看到我们已经创建好的PV的信息,目前还没有使用. ②创建卷组(VG),并将PV加入到卷组中 通过 vgcreate 命令 在创建完PV以后,这时候我们需要创建一个VG,然后将我们的PV都加入到这个卷组当中,在创建卷组时要给该卷组起一个名字 [iyunv@localhost ~]# vgcreate liyan /dev/sda5 /dev/sda6
Volume group "liyan" successfully created | 同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息
[iyunv@localhost ~]# vgdisplay
--- Volume group ---
VG Name liyan
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 // 当前这里有两个PV,分别是我们的
Act PV 2
VG Size 8.01 GiB // 当前VG的大小
PE Size 4.00 MiB // 通过这个我们也可以看到我们LVM默认的PE大小就是4M
Total PE 2050 // 因为VG里面存放的就是各个PV中的PE,所以PE的数量就是VG大小除以默认PE的大小
Alloc PE / Size 0 / 0
Free PE / Size 2050 / 8.01 GiB
VG UUID ih39oJ-Tp8d-I9Ud-FvRq-ku0c-1X5O-NKvEdS
[iyunv@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
liyan 2 0 0 wz--n- 8.01g 8.01g
|
③基于卷组(VG)创建逻辑卷(LV) 通过 lvcreate 命令 因为创建好的PV、VG都是底层的东西,我们上层使用的是逻辑卷,所以我们要基于VG创建我们的逻辑卷才行 [iyunv@localhost ~]# lvcreate -n mylv -L 2G liyan //-L 设置大小 -n 设置名字
Logical volume "mylv" created | 通过 lvcreate 命令基于VG创建好我们的逻辑卷,名字为mylv,大小为2G,同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息
[iyunv@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/liyan/mylv
LV Name mylv
VG Name liyan
LV UUID lBqQy2-7RH6-8NMR-p03z-Z5N1-BkcN-GL21b3
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2015-08-18 17:13:40 +0800
LV Status available
# open 0
LV Size 2.00 GiB //LV的大小为2G
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
| 这样子我们的逻辑卷也就已经创建好了,我们这个时候再通过 vgs 还有 pvs 命令查看一下我们的PV与VG的信息
[iyunv@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
liyan 2 1 0 wz--n- 8.01g 6.01g
[iyunv@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 3.00g
/dev/sda6 liyan lvm2 a-- 3.01g 3.01g |
我们发现,当我们每创建完一个LV时,VG与PV的信息都是时时在变化的,并且我们创建LV的大小是根据当前VG的大小来决定的,不能超过当前VG的剩余大小! 我们在上一篇随笔里面有讲过,每创建好一个逻辑卷,都会在 /dev 目录下出现一个以该卷组命名的文件夹,基于该卷组创建的所有的逻辑卷都是存放在这个文件夹下面,我们可以查看一下 [iyunv@localhost ~]# ls /dev/liyan
mylv |
我们每创建一个新的逻辑卷,该VG目录下都会多出这么一个设备。 二、格式化并使用我们的逻辑卷 我们已经创建好了我们的PV、VG以及LV,这时候我们如果要使用逻辑卷,就必须将其格式化成我们需要用的文件系统,并将其挂载起来,然后就可以像使用分区一样去使用逻辑卷了 [iyunv@localhost ~]# mkfs.ext4 /dev/liyan/mylv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
|
格式化我们的逻辑卷以后,就可以使用 mount 命令将其进行挂载,我们将其挂载到 /mnt 目录下
[iyunv@localhost ~]# ll /mnt
total 0
[iyunv@localhost ~]# mount /dev/liyan/mylv /mnt
[iyunv@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/liyan-mylv on /mnt type ext4 (rw)
[iyunv@localhost ~]# cd /mnt
[iyunv@localhost mnt]# ls
lost+found
[iyunv@localhost mnt]# touch liyan.txt
[iyunv@localhost mnt]# ls
liyan.txt lost+found
| 我们的卷组已经挂载好了,并且可以像使用分区一样来对其进行文件操作了。
三、删除逻辑卷 我们在创建好逻辑卷后可以通过创建文件系统,挂载逻辑卷来使用它,如果说我们不想用了也可以将其删除掉。 【注意:】对于创建物理卷、创建卷组以及创建逻辑卷我们是有严格顺序的,同样,对于删除逻辑卷、删除卷组以及删除物理卷也是有严格顺序要求的 ①首先将正在使用的逻辑卷卸载掉 通过 umount 命令 ②将逻辑卷先删除 通过 lvremove 命令 ③删除卷组 通过 vgremove 命令 ④最后再来删除我们的物理卷 通过 pvremove 命令 [iyunv@localhost ~]# umount /mnt/ //卸除挂载/mnt
[iyunv@localhost ~]# lvremove /dev/liyan/mylv //移除mylv
Do you really want to remove active logical volume mylv? [y/n]: y //确定移除mylv吗
Logical volume "mylv" successfully removed
[iyunv@localhost ~]# vgremove liyan //移除liyan卷组
Volume group "liyan" successfully removed
[iyunv@localhost ~]# pvremove /dev/sda6 //移除物理卷
Labels on physical volume "/dev/sda6" successfully wiped
| 此时我们的刚创建的逻辑卷 mylv,卷组 liyan以及物理卷 /dev/sda6 已经从我们当前操作系统上删除掉了,通过 lvs、vgs、pvs命令可以查看一下
[iyunv@localhost ~]# lvs
No volume groups found
[iyunv@localhost ~]# vgs
No volume groups found
[iyunv@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 lvm2 --- 5.00g 5.00g
|
一、拉伸一个逻辑卷
首先来看下动态拉伸一个逻辑卷的示意图:
我们从上图可以看到,我们在对逻辑卷进行拉伸时,其实际就是向逻辑卷中增加PE的数量,而PE的数量是由VG中剩余PE的数量所决定的。 【注意:】逻辑卷的拉伸操作可以在线进行,不需要卸载掉我们的逻辑卷 这样的好处就是当我们的逻辑卷的大小不够用时,我们不需要对其进行卸载,就可以动态的增加我们的逻辑卷的大小,并不会对我们的系统产生任何影响。例如如果我们的服务器上运行着一个重要的服务或者数据库,并要求我们7*24小时不间断保持在线,那么这样的动态增加逻辑卷的大小就非常的有必要了。 接下来我们来看看拉伸逻辑卷的步骤: 因为我们的逻辑卷的拉伸操作是可以在线进行的,所以这里我们先将逻辑卷挂载上,并在使用情况下动态的拉伸我们的逻辑卷 [iyunv@localhost ~]# mount /dev/liyan/mylv /mnt
[iyunv@localhost ~]# cd /mnt
[iyunv@localhost mnt]# cat > liyan.txt
1
1
233445
^C
[iyunv@localhost mnt]# cat liyan.txt
1
1
233445
[iyunv@localhost mnt]# ls
liyan.txt lost+found
| ①查看当前VG的信息,保证VG中有足够的空闲空间 通过 vgdisplay 或者 vgs 命令
[iyunv@localhost mnt]# vgdisplay
--- Volume group ---
VG Name liyan
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 5.00 GiB
PE Size 4.00 MiB
Total PE 1280
Alloc PE / Size 768 / 3.00 GiB
Free PE / Size 512 / 2.00 GiB //还有2G空闲空间
VG UUID MiBe61-TIob-PCmh-cMwd-Glr8-ydXf-9jlNta
| 在我们的VG中还有足够的空闲空间时,我们就可以动态的对逻辑卷进行拉伸操作了
②扩充逻辑卷 通过 lvextend 命令 比如我这里要对 mylv 逻辑卷扩充1G的大小,此时我们就可以使用 lvextend -L +1G /dev/liyan/mylv 命令来执行操作 [iyunv@localhost mnt]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv liyan -wi-ao---- 3.00g //之前创建的LV大小为3G
[iyunv@localhost mnt]# lvextend -L +1G /dev/liyan/mylv
Size of logical volume liyan/mylv changed from 3.00 GiB (768 extents) to 4.00 GiB (1024 extents).
Logical volume mylv successfully resized //添加1G,LV由3G变4G
| ③查看完扩充后LV大小 扩充完后我们可以使用 lvdisplay 或者 lvs 命令来查看一下当前lv的信息
[iyunv@localhost mnt]# lvdisplay
--- Logical volume ---
LV Path /dev/liyan/mylv
LV Name mylv
VG Name liyan
LV UUID F9g4FU-t4E1-GqPh-ZXtC-CelE-Mx8F-4vpibd
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2015-08-18 17:43:10 +0800
LV Status available
# open 1
LV Size 4.00 GiB //LV扩充后变成4G鸟
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
| 这个时候我们发现拉伸以后我们的逻辑卷大小变成了4G了,此时我们正在使用我的逻辑卷,并没有卸载掉该逻辑卷,同时我们查看逻辑卷里面的内容,发现其里面的文件还在,并且没有受到一点损害
[iyunv@localhost mnt]# ls
liyan.txt lost+found
[iyunv@localhost mnt]# cat liyan.txt
1
1
233445
|
④更新文件系统 通过 resize2fs 命令 我们在对逻辑卷进行拉伸以后,我们通过 df -h 命令可以查看一下当前的文件系统信息 [iyunv@localhost mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.4G 5.7G 38% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 93M 26M 63M 29% /boot
/dev/mapper/liyan-mylv
2.9G 4.6M 2.8G 1% /mnt
| 我们发现我们当前的挂载的逻辑卷的文件系统大小还是3G,并没有变成4G,其原因就是我们的文件系统是在创建完LV以后就马上格式化的,此后我们对逻辑卷进行拉伸以后,其并不会改变当前的文件系统,所以我们这个时候必须更新我们的文件系统,通过使用 resize2fs 命令
[iyunv@localhost mnt]# resize2fs /dev/liyan/mylv //resize2fs命令用来更新文件系统
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/liyan/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/liyan/mylv to 1048576 (4k) blocks.
The filesystem on /dev/liyan/mylv is now 1048576 blocks long.
[iyunv@localhost mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.4G 5.7G 38% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 93M 26M 63M 29% /boot
/dev/mapper/liyan-mylv
3.9G 6.0M 3.7G 1% /mnt //文件系统已经变为4G鸟
|
此时我们发现,我们这时的文件系统也已经更新了,大小变成了4G. 我们通过上面的步骤可以发现,拉伸一个逻辑卷的其实是非常简单的,首先就是保持VG中有足够的空闲空间,其次就是对我们的逻辑卷进行动态的拉伸,最后在拉伸完逻辑卷以后我们还必须要更新我们的文件系统。同时我们可以发现,在对逻辑卷进行拉伸时我们并不需要先卸载掉逻辑卷,可以在线进行,并且逻辑卷里面的文件内容都不会发生变化。 二、拉伸一个卷组 上面介绍了如何拉伸一个逻辑卷,如果说此时我们的VG中PE的数量已经不足了,此时我们如果需要拉伸我们的逻辑卷,发现卷组中的空间已经不够用了,这个时候我们就必须对我们的卷组进行拉伸,使得卷组中有足够的空闲空间,最后再来拉伸我们的逻辑卷。我们知道卷组其实就是将多块PV加入到VG当中,所以卷组的拉伸也非常的简单,我们只需要增加一分区或硬盘,将其格式化成PV,然后再将这个PV加入到该卷组中即可。 这里我们首先模拟一下将VG中的剩余空间全部拉伸到我们的逻辑卷当中,然后我们通过增加一分区或物理硬盘,来对我们的卷组进行拉伸操作 [iyunv@localhost mnt]# vgs
VG #PV #LV #SN Attr VSize VFree
liyan 1 1 0 wz--n- 5.00g 1.00g
[iyunv@localhost mnt]# lvextend -L +1G /dev/liyan/mylv
Size of logical volume liyan/mylv changed from 4.00 GiB (1024 extents) to 5.00 GiB (1280 extents).
Logical volume mylv successfully resized
[iyunv@localhost mnt]# resize2fs /dev/liyan/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/liyan/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/liyan/mylv to 1310720 (4k) blocks.
The filesystem on /dev/liyan/mylv is now 1310720 blocks long.
[iyunv@localhost mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.4G 5.7G 38% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 93M 26M 63M 29% /boot
/dev/mapper/liyan-mylv
4.9G 6.0M 4.7G 1% /mnt
|
这个时候我们如果还要对逻辑卷进行扩充,但是此时我们的VG中空闲空间的大小已经不太够用了,我们这个时候就需要对我们的卷组进行动态的拉伸了 ①将要添加到VG的硬盘格式化成PV 通过 pvcreate 命令 [iyunv@localhost mnt]# pvcreate /dev/sda6
Physical volume "/dev/sda6" successfully created
[iyunv@localhost mnt]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 0
/dev/sda6 lvm2 --- 3.01g 3.01g
| ②将新的PV添加到指定的VG当中 通过 vgextend 命令
③查看当前VG的信息 通过 vgdisplay 或者 vgs 命令
[iyunv@localhost mnt]# vgextend liyan /dev/sda6
Volume group "liyan" successfully extended
[iyunv@localhost mnt]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 0
/dev/sda6 liyan lvm2 a-- 3.01g 3.01g
[iyunv@localhost mnt]# vgdisplay
--- Volume group ---
VG Name liyan
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 8.01 GiB
PE Size 4.00 MiB
Total PE 2050
Alloc PE / Size 1280 / 5.00 GiB
Free PE / Size 770 / 3.01 GiB
VG UUID MiBe61-TIob-PCmh-cMwd-Glr8-ydXf-9jlNta
|
三、缩小一个逻辑卷 上面讲的都是如何对逻辑卷进行拉伸以及对卷组进行拉伸,其实逻辑卷还可以动态的对其进行缩小,虽然在实际情况中,我们几乎不会遇到缩小一个逻辑卷的这种情况,不过还是有必要学习一下如何缩小一个逻辑卷,首先我们也是先来看看缩小逻辑卷的一个示意图
我们看到缩小逻辑卷其实就是从当前的LV中拿出指定的PE数量放回到VG当中。 【注意:】逻辑卷的缩小操作必须离线执行,要先卸载掉逻辑卷才可以 上面在讲的逻辑卷的拉伸操作时我们可以在线执行,不需要卸载掉逻辑卷,但是在进行逻辑卷的缩小操作时,我们必须要先卸载掉逻辑卷才行,否则就可能造成逻辑卷里的文件发生损害。接下来我们来看一下对逻辑卷进行缩小操作的步骤 ①卸载已经挂载的逻辑卷 通过 umount 命令 ②缩小文件系统(会提示需要运行fsck来检查文件系统) 通过 resize2fs 命令 我们在讲到对逻辑卷进行拉伸的时候,其顺序是先对逻辑卷进行拉伸操作,然后再更新我们的文件系统,但是在对逻辑卷进行缩小操作时,我们必须先执行缩小文件系统这个操作!!!这个顺序必须要记清楚!!! [iyunv@localhost mnt]# cd
[iyunv@localhost ~]# umount /mnt
[iyunv@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv liyan -wi-a----- 5.00g
[iyunv@localhost ~]# resize2fs /dev/liyan/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/liyan/mylv' first. //提示先进行文件系统检查
[iyunv@localhost ~]# e2fsck -f /dev/liyan/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
/dev/liyan/mylv: 12/327680 files (0.0% non-contiguous), 38495/1310720 blocks
[iyunv@localhost ~]# resize2fs /dev/liyan/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/liyan/mylv to 786432 (4k) blocks.
The filesystem on /dev/liyan/mylv is now 786432 blocks long.
|
这个时候我们的逻辑卷的文件系统已经被缩小为3G了,接下来我们就可以缩小我们的逻辑卷的大小了 ③缩小LV 通过 lvreduce 命令 因为我们之前的LV大小为5G,我们通过缩小文件系统将其缩减为3G,所以此时我们需要缩小2G大小的逻辑卷 [iyunv@localhost ~]# lvreduce -L -2G /dev/liyan/mylv
WARNING: Reducing active logical volume to 3.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.) // 这里会提示一个警告可能会损坏我们的文件,这种情况会出现在 当我们需要缩小的文件大小与实际操作时缩小的文件大小不一致时,比如这里我如果多缩小了1个G大小的逻辑卷,这个时候就会出现文件损坏的情况
Do you really want to reduce mylv? [y/n]: y
Size of logical volume liyan/mylv changed from 5.00 GiB (1280 extents) to 3.00 GiB (768 extents).
Logical volume mylv successfully resized
[iyunv@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv liyan -wi-a----- 3.00g
|
缩小逻辑卷的操作是个危险的操作,稍不注意就可能损坏我们的逻辑卷,造成文件的丢失或损害,所以我们一般不要对逻辑卷进行缩减操作!!! 缩小完逻辑卷以后,我们再将逻辑卷挂载到 /mnt 下,看看里面的文件是否还在 [iyunv@localhost ~]# mount /dev/liyan/mylv /mnt
[iyunv@localhost ~]# cd /mnt
[iyunv@localhost mnt]# ls
liyan.txt lost+found
[iyunv@localhost mnt]# cat liyan.txt
1
1
233445
|
我们发现,我们之前创建的文件,以及文件里的内容都没有发生改变。 最后再强调一点:缩小逻辑卷的操作必须要先卸载掉逻辑卷,然后先缩小文件系统,最后再来缩小我们的逻辑卷才行!! 四、缩小卷组 我们既然可以动态的拉伸逻辑卷、拉伸卷组以及缩小逻辑卷,那么我们当然也可以缩小我们的卷组。缩小卷组的操作可以通过下面这个示意图来展示:
我们这里需要将分区/sda6拿走,缩小卷组的步骤如下: ①首先必须也要卸载掉我们的逻辑卷 通过 umount 命令 ②将一个PV从指定卷组中移除掉 通过 vgreduce 命令
[iyunv@localhost mnt]# cd
[iyunv@localhost ~]# umount /dev/liyan/mylv
[iyunv@localhost ~]# pvs // 首先我们需要看下我们当前有哪些PV正在使用中,因为缩小一个卷组其实就是从卷组中移除一个PV,如果PV正在使用中,那么PV就移除不了
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 2.00g
/dev/sda6 liyan lvm2 a-- 3.01g 3.01g //当前只有sda6可以移除
[iyunv@localhost ~]# vgreduce liyan /dev/sda6
Removed "/dev/sda6" from volume group "liyan"
| ③查看当前卷组的信息 通过 vgdisplay 或者 vgs 命令
[iyunv@localhost ~]# vgdisplay
--- Volume group ---
VG Name liyan
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 5.00 GiB
PE Size 4.00 MiB
Total PE 1280
Alloc PE / Size 768 / 3.00 GiB
Free PE / Size 512 / 2.00 GiB
VG UUID MiBe61-TIob-PCmh-cMwd-Glr8-ydXf-9jlNta
[iyunv@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 2.00g
/dev/sda6 lvm2 --- 3.01g 3.01g
|
④将PV删除掉 通过 pvremove 命令
[iyunv@localhost ~]# pvremove /dev/sda6
Labels on physical volume "/dev/sda6" successfully wiped
[iyunv@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 liyan lvm2 a-- 5.00g 2.00g
|
|