LVM


在物理卷的基础上组成卷组,在卷组里划分逻辑卷,然后格式化使用,有点是方便扩容和缩容,弊端是若磁盘损坏,数据难找回。


创建lvm逻辑卷


方法:


fdisk命令创建磁盘sdb1,sdb2,sdb3 

 

  -p 主磁盘 -t 更改磁盘类型为 8e 

 

  pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 创建物理卷 

 

  pvdisplay 或pvs 查看创建的物理卷 

 

  vgcreate vg1 /dev/sdb1 /dev/sdb2 创建物理卷组vg1,此卷组包含了sdb1和sdb2物理卷 

 

  vgdisplay 或vgs 查看创建的物理卷,vgremove 删除卷组命令 

 

  lvcreate -L 100M -n lv1 vg1 在物理卷组里创建逻辑卷lv1,指定大小100M 

 

  mkfs.ext4 /dev/vg1/lv1 格式化lv1逻辑卷 xfs会影响扩缩容 

 
注:yum install -y lvm 若找不到lvm包时用命令 yum provides " /*/pvcreate" 搜索命令pvcreate的安装包
 
若找不到物理卷文件可用partprobe命令生成,若pvcreate命令提示无法打开分区请查看磁盘是否挂载
 

  例: 

 
 
 
 
[root@bogon ~]#  
 fdisk -l
 
 
 
 
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
 
Units = 扇区 of 1 * 512 = 512 bytes
 
扇区大小(逻辑/物理):512 字节 / 512 字节
 
I/O 大小(最小/最佳):512 字节 / 512 字节
 
磁盘标签类型:dos
 
磁盘标识符:0x4adcd71d
 
 
 
 
 设备 Boot Start End Blocks Id System
 
[root@bogon ~]#  
 fdisk /dev/sdb 
  创建分区
 
欢迎使用 fdisk (util-linux 2.23.2)。
 
 
 
 
更改将停留在内存中,直到您决定将更改写入磁盘。
 
使用写入命令前请三思。
 
 
 
 
 
 
 
命令(输入 m 获取帮助): 
 n  
  新建分区
 
Partition type:
 
 p primary (0 primary, 0 extended, 4 free)
 
 e extended
 
Select (default p):  
 p  
  创建主分区
 
分区号 (1-4,默认 1): 
 1 
  1号分区
 
起始 扇区 (2048-41943039,默认为 2048):
 
将使用默认值 2048
 
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039): 
 +2G 
  分区容量2G
 
分区 1 已设置为 Linux 类型,大小设为 2 GiB
 
 
 
 
命令(输入 m 获取帮助): 
 t  
  指定分区类型
 
已选择分区  
 1  
  指定1号分区类型
 
Hex 代码(输入 L 列出所有代码): 
 8e  
  指定1号分区类型为83
 
已将分区“Linux”的类型更改为“Linux LVM” 
  指定成功,LVM类型分区
 
 
 
 
命令(输入 m 获取帮助): 
 n
 
Partition type:
 
 p primary (1 primary, 0 extended, 3 free)
 
 e extended
 
Select (default p):  
 p
 
分区号 (2-4,默认 2): 
 2
 
起始 扇区 (4196352-41943039,默认为 4196352):
 
将使用默认值 4196352
 
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039): 
 +1G 
 
分区 2 已设置为 Linux 类型,大小设为 1 GiB
 
 
 
 
命令(输入 m 获取帮助): 
 t 
  
 
分区号 (1,2,默认 2): 
 2
 
Hex 代码(输入 L 列出所有代码): 
 8e
 
已将分区“Linux”的类型更改为“Linux LVM”
 
 
 
 
命令(输入 m 获取帮助): 
 n
 
Partition type:
 
 p primary (2 primary, 0 extended, 2 free)
 
 e extended
 
Select (default p):  
 p
 
分区号 (3,4,默认 3): 
 3
 
起始 扇区 (6293504-41943039,默认为 6293504):
 
将使用默认值 6293504
 
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039,默认为 41943039): 
 +2G
 
分区 3 已设置为 Linux 类型,大小设为 2 GiB
 
 
 
 
命令(输入 m 获取帮助): 
 t
 
分区号 (1-3,默认 3): 
 3
 
Hex 代码(输入 L 列出所有代码): 
 8e
 
已将分区“Linux”的类型更改为“Linux LVM”
 
 
 
 
命令(输入 m 获取帮助): 
 wq  
  保存分区并退出
 
The partition table has been altered!
 
 
 
 
Calling ioctl() to re-read partition table.
 
正在同步磁盘。
 
[root@bogon ~]# 
  yum install -y lvm  
  安装lvm软件包
 
已加载插件:fastestmirror
 
base | 3.6 kB 00:00:00 
 
extras | 3.4 kB 00:00:00 
 
updates | 3.4 kB 00:00:00 
 
updates/7/x86_64/primary_db | 6.9 MB 00:00:01 
 
Loading mirror speeds from cached hostfile
 
 * base: mirror.bit.edu.cn
 
 * updates: mirror.bit.edu.cn
 
没有可用软件包 lvm。 
  找不到lvm软件包
 
错误:无须任何处理
 
[root@bogon ~]# 
  yum provides "/*/pvcreate"  
  用yum provides命令查pvcreate命令的软件包
 
已加载插件:fastestmirror
 
Loading mirror speeds from cached hostfile
 
 * base: mirror.bit.edu.cn
 
 * extras: mirror.lzu.edu.cn
 
 * updates: mirror.bit.edu.cn
 
base/7/x86_64/filelists_db | 6.7 MB 00:00:01 
 
extras/7/x86_64/filelists_db | 709 kB 00:00:00 
 
updates/7/x86_64/filelists_db | 4.2 MB 00:00:01 
 
1:bash-completion-2.1-6.el7.noarch : Programmable completion for Bash
 
源 :base
 
匹配来源:
 
文件名 :/usr/share/bash-completion/completions/pvcreate
 
7: 
 lvm2-2.02.171-8.el7.x86_64 
  : Userland logical volume management tools 
  找到包名称为lvm2
 
源 :base
 
匹配来源:
 
文件名 :/usr/sbin/pvcreate
 
7 
 :lvm2-2.02.171-8.el7.x86_64 
  : Userland logical volume management tools  
 找到包名称为lvm2
 
源 :@base
 
匹配来源:
 
文件名 :/usr/sbin/pvcreate
 
[root@bogon ~]#  
 yum install -y lvm2  
  安装lvm2
 
已加载插件:fastestmirror
 
Loading mirror speeds from cached hostfile
 
 * base: mirror.bit.edu.cn
 
 * extras: mirror.lzu.edu.cn
 
 * updates: mirror.bit.edu.cn
 
软件包 7:lvm2-2.02.171-8.el7.x86_64 已安装并且是最新版本
 
无须任何处理
 
[root@bogon ~]#  
 pvcreate /dev/sdb1  
  创建sdb1物理卷
 
WARNING: ext3 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]:  
 y
 
 Wiping ext3 signature on /dev/sdb1.
 
 Physical volume "/dev/sdb1" successfully created.
 
[root@bogon ~]# 
  pvcreate /dev/sdb2  
  创建sdb2物理卷
 
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: 
  y
 
 Wiping xfs signature on /dev/sdb2.
 
 Physical volume "/dev/sdb2" successfully created.
 
[root@bogon ~]#  
 pvcreate /dev/sdb3  
  创建sdb3物理卷
 
WARNING: xfs signature detected on /dev/sdb3 at offset 0. Wipe it? [y/n]:  
 y
 
 Wiping xfs signature on /dev/sdb3.
 
WARNING: xfs_external_log signature detected on /dev/sdb3 at offset  
 16384 
 . Wipe it? [y/n]: y
 
 Wiping xfs_external_log signature on /dev/sdb3.
 
WARNING: xfs_external_log signature detected on /dev/sdb3 at offset  
 17408 
 . Wipe it? [y/n]: y
 
 Wiping xfs_external_log signature on /dev/sdb3.
 
WARNING: xfs_external_log signature detected on /dev/sdb3 at offset  
 18432.  
 Wipe it? [y/n]: y
 
 Wiping xfs_external_log signature on /dev/sdb3.
 
WARNING: xfs_external_log signature detected on /dev/sdb3 at offset  
 19456. 
  Wipe it? [y/n]: y
 
 Wiping xfs_external_log signature on /dev/sdb3.
 
WARNING: xfs_external_log signature detected on /dev/sdb3 at offset 
  20480 
 . Wipe it? [y/n]: y
 
 Wiping xfs_external_log signature on /dev/sdb3.
 
 Physical volume "/dev/sdb3" successfully created.
 
[root@bogon ~]# 
  pvs  
  查看物理卷容量
 
 PV VG Fmt Attr PSize PFree
 
 /dev/sdb1 lvm2 --- 2.00g 2.00g
 
 /dev/sdb2 lvm2 --- 1.00g 1.00g
 
 /dev/sdb3 lvm2 --- 2.00g 2.00g
 
[root@bogon ~]#  
 pvdisplay  
  详细的查看命令pvdisplay
 
 "/dev/sdb1" is a new physical volume of "2.00 GiB"
 
 --- NEW Physical volume ---
 
 PV Name  
  /dev/sdb1
 
 VG Name 
 
 PV Size  
  2.00 GiB
 
 Allocatable NO
 
 PE Size 0 
 
 Total PE 0
 
 Free PE 0
 
 Allocated PE 0
 
  
  PV UUID 
  ieUExc-P0fq-hbuG-QK74-U1R7-SJ6M-xXEwga
 
 
 
 "/dev/sdb2" is a new physical volume of "1.00 GiB"
 
 --- NEW Physical volume ---
 
 PV Name  
  /dev/sdb2
 
 VG Name 
 
 PV Size  
  1.00 GiB
 
 Allocatable NO
 
 PE Size 0 
 
 Total PE 0
 
 Free PE 0
 
 Allocated PE 0
 
  
  PV UUID 
  d8M0rY-NgMd-A4By-8oCl-C7nZ-2eEB-csKMys
 
 
 
 "/dev/sdb3" is a new physical volume of "2.00 GiB"
 
 --- NEW Physical volume ---
 
 PV Name  
  /dev/sdb3
 
 VG Name 
 
 PV Size  
 2.00 GiB
 
 Allocatable NO
 
 PE Size 0 
 
 Total PE 0
 
 Free PE 0
 
 Allocated PE 0
 
  
  PV UUID  
  mOLP9f-BnJN-Nmdr-MVXy-eU2t-Ci8E-x5SsQW
 
 
 
[root@bogon ~]#  
 vgcreate vg1 /dev/sdb1 /dev/sdb2 
 
创建物理卷组vg1,包含了物理卷sdb1和sdb2物理卷
 
 Volume group "vg1" successfully created
 
[root@bogon ~]# 
  vgs 
  查看物理卷组容量
 
 VG #PV #LV #SN Attr VSize VFree
 
  
  vg1 2 0 0 wz--n- 2.99g 2.99g
 
[root@bogon ~]#  
 vgdisplay 
  详细的查看命令vgdisplay
 
 --- Volume group ---
 
 VG Name  
  vg1
 
 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  
  2.99 GiB
 
 PE Size 4.00 MiB
 
 Total PE 766
 
 Alloc PE / Size 0 / 0 
 
 Free PE / Size 766 / 2.99 GiB
 
  
  VG UUID  
  zQCWXu-031o-fnc0-1O92-Bdsp-CQ4T-j0hexh
 
 
 
[root@bogon ~]# 
  lvcreate -L 500M -n lv1 vg1 
  创建逻辑卷并命名lv1,且指定容量为500M
 
  
  Logical volume "lv1" created 
 .
 
[root@bogon ~]# 
  lvs 
  查看逻辑卷容量
 
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 
  
  lv1 vg1 -wi-a----- 500.00m  
  
 
[root@bogon ~]# 
  lvdisplay  
  详细查看命令lvdisplay
 
 --- Logical volume ---
 
 LV Path /dev/vg1/lv1
 
 LV Name lv1
 
 VG Name vg1
 
 LV UUID Tq3xFw-gzfL-WARQ-AQka-NbT6-Lv5K-cHjVCK
 
 LV Write Access read/write
 
 LV Creation host, time bogon, 2018-04-11 23:47:25 +0800
 
 LV Status available
 
 # open 0
 
 Current LE 125
 
 Segments 1
 
 Allocation inherit
 
 Read ahead sectors auto
 
 - currently set to 8192
 
 Block device 253:0
 
 
 
[root@bogon ~]# 
  mkfs.ext4 /dev/vg1/lv1  
  
 
格式化逻辑卷lv1,并安装ext4文件系统,若安装xfs文件系统,则只能扩容,不支持缩容
 
mke2fs 1.42.9 (28-Dec-2013)
 
文件系统标签=
 
OS type: Linux
 
块大小=1024 (log=0)
 
分块大小=1024 (log=0)
 
Stride=0 blocks, Stripe width=0 blocks
 
128016 inodes, 512000 blocks
 
25600 blocks (5.00%) reserved for the super user
 
第一个数据块=1
 
Maximum filesystem blocks=34078720
 
63 block groups
 
2032 inodes per group
 
Superblock backups stored on blocks: 
 
 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
 
Allocating group tables: 完成 
 
正在写入inode表: 完成 
 
Creating journal (8192 blocks): 完成
 
Writing superblocks and filesystem accounting information: 完成 
 
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
 
I/O 大小(最小/最佳):512 字节 / 512 字节
 
[root@bogon ~]#  
 mount /dev/vg1/lv1 /sdb3  
  挂载逻辑卷 lv1 至/sdb3目录下
 
[root@bogon ~]# df -h
 
文件系统 容量 已用 可用 已用% 挂载点
 
/dev/sda3 18G 2.6G 16G 15% /
 
devtmpfs 907M 0 907M 0% /dev
 
tmpfs 916M 0 916M 0% /dev/shm
 
tmpfs 916M 8.7M 908M 1% /run
 
tmpfs 916M 0 916M 0% /sys/fs/cgroup
 
/dev/sda1 197M 113M 84M 58% /boot
 
tmpfs 184M 0 184M 0% /run/user/1004
 
/dev/mapper/vg1-lv1 477M 2.3M 445M 1% /sdb3  
  挂载名称改变了
 
[root@bogon ~]# 
  ls -l  
 /dev 
 /mapper 
 /vg1-lv1  
 详细列出两个文件
 
lrwxrwxrwx. 1 root root 7 4月 11 23:48 /dev/mapper/vg1-lv1 -> ../dm-0
 
[root@bogon ~]# 
  ls -l /dev/vg1/lv1  
   
 详细列出两个文件
 
lrwxrwxrwx. 1 root root 7 4月 11 23:48 /dev/vg1/lv1 -> ../dm-0
 
[root@bogon ~]#  
  两个软链接,指向了同一个文件 ../dm-0
 
 
 
 
扩容
 
 
 
 

  lvresize -L 800M /dev/vg1/lv1 扩容磁盘至800M 

 

  e2fsck -f /dev/vg1/lv1 检查磁盘错误(针对ext执行) 

 

  resize2fs /dev/vg1/lv1 更新逻辑卷信息(针对ext执行) 

 
 
 
 

  例: 

 
[root@bogon ~]# 
  lvresize -L 800M /dev/vg1/lv1  
 扩容磁盘
 
 Size of logical volume vg1/lv1 changed from 500.00 MiB (125 extents) to 800.00 MiB (200 extents).
 
 Logical volume vg1/lv1  
 successfully resized. 
 
[root@bogon ~]# 
  e2fsck -f /dev/vg1/lv1  
  检查磁盘错误(针对ext执行)
 
e2fsck 1.42.9 (28-Dec-2013)
 
/dev/vg1/lv1 is  
 mounted. 提示lv1已挂载,无法检查磁盘
 
e2fsck: 无法继续 
 , 中止.
 
 
 
 
[root@bogon ~]# 
  umount /sdb3 卸载lv1
 
[root@bogon ~]# 
  e2fsck -f /dev/vg1/lv1  
  检查磁盘错误(针对ext执行)
 
e2fsck 1.42.9 (28-Dec-2013)
 
第一步 
 : 检查inode,块,和大小
 
第二步 
 : 检查目录结构
 
第3步 
 : 检查目录连接性
 
Pass 4 
 : Checking reference counts
 
第5步 
 : 检查簇概要信息
 
/dev/vg1/lv1: 11/128016 files (0.0% non-contiguous), 26684/512000 blocks
 
[root@bogon ~]# 
  resize2fs /dev/vg1/lv1  
  更新逻辑卷信息(针对ext执行)
 
resize2fs 1.42.9 (28-Dec-2013)
 
Resizing the filesystem on /dev/vg1/lv1 to 819200 (1k) blocks.
 
The filesystem on /dev/vg1/lv1 is now 819200 blocks long.
 
[root@bogon ~]# 
  lvs  
  查看逻辑卷容量
 
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 
 lv1 vg1 -wi-a----- 
  800.00m  
   
  容量已经更新 
 
[root@bogon ~]# 
 
 
 
 
xfs文件系统的扩容
 
 
 
 

  lvresize -L 800M /dev/vg1/lv1 扩容逻辑卷lv1至800M 

 

  xfs_growfs /dev/vg1/lv1 针对xfs文件系统执行,不需要先卸载,得挂载再执行 

 
 
 
 

  例: 

 
 
 
 
mkfs.xfs: Use the -f option to force overwrite.
 
[root@bogon ~]# 
  mkfs.xfs -f /dev/vg1/lv1  
 将逻辑卷lv1的文件系统改为xfs
 
meta-data=/dev/vg1/lv1 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@bogon ~]# 
  lvs 
  查看逻辑卷lv1容量
 
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 
 lv1 vg1 -wi-a----- 200.00m 
 
[root@bogon ~]# 
  lvresize -L 800M /dev/vg1/lv1  
  扩容逻辑卷lv1容量至800M
 
 Size of logical volume vg1/lv1 changed from 200.00 MiB (50 extents) to 800.00 MiB (200 extents).
 
 Logical volume vg1/lv1 successfully resized.
 
[root@bogon ~]#  
 xfs_growfs /dev/vg1/lv1  
  更新文件系统为xfs的逻辑卷lv1
 
xfs_growfs: /dev/vg1/lv1 is not a mounted XFS filesystem
 
[root@bogon ~]# 
  lvs  
  查看逻辑卷lv1容量
 
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 
 lv1 vg1 -wi-a----- 
  800.00m 
   
  更新扩容成功 
 
[root@bogon ~]#
 
 
 
 
 
 
 
缩容(xfs系统不支持) 

 
 
 
 

  先卸载逻辑卷 

 

  e2fsck -f /dev/vg1/lv1 检查磁盘错误(ext) 

 

  resize2fs /dev/vg1/lv1 100M 更新逻辑卷信息(ext) 

 

  lvresize -L 100M /dev/vg1/lv1 重新设置卷大小 

 

  lvdisplay 或 lvs 查看逻辑卷的大小 

 
 
 
 

  例: 

 
 
 
 
[root@bogon ~]# 
  umount -l /sdb3 
  先卸载逻辑卷 
 
umount: /sdb3:未挂载
 
[root@bogon ~]#  
 e2fsck -f /dev/vg1/lv1 
  检查磁盘错误
 
e2fsck 1.42.9 (28-Dec-2013)
 
第一步: 检查inode,块,和大小
 
第二步: 检查目录结构
 
第3步: 检查目录连接性
 
Pass 4: Checking reference counts
 
第5步: 检查簇概要信息
 
/dev/vg1/lv1: 11/203200 files (0.0% non-contiguous), 36417/819200 blocks
 
[root@bogon ~]# 
  resize2fs /dev/vg1/lv1 200M  
  缩容逻辑卷lv1容量至200M
 
resize2fs 1.42.9 (28-Dec-2013)
 
Resizing the filesystem on /dev/vg1/lv1 to 307200 (1k) blocks.
 
The filesystem on /dev/vg1/lv1 is now 307200 blocks long.
 
 
 
 
[root@bogon ~]# 
  lvresize -L 200M /dev/vg1/lv1  
  重新设置逻辑卷容量为200M
 
 WARNING: Reducing active logical volume to 200.00 MiB.
 
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
 
Do you really want to reduce vg1/lv1? [y/n]: 
  y
 
 Size of logical volume vg1/lv1 changed from 800.00 MiB (200 extents) to 200.00 MiB (50 extents).
 
 Logical volume vg1/lv1 successfully resized.
 
[root@bogon ~]# 
  lvs  
 查看逻辑卷lv1容量
 
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 
 lv1 vg1 -wi-a----- 
  200.00m 
  缩容成功 
 
[root@bogon ~]#
 
 
 
 
 
 
 
扩充卷组
 

  fdisk /dev/sdb 新增/dev/sdb* 并指定为8e类型 (主分区或逻辑分区都可以) 

 

  pvcreate /dev/sdb* 

 

  vgextend vg1 /dev/sdb* 

 
 
 
 
 
 
 

  例: 

 
[root@bogon ~]# 
  vgs  
  查看物理卷组容量
 
 VG #PV #LV #SN Attr VSize VFree 
 
 vg1 2 1 0 wz--n- < 
 2.99g 
  <2.21g
 
[root@bogon ~]#  
 vgextend vg1 /dev/sdb3  
  扩容物理卷组
 
 Volume group "vg1" successfully extended
 
[root@bogon ~]# 
  vgs 
  查看物理卷组容量
 
 VG #PV #LV #SN Attr VSize VFree 
 
 vg1 3 1 0 wz--n- < 
 4.99g 
  <4.21g
 
[root@bogon ~]#  
  扩容成功



磁盘故障案例


跑lvs报错不出结果 lvs错误_逻辑卷




跑lvs报错不出结果 lvs错误_跑lvs报错不出结果_02




跑lvs报错不出结果 lvs错误_文件系统_03



在编辑过 /etc/fstab 文件后 可能会导致服务器重启后无法正常进入系统,这是因为在fstab文件里添加的分区/dev/sdb5没有正常挂载导致的。


解决办法:


进入root用户,然后 vi /etc/fstab 按dd删除我们添加的分区,或者用/dev/sdb5分区的UUID来代替分区号,保存再重启。