磁盘管理 -- LVM

  •  LVM
  • 概念
  • 创建操作
  • 分区监控
  • 扩容与缩容
  • 将数据快速转移到相同的卷组
  • 删除整个逻辑卷

LVM


 

LVM (Logical Volume Manage) , 逻辑卷管理

  • 作用: 整合分散的空间, 动态调整磁盘容量, 从而提高磁盘管理的灵活性;
  • WARN: /boot 分区存放引导文件, 不能使用 LVM 创建, 必须独立出来;

 

概念


将众多的物理卷 (PV) 组成 卷组 (VG) , 再从卷组中划分出逻辑卷(LV)

 零散空间存储 --> 整合的虚拟磁盘 --> 虚拟分区

   物理卷(PV)           卷组(VG)          逻辑卷(LV)

  • PV (Physical Volume), 物理卷

    整个硬盘, 或使用fdisk 等工具简历的普通分区, 包括许多默认 4M 大小的 PE (Physical Extent, 基本单元/物理单元);

               

  • VG (Volume Group), 卷组

                

  • LV (Logical Volume), 逻辑卷

    从卷组中分割出一块空间, 用于建立分区

 

创建操作


 

常用的命令

  • 扫描 scan
    • pvscan      vgscan      lvscan
  • 建立 create
    • pvcreate      vgcreate      lvcreate
  • 显示 display
    • pvdisplay      vgdisplay      lvdisplay
  • 删除 remove
    • pvremove      vgremove      lvremove
  • 扩展 extend
    • vgextend      lvextend
  • 减少 reduce
    • vgreduce      lvreduce
       

创建物理卷 ( 物理卷可以不用建立 ) 

// 可以跟多个分区, 连贯的话可以使用 /dev/sdb[1234]
pvcreate /dev/sdb5 
  Physical volume "/dev/sdb5" successfully created

 

 创建卷组 VG

// 创建卷组, -s 指定PE的大小, 默认 4M; 下面使用的是四个分区;
vgcreate -s 8 vg0 /dev/sdb[1234]
  Volume group "vg0" successfully created

// 查看卷组
vgdisplay /dev/vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        4
  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                4
  Act PV                4
  VG Size               99.99 GiB
  PE Size               8.00 MiB
  Total PE              25597
  Alloc PE / Size       0 / 0   
  Free  PE / Size       25597 / 99.99 GiB
  VG UUID               fYBKCi-YraR-7ABL-NkBR-hpii-lTIC-jGDD0y

 

 

 

 

创建逻辑卷

// 创建逻辑卷 -L 给的大小 -n 逻辑卷名称
lvcreate -L 10G -n tian vg0
  Logical volume "tian" created

// 或者可以使用 -l 指定 PE 个数
lvcreate -l 2500 -n tian vg0

// 查看逻辑卷
lvdisplay /dev/vg0/tian 
  --- Logical volume ---
  LV Path                /dev/vg0/tian
  LV Name                tian
  VG Name                vg0
  LV UUID                kcJcqI-E2xU-phrt-c0RM-cBLa-p1h9-gmI1rx
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-03-25 21:57:43 -0400
  LV Status              available
  # open                 0
  LV Size                19.53 GiB
  Current LE             2500
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

 

 

 

 

格式化逻辑卷

// 格式化(创建)文件系统;
mkfs.ext4 /dev/vg0/tian 
    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
    1281120 inodes, 5120000 blocks
    256000 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=4294967296
    157 block groups
    32768 blocks per group, 32768 fragments per group
    8160 inodes per group
    Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done

    This filesystem will be automatically checked every 30 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

 

挂载分区

// 挂载到需要的目录, 或者创建挂载点进行挂载
mkdir /tian
mount /dev/vg0/tian /tian/

// 配置开机自动挂载, 查看 UUID , 使用 UUID进行挂载, 防止重启后盘符变化导致加载不了磁盘错误;
blkid /dev/vg0/tian 
    /dev/vg0/tian: UUID="dd0ca91d-aefb-46fd-97d9-7158f9668b20" TYPE="ext4" 
vim /etc/fstab
    ... ...
    UUID="dd0ca91d-aefb-46fd-97d9-7158f9668b20" /tian     ext4    defaults        1 2

 

 

分区监控


 

查看命令

// 查看物理卷
pvs                    // 查看所有
pvs /dev/sdb1        // 指定分区
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1  vg0  lvm2 a--  10.00g 10.00g
pvs /dev/sdb*        // 通配符匹配

// 查看物理卷组
vgs                    // 查看所有卷组
vgs /dev/vg0        // 指定卷组查看
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    4   1   0 wz--n- 99.99g 80.46g
  
// 查看逻辑卷        
lvs                    // 查看所有逻辑卷
lvs /dev/vg0/tian     // 查看指定的逻辑卷
  LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  tian vg0  -wi-ao---- 19.53g 
 
// 查看pv , vg , lv 及指定挂载点
 pvs ; echo ------------------------;vgs ; echo ------------------------;lvs ; echo ------------------------;df -hT /tian
  PV         VG         Fmt  Attr PSize   PFree  
  /dev/sda3  vg_centos6 lvm2 a--  147.80g      0 
  /dev/sdb1  vg0        lvm2 a--   10.00g  10.00g
  /dev/sdb2  vg0        lvm2 a--   20.01g 488.00m
  /dev/sdb3  vg0        lvm2 a--   30.00g  30.00g
  /dev/sdb4  vg0        lvm2 a--   39.98g  39.98g
------------------------
  VG         #PV #LV #SN Attr   VSize   VFree 
  vg0          4   1   0 wz--n-  99.99g 80.46g
  vg_centos6   1   3   0 wz--n- 147.80g     0 
------------------------
  LV       VG         Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  tian     vg0        -wi-ao---- 19.53g                                             
  LogVol00 vg_centos6 -wi-ao---- 40.00g                                             
  LogVol01 vg_centos6 -wi-ao---- 40.00g                                             
  LogVol02 vg_centos6 -wi-ao---- 67.80g                                             
------------------------
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg0-tian ext4   20G  201M   19G   2% /tian

 

 

 

 

实时监控

// 动态实时查看, 用于监控; watch -n 选项表示多少秒刷新一次;
watch -n 1 ' pvs ; echo ------------------------;vgs ; echo ------------------------;lvs ; echo ------------------------;df -hT /tian'

// 动态查看只针对与挂载点
watch -n 1 'df -h /tian'
    Every 10.0s: df -h /tian                                                           Mon Mar 25 23:02:01 2019                        // 实时时间

    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vg0-tian   20G  352M   18G   2% /tian            // 存储空间使用

 

 

 

 

扩容与缩容


 

  xfs 类型的设备只能扩容, 不能缩容 !!

VG容量够, 扩容 逻辑卷

// 查看文件系统本来大小
df -hT
    Filesystem                      Type   Size  Used Avail Use% Mounted on
    ... ...
    /dev/mapper/vg0-tian            ext4    20G  172M   19G   1% /tian

// 扩容 20个 G
lvextend -L +20G /dev/vg0/tian 
  Extending logical volume tian to 39.53 GiB
  Logical volume tian successfully resized
// 扩容到 50G
lvextend -L 50G /dev/vg0/tian

// 调整(刷新)逻辑卷分区大小
resize2fs /dev/vg0/tian 
    resize2fs 1.41.12 (17-May-2010)
    Filesystem at /dev/vg0/tian is mounted on /tian; on-line resizing required
    old desc_blocks = 2, new_desc_blocks = 3
    Performing an on-line resize of /dev/vg0/tian to 10362880 (4k) blocks.
    The filesystem on /dev/vg0/tian is now 10362880 blocks long.
// 再次查看扩容后的大小    
df -hT
    Filesystem                      Type   Size  Used Avail Use% Mounted on
    ... ...
    /dev/mapper/vg0-tian            ext4    39G  176M   37G   1% /tian
    
// CentOS 7 上的xfs文件系统调整大小
xfs_growfs /dev/vg0/tian

 

 

 

 

逻辑卷缩小

// xfs 格式的文件系统不能缩小

// 查看没有缩小的时候的大小
df -hT
    Filesystem                      Type  Size  Used Avail Use% Mounted on
    ... ...
    /dev/mapper/vg0-tian            ext4   30G  233M   28G   1% /tian

// 首先,需要卸载文件系统的挂载
umount /tian

// 使用 e2fsck 强制检查逻辑卷, 并关注使用空间, 默认块是 4 K;
e2fsck -f /dev/vg0/tian 
    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/vg0/tian: 13/1966080 files (15.4% non-contiguous), 182818/7864320 blocks

// 使用resize2fs 将文件系统减小到 10 G;
resize2fs /dev/vg0/tian 10G
    resize2fs 1.41.12 (17-May-2010)
    Resizing the filesystem on /dev/vg0/tian to 2621440 (4k) blocks.
    The filesystem on /dev/vg0/tian is now 2621440 blocks long.
    
// 根据使用的大小缩小, 可以预留出足够使用的大小; 两种方式缩小到 10 G;
lvreduce -L -20G /dev/vg0/tian
lvreduce -L 10G /dev/vg0/tian

// 挂载
mount /dev/vg0/tian /tian

// 查看挂在后的大小
df -hT
    Filesystem                      Type  Size  Used Avail Use% Mounted on
    ... ...
    /dev/mapper/vg0-tian            ext4  9.9G  225M  9.2G   3% /tian

 

 

 

 

扩大卷组 (VG)

// 环境: 硬盘分区sdb[1234] , 123做卷组, 逻辑卷使用满, 卷组空间不足, 需要使用sdb4 进行扩容;
vgextend vg0 /dev/sdb4 
  Volume group "vg0" successfully extended

// 查看sdb[1234]各个分区的大小
lsblk /dev/sdb
    NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb                   8:16   0  100G  0 disk 
    ├─sdb1                8:17   0   10G  0 part 
    │ └─vg0-tian (dm-3) 253:3    0   60G  0 lvm  /tian
    ├─sdb2                8:18   0   20G  0 part 
    │ └─vg0-tian (dm-3) 253:3    0   60G  0 lvm  /tian
    ├─sdb3                8:19   0   30G  0 part 
    │ └─vg0-tian (dm-3) 253:3    0   60G  0 lvm  /tian
    └─sdb4                8:20   0   40G  0 part

// 查看扩容后的卷组; 大小 100 GiB;    
vgdisplay /dev/vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               99.99 GiB
  PE Size               4.00 MiB
  Total PE              25597
  Alloc PE / Size       15360 / 60.00 GiB
  Free  PE / Size       10237 / 39.99 GiB
  VG UUID               5DtUCI-dMDj-FVjX-dPZH-wCgf-o5Y1-e04kG5
  
// 再扩容逻辑卷正常按上面扩容就好

 

 

 

 

将数据快速转移到相同的卷组


 

// 将一个新的分区扩容卷组,sdb4 扩容 sdb[123] 的 vg0 卷组;
// 通过 pvmove 命令转移空间数据 sdb1 --> sdb4
// 使用 vgreduce 将损坏的磁盘或者分区从卷组中移除 --> sdb1
// 使用 pvremove 将坏的磁盘或者分区从系统中删除(可选) --> sdb1
// 使用一些工具修复磁盘或者手动更换损坏磁盘
vgextend vg0 /dev/sdb4
pvs
  PV         VG         Fmt  Attr PSize   PFree 
  /dev/sda3  vg_centos6 lvm2 a--  147.80g     0 
  /dev/sdb1  vg0        lvm2 a--   10.00g 12.00m
  /dev/sdb2  vg0        lvm2 a--   20.01g     0 
  /dev/sdb3  vg0        lvm2 a--   30.00g     0 
  /dev/sdb4  vg0        lvm2 a--   39.98g 39.98g
pvmove /dev/sdb1 /dev/sdb4
vgreduce vg0 /dev/sdb1
  Removed "/dev/sdb1" from volume group "vg0"
pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
pvs
  PV         VG         Fmt  Attr PSize   PFree 
  /dev/sda3  vg_centos6 lvm2 a--  147.80g     0 
  /dev/sdb2  vg0        lvm2 a--   20.01g     0 
  /dev/sdb3  vg0        lvm2 a--   30.00g     0 
  /dev/sdb4  vg0        lvm2 a--   39.98g 29.99g
  
// 挂载逻辑卷, 并查看内容, 没有问题

 

 

删除整个逻辑卷


 

// 先卸载mount挂载
// 删除 /etc/fstab 中配置的开机自动挂载
// lvremove 删除逻辑卷
// vgremove 删除卷组
// pvremove 删除物理卷
// 使用fdisk更改硬盘物理分区

 

posted @ 2019-03-26 17:47  荣荣很乖  阅读(415)  评论(0编辑  收藏  举报