linux-磁盘分区策略之逻辑卷lvm

参考文章: LVM逻辑卷管理器

linux-磁盘分区策略之逻辑卷lvm

LVM管理

关于centos7下扩充和减小xfs逻辑分区大小的问题

1. 前言

linux在安装的时候就会涉及到分区的问题,可是如果分区太小了,后期要调整比较麻烦,lvm就是为了解决这种问题,可以实现动态扩容,不需要重新格式化磁盘进行分区了。

2. 注意事项

使用 resize2fs或xfs_growfs 对挂载目录在线扩容:
    1. resize2fs 针对文件系统ext2 ext3 ext4
    2. xfs_growfs 针对文件系统xfs

3. 示例

把/dev/centos/home下的50G变为8G:
1.增加
  1.1 去掉挂载 
    umount /home
  1.2 减小home,
    lvreduce -L 8G /dev/centos/home    或 -42G
  1.3 扩容/dev/centos/root
    lvextend -L 42G /dev/centos/root
    xfs_growfs /dev/centos/root
2.减小
    xfs是不支持减少的,无法使用lvreduce,也无法使用resize2fs,
    会报错:Couldn't find valid filesystem superblock。
    意思是减少后的逻辑分区需要通过mkfs.xfs命令重新格式化一下。

4. LVM的工作原理

      LVM(Logical Volume Manager)逻辑卷管理,是在硬盘分区和文件系统之间添加的一个逻辑层,为文件系统屏蔽下层硬盘分区布局,并提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在硬盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越物理硬盘。当服务器添加了新的硬盘后,管理员不必将原有的文件移动到新的硬盘上,而是通过LVM直接扩展文件系统来跨越物理硬盘。

  LVM就是通过将底层的物理硬盘封装,然后以逻辑卷的方式呈现给上层应用。当我们对底层的物理硬盘进行操作时,不再是针对分区进行操作,而是通过逻辑卷对底层硬盘进行管理操作。

5. 基础术语

  • LV(logical volume)-逻辑卷:
类似于非LVM系统中的硬盘分区, 逻辑卷建立在卷组之上,在逻辑卷LV之上建立文件系统。
卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。
系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
  • VG(Volume Group)-卷组:
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。
一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LVM卷组类似于非LVM系统中的物理硬盘,一个卷组VG由一个或多个物理卷PV组成。
可以在卷组VG上建立逻辑卷LV。
  • PV(physical volume)-物理卷:
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,
也可以是整个物理硬盘,也可以是raid设备。
物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质比较却包含与LVM相关的管理参数,
创建物理卷可以用硬盘分区,也可以用硬盘本身。
  • 物理存储介质(The physical media):
LVM存储介质,可以是硬盘分区、整个硬盘、raid阵列或SAN硬盘。
设备必须初始化为LVM物理卷,才能与LVM结合使用。
  •  PE(physical Extent)-物理块:
物理卷PV中可以分配的最小存储单元,PE的大小可以指定,默认为4MB
  • LE(Logical Extent)-逻辑块:
逻辑卷LV中可以分配的最小存储单元,在同一卷组VG中LE的大小和PE是相同的,并且一一相对。

注意:PE大,读取速度快,但浪费空间。反之,读取速度慢,但节省空间。类似于socket;

第7章 使用RAID与LVM磁盘阵列技术。第7章 使用RAID与LVM磁盘阵列技术。

 

总结:多个磁盘/分区/raid-->多个物理卷PV-->合成卷组VG-->从VG划分出逻辑卷LV-->格式化LV,挂载使用。

注意:老的Linux在创建PV时,需要将分区类型改为Linux LVM(8e)。但新的系统已经非常智能,即使默认的Linux分区(83),也可以创建PV。

 6. LVM的优点

  • 卷组VG可以使多个硬盘空间看起来像是一个大硬盘。
  • 逻辑卷LV可以创建跨多个硬盘空间的分区。
  • 在使用逻辑卷LV时,可以在空间不足时动态调整大小,不需要考虑逻辑卷LV在硬盘上的位置,不用担心没有可用的连续的空间。
  • 可以在线对卷组VG、逻辑卷LV进行创建、删除、调整大小等操作。但LVM上的文件系统也需要重新调整大小。
  • LVM允许创建快照,用来保存文件系统的备份。

注意:LVM是软件的卷管理方式,RAID是磁盘管理的方法。对于重要的数据块,用RAID保护物理硬盘不会因为故障而中断业务,再用LVM来实现对卷的良性管理,更好的利用硬盘资源。

LVM有两种写入机制:线性(写完一个PV再写下一个PV,默认)、条带(平均)

7. lvm常用的命令

功能PV管理命令VG管理命令LV管理命令
scan 扫描pvscanvgscanlvscan
create 创建pvcreatevgcreatelvcreate
display 显示pvdisplayvgdisplaylvdisplay
remove 移除pvremovevgremovelvremove
extend 扩展 vgextendlvextend
reduce 减少 vgreducelvreduce

注意:查看命令有scan、display和s(pvs、vgs、lvs)。s是简单查看对应卷信息,display是详细查看对应卷信息。而scan是扫描所有的相关的对应卷。

8. 创建LVM--示例一

8.1 创建物理卷(分区或者整块磁盘都可以)

[root@bigdata01 ~]# pvcreate /dev/sda5 /dev/sda6

可以使用pvs或者pvdisplay查看创建结果

8.2 创建卷组

[root@bigdata01 ~]# vgcreate vg_linux /dev/sda5 /dev/sda6

增加分区到卷组可以用vgextend命令,用vgs或者vgdisplay查看结果

8.3 创建逻辑卷

[root@bigdata01 ~]#lvcreate -n centos6 -L 50G vg_linux

用lvs或者lvdisplay查看结果

8.4 如果需要扩大已有的逻辑卷

[root@bigdata01 ~]# lvextend -L +30G -n /dev/vg_linux/centos6

8.5 格式化逻辑卷

[root@bigdata01 ~]# mkfs.ext4 /dev/vg_linux/centos6

创建的逻辑卷都放到在 /dev/mapper目录中。

==================================================================================

一. 创建LVM--示例二

第一步:让两块硬盘支持LVM技术

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

第二步:创建卷组

[root@ken ~]# vgcreate ken /dev/sdb /dev/sdc
  Volume group "ken" successfully created

第三步:创建逻辑卷

# 切割出一个100M的逻辑卷设备
# 这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。
# 第一种是以容量为单位,所使用的参数为-L。
#   例如,使用-L 150M生成一个大小为150MB的逻辑卷。
# 第二种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。
#   例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。
[root@ken ~]# lvcreate -n ken1 -L 100M ken
  Logical volume "ken1" created.

第四步:把生成好的逻辑卷进行格式化

[root@ken ~]# mkfs.ext4 /dev/ken/ken1 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
...

第五步:挂载使用

[root@ken ~]# mkdir /test1
[root@ken ~]# mount /dev/ken/ken1 /test1
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/ken-ken1      93M  1.6M   85M   2% /test1

二. Linux扩容逻辑卷ext4格式

 第一步:卸载

[root@ken ~]# umount /test1

第二步:把ken1逻辑卷扩展到300M

[root@ken ~]# umount /test1
[root@ken ~]# lvextend -L 300M /dev/ken/ken1 
  Size of logical volume ken/ken1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents).
  Logical volume ken/ken1 successfully resized.

第三步:检查磁盘完整性

[root@ken ~]# e2fsck -f /dev/ken/ken1
e2fsck 1.42.9 (28-Dec-2013)
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/ken/ken1: 11/25688 files (9.1% non-contiguous), 8896/102400 blocks

第四步:重置硬盘容量

[root@ken ~]# resize2fs /dev/ken/ken1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/ken/ken1 to 307200 (1k) blocks.
The filesystem on /dev/ken/ken1 is now 307200 blocks long.

第五步:重新挂载

可以发现现在已经是300M了

[root@ken ~]# mount /dev/ken/ken1 /test1
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/ken-ken1     287M  2.0M  266M   1% /test1

三. Linux扩容逻辑卷xfs格式

  1. xfs格式只能扩容,不能减小!
  2. xfs格式无需卸载,支持在线扩容

第一步:创建一个逻辑卷并格式化为xfs格式

# 创建
[root@ken ~]# lvcreate -n lv_xfs -L 300M ken 
  Logical volume "lv_xfs" created.

# xfs格式化
[root@ken ~]# mkfs.xfs /dev/ken/lv_xfs 
meta-data=/dev/ken/lv_xfs        isize=512    agcount=4, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=76800, 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@ken ~]# mount /dev/ken/lv_xfs /ken
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/ken-lv_xfs   297M   16M  282M   6% /ken

第三步:在线扩容至600M

使用lvextend和xfs_growfs动态扩容

[root@ken ~]# lvextend -L 600M /dev/ken/lv_xfs 
  Size of logical volume ken/lv_xfs changed from 300.00 MiB (75 extents) to 600.00 MiB (150 extents).
  Logical volume ken/lv_xfs successfully resized.

[root@ken ~]# xfs_growfs /dev/ken/lv_xfs
meta-data=/dev/mapper/ken-lv_xfs isize=512    agcount=4, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=76800, 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 76800 to 153600

第四步:查看磁盘信息

发现xfs格式的逻辑卷已经扩容至600M

[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/ken-lv_xfs   597M   16M  582M   3% /ken

四、Linux缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。

所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,

在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。

在执行缩容操作前记得先把文件系统卸载掉。

第一步:卸载

[root@ken ~]# umount /test1/

第二步:检查系统完整性

[root@ken ~]# e2fsck -f /dev/ken/ken1 
e2fsck 1.42.9 (28-Dec-2013)
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/ken/ken1: 11/75088 files (9.1% non-contiguous), 15637/307200 blocks

第三步:大小重置

[root@ken ~]# resize2fs /dev/ken/ken1 200M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/ken/ken1 to 204800 (1k) blocks.
The filesystem on /dev/ken/ken1 is now 204800 blocks long.

第四步:缩小到200M

[root@ken ~]# lvreduce -L 200M /dev/ken/ken1 
  WARNING: Reducing active logical volume to 200.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce ken/ken1? [y/n]: y
  Size of logical volume ken/ken1 changed from 300.00 MiB (75 extents) to 200.00 MiB (50 extents).
  Logical volume ken/ken1 successfully resized.

第五步:重新挂载使用

[root@ken ~]# mount /dev/ken/ken1 /test1/
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.2G   16G   7% /
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    488M     0  488M   0% /dev/shm
tmpfs                    488M  7.7M  480M   2% /run
tmpfs                    488M     0  488M   0% /sys/fs/cgroup
/dev/sda1               1014M  130M  885M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/ken-ken1     190M  1.6M  175M   1% /test1

五、Linux删除逻辑卷

第一步:取消挂载

[root@ken ~]# umount /test1/

第二步:删除逻辑卷设备

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

第三步:删除卷组

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

第四步:删除物理卷

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

六、卷组VG缩小

第一步:查看物理卷

卷组VG的缩小,要查看物理卷PV是否被使用,因为无法缩减一个正在使用的物理卷PV。如下:

[root@xuexi ~]# cp /etc/passwd /lv1/  //复制测试数据
[root@xuexi ~]# ls /lv1/
lost+found  passwd
[root@xuexi ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1  vg1 lvm2 a--  <2.00g <1.92g
  /dev/sdb2  vg2 lvm2 a--   1.98g  1.98g
  /dev/sdb3  vg1 lvm2 a--  <2.00g <2.00g
  /dev/sdb4      lvm2 ---   2.00g  2.00g
[root@xuexi ~]# vgreduce vg1 /dev/sdb1
  Physical volume "/dev/sdb1" still in use

第二步:从卷组VG中移出物理卷PV

将/dev/sdb1移出vg1,可以使用pvmove命令移动数据,但必须有足够的空间,场景多用于更换旧硬盘

[root@xuexi ~]# pvmove /dev/sdb1 /dev/sdb3
  /dev/sdb1: Moved: 10.00%
  /dev/sdb3: Moved: 100.00%

[root@xuexi ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1  vg1 lvm2 a--  <2.00g <2.00g
  /dev/sdb2  vg2 lvm2 a--   1.98g  1.98g
  /dev/sdb3  vg1 lvm2 a--  <2.00g <1.92g
  /dev/sdb4      lvm2 ---   2.00g  2.00g

[root@xuexi ~]# vgreduce vg1 /dev/sdb1
  Removed "/dev/sdb1" from volume group "vg1"

[root@xuexi ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1      lvm2 ---   2.00g  2.00g
  /dev/sdb2  vg2 lvm2 a--   1.98g  1.98g
  /dev/sdb3  vg1 lvm2 a--  <2.00g <1.92g
  /dev/sdb4      lvm2 ---   2.00g  2.00g

=============================================================================

4.1 通过lsblk查看新硬盘

 [root@bigdata01 ~]# lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    fd0               2:0    1    4K  0 disk 
    sda               8:0    0   40G  0 disk 
    ├─sda1            8:1    0  200M  0 part /boot
    ├─sda2            8:2    0    4G  0 part [SWAP]
    └─sda3            8:3    0 35.8G  0 part 
      └─centos-root 253:0    0 35.8G  0 lvm  /
    sdb               8:16   0  100G  0 disk 
    └─sdb1            8:17   0  100G  0 part /data
    sr0              11:0    1 1024M  0 rom  

4.2 通过parted命令查看分区

 [root@bigdata01 ~]# parted -l
    Model: VMware Virtual disk (scsi)
    Disk /dev/sda: 42.9GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 

    Number  Start   End     Size    Type     File system     Flags
     1      1049kB  211MB   210MB   primary  xfs             boot
     2      211MB   4506MB  4295MB  primary  linux-swap(v1)
     3      4506MB  42.9GB  38.4GB  primary                  lvm

4.3 创建逻辑卷组   

[root@xuexi ~]# vgcreate vg1 /dev/sdb1
    Volume group "vg1" successfully created

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值