逻辑卷实现详解

在我们使用Linux的过程中难免会对现有的RAID磁盘阵列组的硬盘管理空间进行增加、减小操作等,如果当初安装系统时划分的硬盘空间没有考虑到今后的硬盘有可能会进行调整的话,我们就要重新规划并重装操作系统,以满足应用需求,这时Linux给我提供了一项硬盘设备管理技术LVM逻辑卷管理器(Logical Volume Manager)通过它,我们就可以实现对硬盘空间的动态划分和调整。

LVM逻辑卷管理器的技术结构


以下是LVM一些名词的解释,解释来自百度LVM:

PhysicalStorageMedia 物理存储设备
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

PV(Physical Volume)物理卷
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备,是LVM的基本存储逻辑块,但和基本的物理存储介质相比,却包含有与LVM相关的管理参数。

VG(Volume Group)卷组
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成,可以在卷组上创建一个或多个LV。

LV(Logical Volume)逻辑卷
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上,在逻辑卷LV之上可以建立文件系统。

PE(Physical Extent)物理块
每一个物理卷PV被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元,PE的大小是可以配置的,默认为4MB。所以物理卷(PV)大小等同的基本单元PE组成。

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


部署实践

1、为实验准备2块20G大小的硬盘


添加硬盘数量满足实验需求

如果不想在虚拟环境下重启识别新硬盘的话,可以执行下面的命令---
echo "- - -" > /sys/class/scsi_host/host0/scan

注意:三个- - -号之间有空隔。

2、将新添加的硬盘添加支持LVM逻辑卷管理中:

[root@CentOS7 ~]#pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

3、创建storage卷组,将新添加的两块硬盘设备加入到卷组中,查看卷组状态:

[root@CentOS7 ~]#vgcreate storage /dev/sdb /dev/sdc  ##添加入卷组
  Volume group "storage" successfully created
[root@CentOS7 ~]#vgdisplay 
  --- Volume group ---
  VG Name               storage    ##创建“storage”名称
  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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB    ##硬盘卷组大小
  VG UUID               v8N8fM-s6x2-mTGN-AiCC-KGhK-uz9D-4w8LVc

4、划分出200M的逻辑设备:

在对逻辑卷划分中,如果我们使用-l参数来指定使用PE基本单元的个数,或者也可以使用常见以-L参数来以容量为单位划分。

[root@CentOS7 ~]#lvcreate -n lv -L 200 storage    ##200M大小的逻辑设备
  Logical volume "lv" created.
[root@CentOS7 ~]#lvdisplay     ##查看逻辑卷信息
  --- Logical volume ---
  LV Path                /dev/storage/lv
  LV Name                lv
  VG Name                storage
  LV UUID                ccH2lD-QUvS-IiUX-gc7K-kkE7-9MDD-UuMhmV
  LV Write Access        read/write
  LV Creation host, time CentOS7.laishaohua, 2017-08-20 20:27:40 +0800
  LV Status              available
  # open                 0
  LV Size                200.00 MiB    ##大小为200M大小
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

5、将逻辑卷格式为mkfs.xfs后挂载使用:

[root@CentOS7 ~]#mkfs.xfs /dev/storage/lv    ##格式化
meta-data=/dev/storage/lv        isize=512    agcount=4, agsize=12800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=51200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@CentOS7 ~]#mkdir /lvmstorage     ##创建挂载目录
[root@CentOS7 ~]#mount /dev/storage/lv /lvmstorage  ##挂载

6、查看挂载状态,并将挂载状态写入配置文件使其重启挂载信息不丢失

[root@CentOS7 ~]#df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/sda2                50G  1.2G   49G   3% /
devtmpfs                479M     0  479M   0% /dev
tmpfs                   489M     0  489M   0% /dev/shm
tmpfs                   489M  6.7M  482M   2% /run
tmpfs                   489M     0  489M   0% /sys/fs/cgroup
/dev/sda3                40G   33M   40G   1% /app
/dev/sr0                7.8G  7.8G     0 100% /mnt/cdrom
/dev/sda1              1014M  116M  899M  12% /boot
tmpfs                    98M     0   98M   0% /run/user/0
/dev/mapper/storage-lv  197M   11M  187M   6% /lvmstorage    ##卷状态
[root@CentOS7 ~]#echo "/dev/storage/lv /lvmstorage xfs defaults 0 0" >> /etc/fstab     ##echo 写入配置文件

7、缩小逻辑卷

注意:对逻辑卷缩小操作不当将会有丢失数据的危险,所以在生产环境中不得已需要缩小逻辑卷的话,也记得将重要的数据提前备份,以防数据丢失。另外对LVM逻辑卷缩小操作前需要检查文件系统的完整性,确保数据安全。
此外由于为mkfs.xfs格式系统,xfs默认只能扩大不能缩小,所以我们需要利用xfsdump / xfsrestore 来实现缩小,缩小后需要重新格式化才能挂载。(适用系统刚安装好,逻辑分区内没有什么数据或数据不多且不重要的情况下)

[root@CentOS7 ~]#rpm -qa xfsdump    ##查看系统有无xfsdump
xfsdump-3.1.4-1.el7.x86_64
[root@CentOS7 ~]#yum -y install xfsdump    ##安装xfsdump套件
[root@CentOS7 ~]#umount /lvmstorage/    ##卸载设备和挂载点的关联

检查文件系统的完整性:

[root@CentOS7 ~]#e2fsck -f /dev/storage/lv    ##e2fsck -f 强制检查
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_open2: Bad magic number in super-block
e2fsck: Superblock invalid, trying backup blocks...
e2fsck: Bad magic number in super-block while trying to open /dev/storage/lv

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

Linux e2fsck命令用于检查使用 Linux ext2 档案系统的 partition 是否正常工作。

将LV逻辑卷的容量减小到150M:

[root@CentOS7 ~]#lvreduce -L 150M /dev/storage/lv 
  Rounding size to boundary between physical extents: 152.00 MiB.
  WARNING: Reducing active logical volume to 152.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/lv? [y/n]: y
  Size of logical volume storage/lv changed from 200.00 MiB (50 extents) to 152.00 MiB (38 extents).
  Logical volume storage/lv successfully resized.

减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上

[root@CentOS7 ~]#mkfs.xfs -f /dev/storage/lv    ##格式化

将文件系统重新挂载并查看硬盘状态:

[root@CentOS7 ~]#mount -a 
[root@CentOS7 ~]#df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/sda2                50G  1.2G   49G   3% /
devtmpfs                479M     0  479M   0% /dev
tmpfs                   489M     0  489M   0% /dev/shm
tmpfs                   489M  6.7M  482M   2% /run
tmpfs                   489M     0  489M   0% /sys/fs/cgroup
/dev/sda3                40G   33M   40G   1% /app
/dev/sr0                7.8G  7.8G     0 100% /mnt/cdrom
/dev/sda1              1014M  116M  899M  12% /boot
tmpfs                    98M     0   98M   0% /run/user/0
/dev/mapper/storage-lv  149M  7.8M  141M   6% /lvmstorage    ##缩小至150M

8、扩容逻辑卷,只要卷组中的空间足够大就可以一直为逻辑卷扩容。

将逻辑卷lv扩展至300M:

[root@CentOS7 ~]#lvextend -L 300M /dev/storage/lv    ##扩展至300M
  Size of logical volume storage/lv changed from 152.00 MiB (38 extents) to 300.00 MiB (75 extents).
  Logical volume storage/lv successfully resized.
[root@CentOS7 ~]#xfs_growfs /dev/storage/lv 
xfs_growfs: /dev/storage/lv is not a mounted XFS filesystem
[root@CentOS7 ~]#xfs_growfs /dev/storage/lv    ##目标XFS文件系统来扩展
meta-data=/dev/mapper/storage-lv isize=512    agcount=4, agsize=9728 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=38912, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 38912 to 76800

df -Th查看分区空间

[root@CentOS7 ~]#df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
/dev/sda2              xfs        50G  1.2G   49G   3% /
devtmpfs               devtmpfs  479M     0  479M   0% /dev
tmpfs                  tmpfs     489M     0  489M   0% /dev/shm
tmpfs                  tmpfs     489M  6.7M  482M   2% /run
tmpfs                  tmpfs     489M     0  489M   0% /sys/fs/cgroup
/dev/sda3              xfs        40G   33M   40G   1% /app
/dev/sr0               iso9660   7.8G  7.8G     0 100% /mnt/cdrom
/dev/sda1              xfs      1014M  116M  899M  12% /boot
tmpfs                  tmpfs      98M     0   98M   0% /run/user/0
/dev/mapper/storage-lv xfs       297M  7.9M  289M   3% /lvmstorage    ##扩展至300M

9、逻辑卷快照建立

在对逻辑卷管理中我们还可以建立快照卷功能,这项功能类似于VMware中的快照功能,提供数据纠错还原功能。

往逻辑卷组设备所挂载的目录用dd写入一个文件20M的文件:

[root@CentOS7 ~]#dd if=/dev/zero of=/lvmstorage/readme bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.0348104 s, 602 MB/s
[root@CentOS7 /lvmstorage]#ll
total 20480
-rw-r--r--. 1 root root 20971520 Aug 20 15:18 readme

使用-s参数生成一个快照卷,-L参数指定划分的大小:

[root@CentOS7 ~]#lvcreate -L 150M -s -n SNAP  /dev/storage/lv
  Using default stripesize 64.00 KiB.
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "SNAP" created.
[root@CentOS7 ~]#lvdisplay 
 --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                3Ftw8X-dqir-EEfA-ZAD9-KQjD-lQAS-np4Yn9
  LV Write Access        read/write
  LV Creation host, time CentOS7.laishaohua, 2017-08-20 15:23:10 +0800
  LV snapshot status     active destination for lv
  LV Status              available
  # open                 0
  LV Size                300.00 MiB
  Current LE             75
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

在LV设备卷所挂载的目录中创建一个100M的二进制文件,再来查看逻辑卷状态:

[root@CentOS7 ~]#dd if=/dev/zero of=/lvmstorage/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 3.13618 s, 33.4 MB/s
[root@CentOS7 ~]#lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                3Ftw8X-dqir-EEfA-ZAD9-KQjD-lQAS-np4Yn9
  LV Write Access        read/write
  LV Creation host, time CentOS7.laishaohua, 2017-08-20 15:23:10 +0800
  LV snapshot status     active destination for lv
  LV Status              available
  # open                 0
  LV Size                300.00 MiB
  Current LE             75
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  48.64%    ##逻辑卷上升
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

检验SNAP快照效果,对逻辑卷进行快照合并还原,(先卸载逻辑设备目录的挂载)

[root@CentOS7 ~]#lvconvert --merge /dev/storage/SNAP 
  Merging of volume storage/SNAP started.
  lv: Merged: 39.23%
  lv: Merged: 100.00%
[root@CentOS7 ~]#mount -a
[root@CentOS7 ~]#ls /lvmstorage/    ##逻辑卷设备被快照后创建的100M文件也被还原了
readme

10、删除逻辑卷

当不再需要使用LVM逻辑卷管理器时,我们可以依次安装顺序删除逻辑卷
取消逻辑卷与目录的挂载关联,并删除 /etc/fstab配置文件中的设备删除:

[root@CentOS7 ~]#umount /lvmstorage/
[root@CentOS7 ~]#sed -i '$d' /etc/fstab  ##因为设备文件在最后一行,我们直接用sed -i执行删除

将LV逻辑卷设备删除,需要属y确认操作:

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

将VG卷组删除:

[root@CentOS7 ~]#vgremove storage 
  Volume group "storage" successfully removed

最后将PV物理卷设备移除:

[root@CentOS7 ~]#pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

确认上述操作执行成功,无提示信息则为操作正确完成逻辑卷设备移除:
[root@CentOS7 ~]#lvdisplay ;vgdisplay ;pvdisplay


总结:

  • 在对逻辑卷大小调整时,针对xfs和ext4不同的文件系统中,所使用的命令都不相同
    resize2fs命令 针对的是ext2、ext3、ext4文件系统
    xfs_growfs命令 针对的是xfs文件系统
  • xfs文件系统只支持增大分区空间的情况,不支持缩小,要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载,这样就会将原来存在的数据清除,所以在对xfs文件系统格式操作时需切记。
  • 在对逻辑卷快照操作能仅有一次有效,一旦被还原后则会被自动删除
  • 移除逻辑卷要依次删除LV逻辑卷、VG卷组后在移除PV物理卷设备,顺序不可颠倒。
  • 当然对硬盘的一切修改操作都需要建立在拥有备份的前提下才可进行。总之谨记住硬盘有价,数据无价,请谨慎操作!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 1 概述 本文对配额,RAID,LVM的概念和具体创建过程做了介绍 2 配额 2.1 配额概念 在内核中执行 以文...
    ghbsunny阅读 2,681评论 0 1
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,127评论 2 34
  • SAMBA可以让Windows与Linux之间共享文件系统,还可以成为打印机服务器(虽然现在不怎么需要这个功能)。...
    Zhang21阅读 1,607评论 0 0
  • 逻辑卷管理器(LVM) 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 允许在多个物理设备间重新组织文件...
    JevonWei阅读 858评论 0 1
  • “当你的才华还撑不起你的野心的时候 你就应该静下心来学习 ...只有拼出来的美丽 没有等出来的辉煌”
    潦草行书阅读 212评论 0 0