• Linux磁盘管理


    磁盘管理

    vdo卷

    1. VDO(Virtual Data Optimize虚拟数据优化)
      通过压缩或删除存储设备上的数据来优化存储空间。VDO层放置在现有块存储设备例如RAID设备或本地磁盘的顶部。这些块设备也可以是加密设备。存储层(如LVM logic卷和文件系统)放置在VDO层的顶部。
    2. VDO按以下顺序将三个阶段应用于数据,减少存储设备上的占用空间
    • 零区块的排除:在初始化阶段,整块为0的会被元数据记录下来,这个可以用水杯里面的水和沙子混合的例子来解释,使用滤纸(零块排除),把沙子(非零空间)给过滤出来,然后就是下一个阶段的处理
    • 重复数据删除:在第二阶段,输入的数据会判断是不是冗余数据(在写入之前就判断),这个部分的数据通过UDS内核模块来判断(U niversal D eduplication S ervice),被判断为重复数据的部分不会被写入,然后对元数据进行更新,直接指向原始已经存储的数据块即可
    • 压缩:一旦消零和重删完成,LZ4压缩会对每个单独的数据块进行处理,然后压缩好的数据块会以固定大小4KB的数据块存储在介质上,由于一个物理块可以包含很多的压缩块,这个也可以加速读取的性能
    创建vdo

    注意:创建vdo卷要准备一个未分区的新磁盘

    [root@lc ~]# lsblk | grep nvme0n2
    nvme0n2       259:3    0   20G  0 disk 
    [root@lc ~]# 
    
    • 1
    • 2
    • 3

    1.安装vdo软件和模块

    [root@lc ~]# yum -y install vdo kmod-kvdo
    
    • 1

    2.创建vdo卷

    [root@lc ~]# vdo create --name=lcvdo --device=/dev/nvme0n2  --vdoLogicalSize=20T
    Creating VDO lcvdo
          The VDO volume can address 6 GB in 3 data slabs, each 2 GB.
          It can grow to address at most 16 TB of physical storage in 8192 slabs.
          If a larger maximum size might be needed, use bigger slabs.
    Starting VDO lcvdo
    Starting compression on VDO lcvdo
    VDO instance 1 volume is ready at /dev/mapper/lcvdo
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.查看vdo卷

    [root@lc ~]# fdisk -l /dev/mapper/lcvdo 
    Disk /dev/mapper/lcvdo:20 TiB,21990232555520 字节,5368709120 个扇区
    单元:扇区 / 1 * 4096 = 4096 字节
    扇区大小(逻辑/物理):4096 字节 / 4096 字节
    I/O 大小(最小/最佳):4096 字节 / 4096 字节
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    关闭vdo卷

    [root@lc ~]# vdo stop -n lcvdo 
    Stopping VDO lcvdo
    [root@lc ~]# 
    
    • 1
    • 2
    • 3

    开启vdo卷

    [root@lc ~]# vdo start -n lcvdo 
    Starting VDO lcvdo
    Starting compression on VDO lcvdo
    VDO instance 2 volume is ready at /dev/mapper/lcvdo
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    格式化vdo

    一定要加 ==-K(大写)==选项

    [root@lc ~]# mkfs.xfs -K /dev/mapper/lcvdo 
    meta-data=/dev/mapper/lcvdo      isize=512    agcount=20, agsize=268435455 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=5368709100, imaxpct=5
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=521728, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@lc ~]# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    挂载使用

    临时挂载

    [root@lc ~]# udevadm settle 
    [root@lc ~]# mkdir /lcvdohome
    [root@lc ~]# mount /dev/mapper/lcvdo /lcvdohome/
    [root@lc ~]# df -Th | grep vdo
    /dev/mapper/lcvdo     xfs        20T  143G   20T    1% /lcvdohome
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    永久挂载

    [root@lc ~]# mkdir /lcvdohome
    [root@lc ~]# blkid /dev/mapper/lcvdo 
    /dev/mapper/lcvdo: UUID="c27fd47c-0554-470b-9446-f67158f2cd68" TYPE="xfs"
    [root@lc ~]# vim /etc/fstab 
    [root@lc ~]# cat /etc/fstab 
    (省略)
    UUID="c27fd47c-0554-470b-9446-f67158f2cd68" /lcvdohome xfs defaults,x-systemd.requires=vdo.service 0 0          //手动添加本条
    [root@lc ~]# 
    
    
    
    [root@lc ~]# mount -a
    [root@lc ~]# df -Th | grep vdo
    /dev/mapper/lcvdo     xfs        20T  143G   20T    1% /lcvdohome
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    验证vdo卷
    [root@lc ~]# vdostats --human-readable 
    Device                    Size      Used Available Use% Space saving%
    /dev/mapper/lcvdo       20.0G      4.0G     16.0G  20%           99%
    [root@lc ~]# cp /mnt/images/install.img /vdo111/
    [root@lc ~]# vdostats --human-readable 
    Device                    Size      Used Available Use% Space saving%
    /dev/mapper/lcvdo       20.0G      4.5G     15.5G  22%           79%
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    vdo卷扩容

    扩容之前要保证这个vdo卷是没有人正在使用的,比如cd到了vdo卷的挂载路径,或者vim挂载路径里面的某个文件,只要产生的进程是关于vdo的,就不可以扩容。要先kil这些进程

    通过lsof查看

    lsof:查看文件的进程信息

    [root@lc ~]# lsof /lcvdohome/
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    bash    3517 root  cwd    DIR  253,2        6  128 /lcvdohome    //有一个进程
    
    [root@lc ~]# kill -9 3517                  //通过进程号结束该进程
    [root@lc ~]# lsof /lcvdohome/
    [root@lc ~]#                               //现在没有进程占用vdo的挂载点了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    取消挂载

    [root@lc ~]# umount /dev/mapper/lcvdo 
    [root@lc ~]# df -Th
    文件系统              类型      容量  已用  可用 已用% 挂载点
    devtmpfs              devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                 tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                 tmpfs     1.9G   10M  1.9G    1% /run
    tmpfs                 tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/rhel-root xfs        26G  4.3G   22G   17% /
    /dev/sr0              iso9660   7.9G  7.9G     0  100% /mnt/cdrom
    /dev/nvme0n1p1        xfs      1014M  229M  786M   23% /boot
    tmpfs                 tmpfs     376M  1.2M  375M    1% /run/user/42
    tmpfs                 tmpfs     376M  3.5M  372M    1% /run/user/0
    [root@lc ~]# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    扩充vdo卷大小

    命令最后面的大小是你扩充磁盘后的大小。比如,原来是20T,你想增加10T,那么后面的大小应该写30T

    [root@lc ~]# vdo growLogical --name=lcvdo --vdoLogicalSize=30T
    [root@lc ~]# lsblk | grep vdo
    └─lcvdo       253:2    0   30T  0 vdo         //从原来的20T扩充为30T了
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4

    重新挂载回去

    [root@lc ~]# mount -a
    [root@lc ~]# df -Th | grep vdo
    /dev/mapper/lcvdo     xfs        20T  143G   20T    1% /lcvdohome
    [root@lc ~]# 
                   //发现挂载后只有20T,因为文件系统容量还没有同步到内核
    
    • 1
    • 2
    • 3
    • 4
    • 5

    同步文件系统容量到内核

    xfs格式的用xfs_growfs
    
    ext格式的用resize2
    
    • 1
    • 2
    • 3
    [root@lc ~]# xfs_growfs /dev/mapper/lcvdo 
    meta-data=/dev/mapper/lcvdo      isize=512    agcount=20, agsize=268435455 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=5368709100, imaxpct=5
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=521728, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 5368709100 to 8053063650
    [root@lc ~]# 
    
    
    [root@lc ~]# df -Th | grep vdo
    /dev/mapper/lcvdo     xfs        30T  215G   30T    1% /lcvdohome
    [root@lc ~]# 
                       //已经同步为30T了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    删除vdo卷

    先卸载才可以删除,如果vdo卷还在使用就无法删除

    卸载之前

    [root@lc ~]# lsblk 
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0            11:0    1  7.9G  0 rom  /mnt/cdrom
    nvme0n1       259:0    0   30G  0 disk 
    ├─nvme0n1p1   259:1    0    1G  0 part /boot
    └─nvme0n1p2   259:2    0   29G  0 part 
      ├─rhel-root 253:0    0   26G  0 lvm  /
      └─rhel-swap 253:1    0    3G  0 lvm  [SWAP]
    nvme0n2       259:3    0   10G  0 disk 
    └─lcvdo       253:2    0   30T  0 vdo  /lcvdohome          //要卸载的vdo卷
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    取消挂载

    //卸载vdo卷
    [root@lc ~]# umount /dev/mapper/lcvdo 
    
    
    //查看挂载信息,已经看不见vdo卷了
    [root@lc ~]# df -Th 
    文件系统              类型      容量  已用  可用 已用% 挂载点
    devtmpfs              devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                 tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                 tmpfs     1.9G   10M  1.9G    1% /run
    tmpfs                 tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/rhel-root xfs        26G  4.3G   22G   17% /
    /dev/sr0              iso9660   7.9G  7.9G     0  100% /mnt/cdrom
    /dev/nvme0n1p1        xfs      1014M  229M  786M   23% /boot
    tmpfs                 tmpfs     376M  1.2M  375M    1% /run/user/42
    tmpfs                 tmpfs     376M  3.5M  372M    1% /run/user/0
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    删除vdo卷

    [root@lc ~]# vdo remove --name lcvdo 
    Removing VDO lcvdo
    Stopping VDO lcvdo
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4

    删除后查看磁盘分区信息

    [root@lc ~]# lsblk 
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0            11:0    1  7.9G  0 rom  /mnt/cdrom
    nvme0n1       259:0    0   30G  0 disk 
    ├─nvme0n1p1   259:1    0    1G  0 part /boot
    └─nvme0n1p2   259:2    0   29G  0 part 
      ├─rhel-root 253:0    0   26G  0 lvm  /
      └─rhel-swap 253:1    0    3G  0 lvm  [SWAP]
    nvme0n2       259:3    0   10G  0 disk 
    [root@lc ~]# 
    //vdo卷已经删除了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    lvm卷

    一、原理

    //逻辑卷管理,是⼀种将⼀个或多个硬盘的分区 在逻辑上集合,相当于⼀个⼤硬盘来使⽤,当硬盘的空间不够使⽤的时候,
    可以继续将其它 的硬盘的 分区加⼊其中,这样可以事项⼀种磁盘空间的动态管理,相对于普通的磁盘分区有 很⼤的灵活
    性,使⽤普通的磁盘分区,当⼀个磁盘的分区空间不够使⽤的时候,可 能就会带 来很⼤的麻烦。使⽤LVM在⼀定程度上就
    可以解决普通磁盘分区带来的问题//
    
    • 1
    • 2
    • 3
    • 4

    二、应用场景和优缺点

    使用场景:随着公司的发展,数据增长较快,最初规划的磁盘容量不够用了,使用lvm卷可以灵活的进行扩容

    优缺点:

    优点:灵活性强,大小可以动态调整
    
    缺点:数据不是直接存放在硬盘上,而是在硬盘的上面又虚拟出来一层逻辑卷存放数据,故而增加了磁盘数据恢复的难度
    
    • 1
    • 2
    • 3

    三、物理卷、卷组和逻辑卷

    在这里插入图片描述

    物理卷(PV):把常规的块设备(硬盘,分区等可以读写数据的设备)通过pvcreate命令对其进行初始化,就成了物理卷

    卷组(VG):把多个物理卷的容量组成一个逻辑整体,可以从里面灵活分配容量

    逻辑卷(LV):从卷组中划分部分空间成为一个可以读写数据的逻辑单元。需要对其格式化然后挂载使用

    四、部署和使用lvm

    从创建到使用的过程:

    1.添加物理磁盘,创建物理卷
    2.创建卷组,将物理卷加入卷组
    3.在卷组中划分逻辑卷
    4.格式化逻辑卷
    5.挂载使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    常用命令

    创建物理卷、卷组和逻辑卷的命令:

    pvcreate 物理磁盘路径

    pvcreate /dev/nvme0n2             //后面接添加好的物理磁盘的设备名
    
    • 1

    vgcreate 卷组名 物理卷名

    vgcreate lcvg1 /dev/nvme0n2       //卷组名自定义,物理卷名是已经存在的物理卷
    
    • 1

    lvcreate -L 指定大小和单位 -n 逻辑卷名 卷组名

    lvcreate -L 2G -n lclv1 lcvg1         //逻辑卷名自定义,卷组名是已经存在的卷组
    
    • 1

    简单的查看命令

    pvs     //查看你物理卷的概要信息
    vgs     //查看卷组的概要信息
    lvs     //查看逻辑卷的概要信息
    
    • 1
    • 2
    • 3
    [root@lc ~]# pvs
      PV             VG   Fmt  Attr PSize   PFree
      /dev/nvme0n1p2 rhel lvm2 a--  <29.00g    0 
    
    [root@lc ~]# vgs
      VG   #PV #LV #SN Attr   VSize   VFree
      rhel   1   2   0 wz--n- <29.00g    0 
    
    [root@lc ~]# lvs
      LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      root rhel -wi-ao---- <26.00g                                                    
      swap rhel -wi-ao----   3.00g                                               
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    部署示例

    1.先准备一块新的物理磁盘

    [root@lc ~]# lsblk | grep nvme0n2
    nvme0n2       259:3    0   10G  0 disk 
    [root@lc ~]# 
    
    • 1
    • 2
    • 3

    2.把物理磁盘创建为物理卷

    [root@lc ~]# pvcreate /dev/nvme0n2
      Physical volume "/dev/nvme0n2" successfully created.
    
    [root@lc ~]# pvs
      PV             VG   Fmt  Attr PSize   PFree 
      /dev/nvme0n1p2 rhel lvm2 a--  <29.00g     0 
      /dev/nvme0n2        lvm2 ---   10.00g 10.00g         //物理卷创建成功
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.在刚刚创建好的物理卷上创建卷组

    [root@lc ~]# vgcreate lcvg1 /dev/nvme0n2
      Volume group "lcvg1" successfully created
    
    [root@lc ~]# vgs
      VG    #PV #LV #SN Attr   VSize   VFree  
      lcvg1   1   0   0 wz--n- <10.00g <10.00g      //卷组lcvg1已经创建好了
      rhel    1   2   0 wz--n- <29.00g      0  
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.在卷组lcvg1上创建一个逻辑卷

    [root@lc ~]# lvcreate -L 2G -n lclv1 lcvg1
      Logical volume "lclv1" created.
    [root@lc ~]# lvs
      LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lclv1 lcvg1 -wi-a-----   2.00g           //逻辑卷lclv1创建成功
     
      root  rhel  -wi-ao---- <26.00g                                                    
      swap  rhel  -wi-ao----   3.00g                                                    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5.格式化创建的逻辑卷

    [root@lc ~]# mkfs.ext4 /dev/lcvg1/lclv1
    mke2fs 1.45.4 (23-Sep-2019)
    创建含有 524288 个块(每块 4k)和 131072 个inode的文件系统
    文件系统UUID:b754106b-6233-4b10-9ad5-31238b230b72
    超级块的备份存储于下列块: 
    	32768, 98304, 163840, 229376, 294912
    
    正在分配组表: 完成                            
    正在写入inode表: 完成                            
    创建日志(16384 个块)完成
    写入超级块和文件系统账户统计信息: 已完成
    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6.创建一个目录,给逻辑卷进行挂载使用

    //创建挂载目录
    [root@lc ~]# mkdir /root/lvhome           
    
    • 1
    • 2
    //查找逻辑卷的UUID
    [root@lc ~]# blkid /dev/lcvg1/lclv1
    /dev/lcvg1/lclv1: UUID="b754106b-6233-4b10-9ad5-31238b230b72" TYPE="ext4"
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    //写入配置信息,永久挂载
    [root@lc ~]# vim /etc/fstab 
    [root@lc ~]# tail -1 /etc/fstab 
    UUID="b754106b-6233-4b10-9ad5-31238b230b72" /root/lvhome ext4 defaults 0 0
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    //挂载,然后查看挂载使用信息
    [root@lc ~]# mount -a
    
    [root@lc ~]# df -Th 
    文件系统                类型      容量  已用  可用 已用% 挂载点
    devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                   tmpfs     1.9G   10M  1.9G    1% /run
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/rhel-root   xfs        26G  4.3G   22G   17% /
    /dev/sr0                iso9660   7.9G  7.9G     0  100% /mnt/cdrom
    /dev/nvme0n1p1          xfs      1014M  229M  786M   23% /boot
    tmpfs                   tmpfs     376M  1.2M  375M    1% /run/user/42
    tmpfs                   tmpfs     376M  3.5M  372M    1% /run/user/0
    /dev/mapper/lcvg1-lclv1 ext4      2.0G  6.0M  1.8G    1% /root/lvhome  挂载成功
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    五、vg卷组管理

    扩容卷组

    将新的磁盘加入到某个卷组

    //当需要在某个卷组里面划分新的卷组时,卷组的空间已经不够了,这时就需要给卷组扩容。
    
    //卷组是建立在物理卷上的,所以要扩容卷组就要先准备新的物理卷,准备新的物理卷,就要添加新的物理磁盘
    
    • 1
    • 2
    • 3

    命令:

    vgextend 卷组名 物理卷名

    vgextend lcvg1 /dev/nvme0n3          //卷组名为需要扩充的卷组,物理卷名是空间的来源
    
    • 1

    示例:

    1.准备一个新的物理磁盘,并将其创建为物理卷

    [root@lc ~]# lsblk | grep nvme0n3
    nvme0n3       259:4    0   20G  0 disk           //20G的物理磁盘
    [root@lc ~]# 
    
    [root@lc ~]# pvcreate /dev/nvme0n3
      Physical volume "/dev/nvme0n3" successfully created.
    [root@lc ~]# pvs
      PV             VG    Fmt  Attr PSize   PFree 
      /dev/nvme0n1p2 rhel  lvm2 a--  <29.00g     0 
      /dev/nvme0n2   lcvg1 lvm2 a--  <10.00g <8.00g
      /dev/nvme0n3         lvm2 ---   20.00g 20.00g        //创建成功
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.使用vgextend扩展卷组

    //没扩充之前lcvg1的大小
    [root@lc ~]# vgs
      VG    #PV #LV #SN Attr   VSize   VFree 
      lcvg1   1   1   0 wz--n- <10.00g <8.00g        //总大小10G,可用8G
      rhel    1   2   0 wz--n- <29.00g     0 
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //扩充
    [root@lc ~]# vgextend lcvg1 /dev/nvme0n3
      Volume group "lcvg1" successfully extended
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    //扩充后lcvg1的大小
    [root@lc ~]# vgs
      VG    #PV #LV #SN Attr   VSize   VFree 
      lcvg1   2   1   0 wz--n-  29.99g 27.99g       //扩大了20G
      rhel    1   2   0 wz--n- <29.00g     0 
    [root@lc ~]# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    缩减卷组

    将指定磁盘从卷组中删除

    命令:

    vgreduce 卷组名 物理卷名

    vgreduce lcvg1 /dev/nvme0n3     
    
    • 1

    示例:

    //查看现在卷组lcvg1的大小
    [root@lc ~]# vgs
      VG    #PV #LV #SN Attr   VSize   VFree 
      lcvg1   2   1   0 wz--n-  29.99g 27.99g       //现在是30G
      rhel    1   2   0 wz--n- <29.00g     0 
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //减缩卷组,移除一个物理卷
    [root@lc ~]# vgreduce lcvg1 /dev/nvme0n3
      Removed "/dev/nvme0n3" from volume group "lcvg1"
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    //查看减缩后的卷组大小
    [root@lc ~]# vgs
      VG    #PV #LV #SN Attr   VSize   VFree 
      lcvg1   1   1   0 wz--n- <10.00g <8.00g            //缩小了
      rhel    1   2   0 wz--n- <29.00g     0 
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    卷组数据迁移
    //当磁盘损坏或者故障需要维修或更换时,需要进行数据迁移
    
    //同一卷组的磁盘才可以进行在线迁移
    
    • 1
    • 2
    • 3

    命令

    pvmove

    pvmove /dev/nvme0n2 /dev/nvme0n3        //前面是要要出数据的磁盘,后面是存数据的磁盘
    
    • 1

    示例:

    1.查看当前物理卷信息

    [root@lc ~]# pvs
      PV             VG    Fmt  Attr PSize   PFree  
      /dev/nvme0n1p2 rhel  lvm2 a--  <29.00g      0 
      /dev/nvme0n2   lcvg1 lvm2 a--  <10.00g  <7.00g      //已经使用3G
      /dev/nvme0n3   lcvg1 lvm2 a--  <20.00g <20.00g      // 未使用 
    [root@lc ~]# 
    物理卷n2里面有3G的数据,而n3里面什么都没有,尝试把n2里面的数据迁移到n3里
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.数据迁移

    [root@lc ~]# pvmove /dev/nvme0n2 /dev/nvme0n3
      /dev/nvme0n2: Moved: 2.21%
      /dev/nvme0n2: Moved: 33.33%
      /dev/nvme0n2: Moved: 100.00%
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.查看迁移后的物理卷信息

    [root@lc ~]# pvs
      PV             VG    Fmt  Attr PSize   PFree  
      /dev/nvme0n1p2 rhel  lvm2 a--  <29.00g      0 
      /dev/nvme0n2   lcvg1 lvm2 a--  <10.00g <10.00g    //未使用
      /dev/nvme0n3   lcvg1 lvm2 a--  <20.00g <17.00g     //使用3G
    [root@lc ~]#  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六、逻辑卷管理

    扩展逻辑卷
    //逻辑卷不够用时,从该逻辑卷的卷组里面,分出一部分空间给这个逻辑卷(前提是卷组的空间有多余的)
    
    • 1

    命令:

    lvextend

    lvextend -L +2G /dev/lcvg1/lclv1      //+2G表示在原来的基础上,再加2G 
    
    • 1
    lvextend -L 2G /dev/lcvg1/lclv1      //没有+号表示,扩展到多少G
    
    • 1
    lvextend -L 50%FREE /dev/lcvg1/lclv1     //按百分比分配,分配磁盘池中50%给逻辑卷
    
    • 1

    示例:

    //查看逻辑卷lclv1的大小
    [root@lc ~]# lvs
      LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lclv1 lcvg1 -wi-ao----   2.00g         //现在是2G                                              
      lclv2 lcvg1 -wi-a-----   2.00g                                                    
      root  rhel  -wi-ao---- <26.00g                                                    
      swap  rhel  -wi-ao----   3.00g                                                    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    //进行扩充
    [root@lc ~]# lvextend -L +2G /dev/lcvg1/lclv1
      Size of logical volume lcvg1/lclv1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
      Logical volume lcvg1/lclv1 successfully resized.
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    //查看扩充后的
    [root@lc ~]# lvs
      LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lclv1 lcvg1 -wi-ao----   4.00g          //加了2G,变成了4G                                             
      lclv2 lcvg1 -wi-a-----   2.00g                                                    
      root  rhel  -wi-ao---- <26.00g                                                    
      swap  rhel  -wi-ao----   3.00g                                                    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    //扩充文件系统
    [root@lc ~]# resize2fs /dev/lcvg1/lclv1
    resize2fs 1.45.4 (23-Sep-2019)
    /dev/lcvg1/lclv1 上的文件系统已被挂载于 /root/lvhome;需要进行在线调整大小
    
    old_desc_blocks = 1, new_desc_blocks = 1
    /dev/lcvg1/lclv1 上的文件系统现在为 1048576 个块(每块 4k)。
    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    //查看挂载信息
    [root@lc ~]# df -Th
    文件系统                类型      容量  已用  可用 已用% 挂载点
    devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                   tmpfs     1.9G  9.7M  1.9G    1% /run
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/rhel-root   xfs        26G  4.3G   22G   17% /
    /dev/sr0                iso9660   7.9G  7.9G     0  100% /mnt/cdrom
    /dev/mapper/lcvg1-lclv1 ext4      3.9G  8.0M  3.7G    1% /root/lvhome
    /dev/nvme0n1p1          xfs      1014M  229M  786M   23% /boot
    tmpfs                   tmpfs     376M  1.2M  375M    1% /run/user/42
    tmpfs                   tmpfs     376M  4.0K  376M    1% /run/user/0
    [root@lc ~]# 
    //已经成功扩充为4G,并可以正常使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    减缩逻辑卷

    只有ext4文件系统的逻辑卷才可以减缩

    缩减逻辑卷注意事项:

    //1.不能在线缩减,得先卸载;
    //2.确保缩减后的空间大小依然能存储原有的所有数据;
    //3.在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。使用命令e2fsck -f
    
    • 1
    • 2
    • 3

    命令:

    lvreduce

    lvreduce -L 1G /dev/lcvg1/lclv1     //1G代表是减缩到1G,最终的大小就是1G
    
    • 1

    示例:

    1.先取消挂载要减缩的逻辑卷

    [root@lc ~]# umount /dev/mapper/lcvg1-lclv1
    
    • 1

    2.检查文件系统

    [root@lc ~]# e2fsck -f /dev/lcvg1/lclv1
    e2fsck 1.45.4 (23-Sep-2019)1 步:检查inode、块和大小
    第 2 步:检查目录结构
    第 3 步:检查目录连接性
    第 4 步:检查引用计数
    第 5 步:检查组概要信息
    /dev/lcvg1/lclv1:11/262144 文件(0.0% 为非连续的), 34894/1048576 块
    [root@lc ~]# resize2fs 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.调整文件系统的大小,测试减缩(不是真正减缩,只是测试一下可以减缩到多大)

    [root@lc ~]# resize2fs /dev/lcvg1/lclv1 1G
    resize2fs 1.45.4 (23-Sep-2019)
    将 /dev/lcvg1/lclv1 上的文件系统调整为 262144 个块(每块 4k)。
    /dev/lcvg1/lclv1 上的文件系统现在为 262144 个块(每块 4k)。
    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.减缩逻辑卷,减缩后的大小为1G

    [root@lc ~]# lvreduce -L 1G /dev/lcvg1/lclv1
      WARNING: Reducing active logical volume to 1.00 GiB.
      THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce lcvg1/lclv1? [y/n]: y
      Size of logical volume lcvg1/lclv1 changed from 4.00 GiB (1024 extents) to 1.00 GiB (256 extents).
      Logical volume lcvg1/lclv1 successfully resized.
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5.查看减缩后的逻辑卷

    [root@lc ~]# lvs
      LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lclv1 lcvg1 -wi-a-----   1.00g                  //已经减缩到1G了                                   
      lclv2 lcvg1 -wi-a-----   2.00g                                                    
      root  rhel  -wi-ao---- <26.00g                                                    
      swap  rhel  -wi-ao----   3.00g                                                    
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6.再次检测文件系统

    [root@lc ~]# e2fsck -f /dev/lcvg1/lclv1
    e2fsck 1.45.4 (23-Sep-2019)1 步:检查inode、块和大小
    第 2 步:检查目录结构
    第 3 步:检查目录连接性
    第 4 步:检查引用计数
    第 5 步:检查组概要信息
    /dev/lcvg1/lclv1:11/65536 文件(0.0% 为非连续的), 21787/262144 块
    [root@lc ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7.测试挂载

    [root@lc ~]# mount -a
    
    [root@lc ~]# df -Th
    文件系统                类型      容量  已用  可用 已用% 挂载点
    devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                   tmpfs     1.9G  9.7M  1.9G    1% /run
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/rhel-root   xfs        26G  4.3G   22G   17% /
    /dev/sr0                iso9660   7.9G  7.9G     0  100% /mnt/cdrom
    /dev/nvme0n1p1          xfs      1014M  229M  786M   23% /boot
    tmpfs                   tmpfs     376M  1.2M  375M    1% /run/user/42
    tmpfs                   tmpfs     376M  4.0K  376M    1% /run/user/0
    /dev/mapper/lcvg1-lclv1 ext4      944M  5.1M  877M    1% /root/lvhome
    [root@lc ~]# 
    //逻辑卷lclv1已经成功减缩到1G,且可以正常使用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    扩展

    1.如何查看/etc/目录大小

    [root@LC ~]# du -sh /etc/
    22M	/etc/
    [root@LC ~]# 
    
    • 1
    • 2
    • 3

    2.如何查看磁盘使用分区情况

    [root@LC ~]# lsblk 
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    sda             8:0    0   20G  0 disk 
    ├─sda1          8:1    0    1G  0 part /boot
    │                                      /a1
    └─sda2          8:2    0   19G  0 part 
      ├─rhel-root 253:0    0   17G  0 lvm  /
      └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
    sdb             8:16   0   20G  0 disk 
    ├─sdb1          8:17   0    4G  0 part 
    ├─sdb2          8:18   0    4G  0 part 
    ├─sdb3          8:19   0    4G  0 part 
    ├─sdb4          8:20   0    1K  0 part 
    └─sdb5          8:21   0    2G  0 part 
    sdc             8:32   0   20G  0 disk 
    sr0            11:0    1  8.9G  0 rom  /mnt
    [root@LC ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.如何查看inode使用情况

    [root@LC ~]# df -i
    Filesystem             Inodes IUsed   IFree IUse% Mounted on
    devtmpfs               242971   446  242525    1% /dev
    tmpfs                  248208     1  248207    1% /dev/shm
    tmpfs                  819200   713  818487    1% /run
    /dev/mapper/rhel-root 8910848 40321 8870527    1% /
    /dev/sda1              524288   372  523916    1% /a1
    /dev/sr0                    0     0       0     - /mnt
    tmpfs                   49641    15   49626    1% /run/user/0
    [root@LC ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.如何查看磁盘block使用情况

    [root@LC ~]# df -v
    Filesystem            1K-blocks    Used Available Use% Mounted on
    devtmpfs                   4096       0      4096   0% /dev
    tmpfs                    992832       0    992832   0% /dev/shm
    tmpfs                    397136    5760    391376   2% /run
    /dev/mapper/rhel-root  17811456 2609248  15202208  15% /
    /dev/sda1               1038336  292944    745392  29% /a1
    /dev/sr0                9370716 9370716         0 100% /mnt
    tmpfs                    198564       0    198564   0% /run/user/0
    [root@LC ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    5.如何查看分区使用格式

    [root@LC ~]# df -T
    Filesystem            Type     1K-blocks    Used Available Use% Mounted on
    devtmpfs              devtmpfs      4096       0      4096   0% /dev
    tmpfs                 tmpfs       992832       0    992832   0% /dev/shm
    tmpfs                 tmpfs       397136    5760    391376   2% /run
    /dev/mapper/rhel-root xfs       17811456 2609248  15202208  15% /
    /dev/sda1             xfs        1038336  292944    745392  29% /a1
    /dev/sr0              iso9660    9370716 9370716         0 100% /mnt
    tmpfs                 tmpfs       198564       0    198564   0% /run/user/0
    [root@LC ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6.如何查看一个设备的UUID

    [root@LC ~]# blkid /dev/sdb1
    /dev/sdb1: UUID="a92f76f4-3360-4fd6-ad9e-d87dcd476a59" TYPE="swap" PARTUUID="74c0558e-01"
    [root@LC ~]# 
    
    • 1
    • 2
    • 3

    7.请解释/etc/fstab中每段含义

    [root@LC ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Mon Jun 26 09:53:32 2023
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    /dev/mapper/rhel-root   /                       xfs     defaults        0 0
    UUID=b1821db2-a464-452f-b583-aef06d6d8b38 /boot                   xfs     defaults        0 0
    /dev/mapper/rhel-swap   none                    swap    defaults        0 0
    /dev/sr0 /mnt iso9660 defaults 0 0 
    UUID="b1821db2-a464-452f-b583-aef06d6d8b38" /a1 xfs defaults 0 0
    UUID="a92f76f4-3360-4fd6-ad9e-d87dcd476a59" swap sawp defaults 0 0
    [root@LC ~]# 
    
    
    
    //分区标识(UUID或设备名)                    挂载点 文件类型    挂载参数    不检查 不备份
    UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1     xfs     defaults    0     0
    
    //挂载参数, 可写fstab配置文件, 也可以mount时使用-o参数指定
    参数              参数意义                               系统默认值
    async           系统每隔一段时间把内存数据写入磁盘中,
    sync            时时同步内存和磁盘中数据;
    suid,nosuid     允许/不允许分区有suid属性                suid
    rw,ro           可以指定文件系统是只读(ro)或可写(rw)       rw
    exec,noexec     允许/不允许可执行文件执行,不要挂载根分区    exec
    user,nouser     允许/不允许root外的其他用户挂载分区        nouser
    auto,noauto     开机自动挂载/不自动挂载                    auto
    default         默认文件系统挂载设置 rw, suid, dev, exec, auto, nouser, async
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    8.一个ext4的文件分区,当使用touch test.file命令创建一个新文件是报错,报错的信息提示磁盘已满,但是采用df –h 命令查看磁盘大小时,只是用了60%的磁盘空间,这个情况的原因是.

    磁盘空间还有,但是无法创建文件。原因是inode被用完了
    
    • 1
  • 相关阅读:
    mysql数据库及一些基本操作
    Thymeleaf学习(3)—— 内置对象
    Android 8.1 系统锁屏显示流程整理
    如何用chatgpt写小说
    实现联系人前后端界面,实现分页查询04.15
    【数据结构】插入排序
    提高网站性能的10种方法:加速用户体验和降低服务器负担
    vmware安装了centos7之后网络设置
    电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
    分库分表总结
  • 原文地址:https://blog.csdn.net/qq_70246330/article/details/133952917