摘自微信公众号 让代码飞起来吧
#Rhel专题二:LVM逻辑卷管理——磁盘管理(二)
2017-05-07 让代码飞起来吧
一、添加20G的硬盘,并新建三个主分区,大小分别为5G、5G、10G
如果对分区操作不熟悉的同学可以去看一下基本存储管理
使用fdisk 或gdisk管理硬盘创建分区
二、更改分区的system id
因为我们刚新建完分区,所以还在磁盘管理界面,t键修改分区的格式
进入后输入需要修改的分区id回车进入,然后输入我们需要更改的格式8e(Linux LVM格式)回车进行修改
如果忘记了8e这个代码,可以在fdisk视图中使用l参数查看一下已知格式的相应代码。
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
可以看到修改格式成功!用相同办法修改其他分区,修改完用p查看一下
Device Boot Start End Blocks Id System
sdb1 1 654 5253223+ 8e Linux LVM
sdb2 655 1308 5253255 8e Linux LVM
sdb3 1309 2610 10458315 8e Linux LVM
可以看到分区格式都已经修改为Linux LVM格式了!然后w保存并退出!
在Centos7中有遇到fdisk /dev/sda 添加闲置空间失败的情况,由GPT格式引起,可以使用gdisk /dev/sda命令来分区划分
三、创建物理卷
命令:pvcreate /dev/sdb{1,2,3}
[root@localhost dev]# pvcreate sdb{1,2,3}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
可以看到创建物理卷成功!下面用pvscan(也可用简拼pvs)查看一下
[root@localhost dev]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 a-- 5.01g 5.01g
/dev/sdb2 lvm2 a-- 5.01g 5.01g
/dev/sdb3 lvm2 a-- 9.97g 9.97g
这就是我们创建的物理卷的详细信息!
四、创建卷组
我们可以把物理卷sdb1和sdb2添加到一个卷组内
命令:vgcreate myvg /dev/sdb{1,2}
[root@localhost dev]# vgcreate myvg /dev/sdb{1,2}
Volume group "myvg" successfully created
可以看到vg组"myvg"创建成功,用vgscan(也可以用简拼vgs)查看一下
[root@localhost dev]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 0 0 wz--n- 10.02g 10.02g
可以看到我们myvg卷组里面有两个pv也就是两个物理卷就是sdb1和sdb2,并且空间是两个物理卷的空间的总和,
五、创建逻辑卷
我们从myvg卷组分出一个逻辑卷mylv:
命令:lvcreate -n mylv -L +5G myvg
[root@localhost dev]# lvcreate -n mylv -L +5G myvg
-n是指新建lvm逻辑卷的名字 -L要大写,来指定逻辑卷大小 后面跟上vg组名称
Logical volume “mylv” created
lvm逻辑卷创建成功!用lvscan(也可以用lvs)来查看一下
[root@localhost dev]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 5.00g
可以看到LVM逻辑卷名称为mylv,隶属于myvg卷组,大小为5G!
六、格式化逻辑卷
命令:mkfs -t ext4 /dev/myvg/mylv
[root@localhost dev]# mkfs -t ext4 /dev/myvg/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
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
格式化成功!
七、进行挂载设置自动挂载
在根目录下新建lv1的文件夹作为挂载目录,然后进行挂载
命令:mount /dev/myvg/mylv /lv1
[root@localhost dev]# cd /
[root@localhost /]# mkdir lv1
[root@localhost /]# mount /dev/myvg/mylv /lv1
[root@localhost /]# cd lv1
[root@localhost lv1]# ls
lost+found
可以看到我们的lvm逻辑卷已经挂载成功,下面新建文件测试是否能使用
[root@localhost lv1]# cat >test.txt<<eof
> lvm
> xiexie
> eof
[root@localhost lv1]# cat test.txt
lvm
xiexie
能够使用!下一步去设置自动挂载
[root@localhost lv1]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu May 4 03:33:31 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9eb6c3c2-ea46-4453-9454-e7e95a99640c / ext4 defaults 1 1
UUID=ebe3134e-f959-4468-9c6e-19c850dec400 /boot ext4 defaults 1 2
UUID=c9e0a4d4-1288-4809-8868-7c0901ff6fae swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/myvg/mylv /lv1 ext4 defaults 0 0
复制粘贴最后一行并且进行编辑,分别更改挂载点,挂载目录,格式!保存并且退出!重启进行测试!
[root@localhost ~]# cd /lv1/
[root@localhost lv1]# ls
lost+found test.txt
[root@localhost lv1]# cat test.txt
lvm
xiexie
[root@localhost lv1]#
挂载点还在!测试成功!谢谢!
还没完呢,重点才开始。
引入lvm的目的是为了能够动态的扩展和缩减分区的容量,同时还能够保证分区内数据的可用性。我们下面就来看一下lvm是如何做到的。
##一、vg中pv的添加和移除
在刚才的案例中我们将/dev/sdb1和/dev/sdb2两个pv加入到了vg:myvg中,然后从myvg中分出了一个5G的lv:mylv。
在这个基础上我们可以向myvg中添加pv或从myvg中移除pv。
先来看看如何将一个pv添加到myvg中:
在添加之前先来扫描下vg的信息,使用vgs命令
[root@localhost dev]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 10.02g 5.02g
使用vgextend来扩展vg:vgextend myvg /dev/sdb3
[root@localhost ~]# vgextend myvg /dev/sdb3
Volume group "myvg" successfully extended
再来扫描vg
[root@localhost dev]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 3 1 0 wz--n- 19.99g 14.99g
可以看到vg扩展成功。
从vg中移除pv,使用vgreduce命令即可
[root@localhost ~]# vgreduce myvg /dev/sdb3
Removed "/dev/sdb3" from volume group "myvg"
[root@localhost dev]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 10.02g 5.02g
vg的扩展和移除都不会影响到lv的内容
[root@localhost /]# cat /lv1/test.txt
lvm
xiexie
非常棒,鼓励一下,接着来。
##二、lv的扩容
lv的扩容是需要修改两个地方的,一个是lv自身的大小,另一个就是挂载目录的大小,下面我们先来给lv的自身空间进行扩容,先查看下现在lv的自身空间
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 5.00g
可以看到现在的lv的大小为5个G,现在我们进行扩容
命令:lvextend /dev/myvg/mylv -L +1G
[root@localhost ~]# lvextend /dev/myvg/mylv -L +1G
Extending logical volume mylv to 6.00 GiB
Logical volume mylv successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 6.00g
可以看到lv的大小变成了6G,在这里要说明一下,扩容lv大小时数字前面的"+“很关键!加”+“和不加”+“有很大的区别,带”+“号表明是在原来的基础上增加多少空间,不带”+“是表明从原来的基础上变到你指定的大小,所以说不加”+“的话你所指定的一定要比原来的基础大,不然命令是不能成功的,下面为大家演示一下不加”+"该怎么去写命令!
命令:lvextend /dev/myvg/mylv -L 8G
[root@localhost ~]# lvextend /dev/myvg/mylv -L 8G
Extending logical volume mylv to 8.00 GiB
Logical volume mylv successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 8.00g
可以看到lv的大小是从6G变成了8G而不是增加8G,我们再看一下挂载目录的大小更改没有
命令:df -h
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.5G 15G 15% /
tmpfs 931M 76K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/mapper/myvg-mylv 5.0G 138M 4.6G 3% /lv1
可以看到挂载目录的大小并没有改变,因为我们需要改变一下lv的文件系统的大小
命令:resize2fs -f /dev/myvg/mylv
[root@localhost ~]# resize2fs -f /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /lv1; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 2097152 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2097152 blocks long.
用df -h再次查看
执行resize2fs报错:
[root@backup binlog]# resize2fs /dev/mapper/centos-home
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/mapper/centos-home 时
找不到有效的文件系统超级块.
确认文件系统是xfs:
[root@backup binlog]# cat /etc/fstab | grep centos-home
/dev/mapper/centos-home /home xfs defaults 0 0
xfs用以下命令来扩磁盘空间:
[root@backup binlog]# xfs_growfs /dev/mapper/centos-home
meta-data=/dev/mapper/centos-home isize=256 agcount=6, agsize=118277632 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=709040128, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=231011, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 709040128 to 715331584
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.5G 15G 15% /
tmpfs 931M 76K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/mapper/myvg-mylv 7.9G 140M 7.4G 2% /lv1
可以看到lv挂载目录大小已经变成了8G,扩容成功!
扩容成功之后,去/lv1里面看看你的东西还在不?是不是很帅!
[root@localhost /]# cat /lv1/test.txt
lvm
xiexie
##**三、lv的减容**
下面我们来学习lv的减容,lv的减容和加容步骤并不是一样的
首先取消挂载目录
命令:umount /dev/myvg/mylv
然后进行磁盘检查
命令:e2fsck -f /dev/myvg/mylv
[root@localhost ~]# e2fsck -f /dev/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
/dev/myvg/mylv: 12/327680 files (0.0% non-contiguous), 55903/1310720 blocks(在这里说明一下如果忘记磁盘检查命令的话可以先进行减小容量!)
接着减小文件系统的容量
命令:resize2fs /dev/myvg/mylv 5G
[root@localhost ~]# resize2fs /dev/myvg/mylv 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
然后进行lv的减容
命令:lvreduce -L 5G /dev/myvg/mylv
[root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv
WARNING: Reducing active logical volume to 5.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y(这里的问题是提醒你是否进行缩容,因为改变大小可能会引起文件的丢失!!!)
Reducing logical volume mylv to 5.00 GiB
Logical volume mylv successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 5.00g
可以看到我们的lv变成了5G,然后进行重新挂载,
命令:mount /dev/myvg/mylv /lv1
挂载完成后查看lv挂载目录大小
命令:df -h
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.5G 15G 15% /
tmpfs 931M 76K 931M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/dev/sr0 3.6G 3.6G 0 100% /media/RHEL_6.5 x86_64 Disc 1
/dev/mapper/myvg-mylv 5.0G 138M 4.6G 3% /lv1
可以看到挂载目录也变成了5G,
我们再去看一下挂载目录里面的文件
[root@localhost /]# cat /lv1/test.txt
lvm
xiexie
可以看到文件还在,所以说在缩容的是否一定要看好可用空间不然会对挂载目录里面的文件造成损坏!在缩容的时候要注意!要先取消挂载目录,再进行磁盘检查,然后更改文件的大小,最后在去给lv进行缩容!!!
##**四、pv、vg、lv的移除**
移除pv,vg和lv时删除时,要安装创建的相反的顺序来删除,先删除lv,再移除vg,最后删除pv
1、删除lv
如果lv已经挂载,先使用umount命令卸载,再执行lvremove来删除
[root@localhost /]# lvremove -f /dev/myvg/mylv
Do you really want to remove active logical volume “mylv”? [y/n]: y
Logical volume “lvol0” successfully removed
2、删除vg
[root@localhost /]# vgremove myvg
Volume group “myvg” successfully removed
3、删除pv
[root@localhost /]# pvremove /dev/sdb3
Labels on physical volume “/dev/sdb3” successfully wiped