Linux(六):分区与挂载
本篇文章介绍的是Linux LVM,普通的分区和挂载方式和LVM 类似,这里不作介绍。
一、简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是磁盘管理的另一种工具,就目前而言,基本上所有操作系统均支持,LVM是建立在硬盘和分区之上的一个逻辑层,用于提高磁盘分区管理的灵活性。
LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池;管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统;管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“DBdata”和“DBSoft”,而不是使用物理磁盘名“sda”和“sdb”或”hda”和”hdb”;当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可
二、基本术语
- 物理存储介质(The physical media):系统存储设备:硬盘,如 /dev/hda1、/dev/sdb等
- 物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
- 卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
- 逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
- PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
- LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
三、常用命令
四、范例
磁盘: /dev/sdb,200G
- 使用fdisk -l 查看磁盘,找到需要进行分区的磁盘,这里以/dev/sdb为例
- 结合df -h 和mount 查看/dev/sdb是否已经分区及分区是否已挂载,如果已分区或已挂载则需另行处理,这里假设/dev/sdb未分区
- 分区。运行fdisk /dev/sdb 进行分区,如果要让分区支持动态扩容,分区类型必须选择为Linux LVM。这里将/dev/sdb分成两个分区:/dev/sdb1和/dev/sdb2,均为100G,分区类型为Linux LVM
- 格式化。使用 mkfs.ext4 /dev/sdb1 和mkfs.ext4 /dev/sdb2 格式化分区,文件格式为ext4
- 创建物理卷。使用 pvcreate /dev/sdb1 /dev/sdb2 创建物理卷,命令执行完后使用pvs 和pvdisplay查看结果
- 创建卷组。使用 vgcreate VG01 /dev/sdb1 /dev/sdb2 创建卷组VG01,并将/dev/sdb1、/dev/sdb2加入卷组。之后使用vgs和vgdisplay查看结果。注:创建卷组时,默认的PE单元为4M,可以使用参数-s 修改
- 创建逻辑卷。使用lvcreate -L 50G -n lv01 VG01 创建逻辑卷 lv01,并分配50G的空间。
- 格式化逻辑卷。mkfs.ext4 /dev/VG01/lv01
- 挂载。使用mount /dev/VG01/lv01 /opt/data 将lv01挂载到/opt/data中,挂载好后会自动生成一个软连接名:/dev/mapper/VG01-lv01,可以使用mount | grep /opt/data 查看
- 将挂载信息写入/etc/fstab中。先使用blkid /dev/VG01/lv01 查看逻辑卷的UUID,然后将信息写入 /etc/fstab中
五、常见问题
- 逻辑卷lv01空间不够,如何扩展?
给逻辑卷增加空间并不会影响到之前空间的使用。扩容命令如下:
lvextend -L +500M /dev/VG01/lv01 或者 lvextend -l 50.5G /dev/VG01/lv01
扩容后需要执行 resize2fs /dev/VG01/lv01 ,让命令生效,之后可通过lvs或lvdisplay查看
- 卷组VG01空间不够,如何扩展?
从另一个磁盘上划分出 新的分区 /dev/sdc1,分区、格式化后,将/dev/sdc1加入到VG01中,命令如下:
vgextend VG01 /dev/sdc1
- 硬盘空间不够时,除了可以增加硬盘外,也可以减少部分逻辑卷的空间,释放给其他逻辑卷使用
- 卸载逻辑卷:umount /opt/data
- 检测逻辑卷上的空余空间:e2fsck /dev/VG01/lv01
- 缩减空间到700M:lvreduce -L 700M /dev/VG01/lv01
- 重新挂载:mount /dev/VG01/lv01 /opt/data
- 如果某一块磁盘或者分区发生故障,如何将数据转移到相同卷组的其他空间上?
-
- 假设/dev/sdb1 发生故障,/dev/sdb2正常
- 查看物理卷,并确保物理卷空间足够:pvs
- 转移空间数据:pvmove /dev/sdb1 /dev/sdb2
- 复查物理卷,确认是否已转移:pvs
- 将故障分区从卷组中移除:vgreduce VG01 /dev/sdb1
- 将物理卷抹除:pvremove /dev/sdb1
- 验证:pvs
- 删除逻辑卷
- 卸载逻辑卷:umount /opt/data
- 删除逻辑卷:lvremove /dev/VG01/lv01
- 修改挂载信息:vim /etc/fstab
- 查看逻辑卷:lvs
- 删除卷组:vgremove VG01
- 将物理卷从卷组中移除:vgreduce /dev/sdb1
- 将LVM卷重置为普通Linux卷
- 先通过lvs、pvs、vgs查看LVM信息卸载逻辑卷、删除逻辑卷、修改挂载信息
- 验证:umount /opt/data && lvremove /dev/VG01/lv01
- 将卷组中的物理卷删除:vgreduce VG01 /dev/sdb1 /dev/sdb2
- 删除物理卷:pvremove /dev/sdb1 /dev/sdb2
- 删除卷组:vgremove VG01
- 重新修改分区标识,更改为普通Linux
六、注意事项
- 文件系统大小和逻辑卷大小一定要保持一致。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。如果逻辑卷小于文件系统,数据就会出问题
- 在处理文件系统的时候,经常需要执行相关命令让配置生效,其中:
- resize2fs 处理的是ext2、ext3、ext4文件系统
- xfs_growfs 针对的是xfs文件系统,xfs只支持增大,不支持减小,并且减小后需要重新格式化才能挂载上,这样原来的数据就丢失了
- 分区扩容的前提是分区类型必须为Linux LVM 卷。可以使用fdisk -l 查看分区的卷类型,一般默认为Linux,如需设置为Linux LVM,需要在分区的时候指定Partition Type为8e