第14章 磁盘配额(Quota)与高级文件系统管理

14.2 软件磁盘阵列

14.2.1 什么是RAID

磁盘阵列的全名是【Redundant Arrays of Inexpensive Disks,RAID】,大意是价格便宜的冗余磁盘阵列

通过硬件技术或软件技术将多个小磁盘整合成一个较大的磁盘设备,根据level不同可以提供性能提升,数据保护(冗余)等功能

常见的level和各自优缺点如下:

项目RAID 0RAID 1RAID1+0RAID 5RAID 6
最少磁盘数22434
最大容错磁盘数

n-1

n/212
数据可靠性最佳最佳比RAID 5好
理论写入性能n1n/2<n-1<n-2
理论读出性能nnn<n-1<n-2
可用容量n1n/2n-1n-2
一般应用

强调性能但

数据不重要的环境

数据与备份服务器、云系统数据与备份数据与备份

注1:n是指所有硬盘的个数

注2:RAID5和RAID6实际上就是添加1/2个校验盘,类似纠删码来达到数据可靠性

注3:热备份磁盘(Spare Disk)这个是指没有包含在原本磁盘阵列里的磁盘,平时不被使用,只有列阵中的磁盘损坏时,该磁盘才会被主动拉入,并将损坏磁盘移除,然后重建数据系统

14.2.2 硬件RAID,软件RAID

硬件磁盘阵列(hardware RAID)是通过磁盘阵列卡来完成磁盘阵列的功能,磁盘阵列卡上有一块专门的芯片用于处理RAID的任务,因此性能更好,但是价格比较贵

软件磁盘阵列(software RAID)是通过软件来模拟磁盘阵列的任务,因此占用系统资源,但是更加灵活和便宜,CentOS提供的是mdadm软件

14.2.3 软件磁盘阵列的设置

举一个例子:新建一个磁盘阵列设备 /dev/md0,level是RAID5,块大小256k,一共5个盘(5,6,7,8,9),其中1个备用盘

mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256k \
  --raid-devices=4 --spare-devices=1 /dev/vda{5,6,7,8,9)

查看磁盘阵列md0    : mdadm --detail /dev/md0

设置设备状态为出错:mdadm --manage /dev/md0 --fail /dev/vd7

从md0移除设备:      mdadm --manage /dev/md0 --remove /dev/vd7

加入新设备到md0:  mdadm --manage /dev/md0 --add /dev/vd7

删除磁盘阵列md0:  1)先删除md0可能存在的数据:dd if=/dev/zero of=/dev/md0 bs=1M count=50

                                 2)然后关闭:mdadm --stop /dev/md0

                                 3)再删除5个盘的所有数据:dd if=/dev/zero of=/dev/vda5 bs=1M count=50

                                 4)最后删除UUID:vim /etc/mdadm.conf

14.3 逻辑卷管理器(Logical Volume Manager)

14.3.1 什么是LVM:PV、PE、VG、LV的意义

LVM的做法是将几个物理的分区或者物理磁盘通过软件组合成一块看起来是独立的大磁盘(VG),然后再将VG划分成为可用的逻辑分区(LV),这样就可以被挂在使用了

LVM可以弹性地调整文件系统的容量,具体是通过PE进行实现的

  • 物理卷PV

    物理分区/物理磁盘通过pvcreate的命令被转化成LVM的最底层的物理卷(PV),转化之前需要调整system ID为8e00(LVM系统,默认是 Linux filesystem)

  • 卷组VG

    将1个或多个PV整合成VG

  • 逻辑卷LV

    VG还需要被切分成LV,这个LV是最后可以被格式化使用的东西

  • 物理扩展块PE

    PE默认大小4M,是LVM最小的存储数据单位,我们的文件数据会借助写入PE来完成,具体如下图

image.png

对于以上概念可以通过一个例子来解释:

现在有4个300G的硬盘,将每个硬盘分成3个分区,每个分区100G,然后转化成12个100G的物理卷PV;

在4个硬盘中各取一个分区组成一个卷组VG,从而一共得到4个300G的VG;

然后将4个VG转化为LV,这样就得到4个400G的LV,它的空间实际上是来自于4个硬盘,每个硬盘100G

PS:感觉这个PE和Ceph的PG原理很像,VG和存储池的原理也很像

14.3.2 LVM操作流程

0、LVM相关命令集合
任务PV阶段VG阶段LV阶段文件系统(XFS/ ext4)
查找(scan)pvscanvgscanlvscanlsblk, blkid
建立(create)pvcreatevgcreatelvcreatemkfs.xfs, nkfs.ext4
列出(display)pvdisplayvgdisplaylvdisplaydf, mount
增加(extend)vgextendlvextendxfs_growfs, resize2fs
减少(reduce)vgreducelvreduce不支持, resize2fs
删除(remove)pvremovevgremovelvremoveumount
修改容量(resize)lvresizexfs_growfs, resize2fs
修改属性(change)pvchangevgchangelvchangeremount
1、PV阶段

pvcreate:将物理分区建立成PV

pvscan:查找目前系统里面任何具有PV的磁盘

pvdisplay:显示出目前系统上面的PV状态

pvremove:将PV属性删除,让该分区不具有PV属性

[root@host-7 vdbench50406]# pvcreate /dev/sdb6
  Physical volume "/dev/sdb6" successfully created.
# 查看所有PV
[root@host-7 vdbench50406]# pvscan
  PV /dev/sdb4   VG vg_data         lvm2 [20.00 GiB / 4.00 MiB free]
  PV /dev/sdb3   VG vg_sys          lvm2 [<90.02 GiB / 20.00 MiB free]
  PV /dev/sdb5                      lvm2 [1.00 GiB]
  PV /dev/sdb6                      lvm2 [1.00 GiB]
  Total: 4 [112.02 GiB] / in use: 2 [110.02 GiB] / in no VG: 2 [2.00 GiB]

2、VG阶段

vgcreate:建立VG的命令

vgscan:查找系统上面是否有VG

vgdisplay:显示目前系统上面的VG状态

vgextend:在VG内增加额外的PV

vgreduce:在VG内删除PV

vgchange:设置VG是否启动(active)

vgremove:删除一个VG

[root@host-7 vdbench50406]# vgcreate vgtest /dev/sdb{5,6}
  Volume group "vgtest" successfully created
参数:-s:后面接PE的大小,比如-s 16M,没有指定,就默认4M

# 查看所有VG
[root@host-7 vdbench50406]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vgtest" using metadata type lvm2
  Found volume group "vg_data" using metadata type lvm2
  Found volume group "vg_sys" using metadata type lvm2

#再次查看LV,会发现PV关联了VG
[root@host-7 vdbench50406]# pvscan
  PV /dev/sdb5   VG vgtest          lvm2 [1020.00 MiB / 1020.00 MiB free]
  PV /dev/sdb6   VG vgtest          lvm2 [1020.00 MiB / 1020.00 MiB free]

3、LV阶段

lvcreate:建立LV的命令

lvscan:查找系统上面的LV

lvdisplay:显示目前系统上面的LV状态

lvextend:在LV中增加容量

lvreduce:在LV中减少容量

lvremove:删除一个LV

lvresize:对LV进行容量大小的调整

[root@host-7 vdbench50406]# lvcreate -L 1G -n lvtest vgtest
  Logical volume "lvtest" created.
选项与参数:
-L:后面接容量,单位可以是M、G、T
-l:后面接PE的个数,容量根据 PE容量*PE个数 进行计算
-n:后面接LV的名称

# 查看所有LV
[root@host-7 vdbench50406]# lvscan
  ACTIVE            '/dev/vgtest/lvtest' [1.00 GiB] inherit
  ACTIVE            '/dev/vg_data/lv_nova' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_root' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_home' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_var' [50.00 GiB] inherit

4、文件系统阶段
[root@host-7 vdbench50406]# mkfs.xfs /dev/vgtest/lvtest            # 先格式化

[root@host-7 vdbench50406]# mount /dev/vgtest/lvtest /test        #然后挂载

[root@host-7 vdbench50406]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_sys-lv_root    20G  2.4G   17G  13% /
devtmpfs                      95G     0   95G   0% /dev
tmpfs                         95G     0   95G   0% /dev/shm
tmpfs                         95G   19M   95G   1% /run
tmpfs                         95G     0   95G   0% /sys/fs/cgroup
/dev/mapper/vg_sys-lv_home    20G  524M   19G   3% /home
/dev/sdb2                    976M  184M  726M  21% /boot
/dev/mapper/vg_sys-lv_var     49G 1012M   46G   3% /var
/dev/mapper/vg_data-lv_nova   20G   33M   20G   1% /var/lib/placements
tmpfs                         19G     0   19G   0% /run/user/1000
/dev/mapper/vgtest-lvtest   1014M   33M  982M   4% /test        #可以查询到并使用

14.3.3 放大LV容量

1、放大LV容量

[root@host-7 test]# lvresize -L +500M /dev/vgtest/lvtest
  Size of logical volume vgtest/lvtest changed from 1000.00 MiB (250 extents) to 1.46 GiB (375 extents).
  Logical volume vgtest/lvtest successfully resized.
  
# 增加成功500M
[root@host-7 test]# lvscan
  ACTIVE            '/dev/vgtest/lvtest' [1.46 GiB] inherit
  ACTIVE            '/dev/vg_data/lv_nova' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_root' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_home' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_var' [50.00 GiB] inherit
 
# 但是文件系统没有变化
[root@host-7 test]# df -hT
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_sys-lv_root  ext4       20G  2.4G   17G  13% /
devtmpfs                    devtmpfs   95G     0   95G   0% /dev
tmpfs                       tmpfs      95G     0   95G   0% /dev/shm
tmpfs                       tmpfs      95G   19M   95G   1% /run
tmpfs                       tmpfs      95G     0   95G   0% /sys/fs/cgroup
/dev/mapper/vg_sys-lv_home  ext4       20G  525M   19G   3% /home
/dev/sdb2                   ext4      976M  184M  726M  21% /boot
/dev/mapper/vg_sys-lv_var   ext4       49G 1012M   46G   3% /var
/dev/mapper/vg_data-lv_nova xfs        20G   33M   20G   1% /var/lib/placements
tmpfs                       tmpfs      19G     0   19G   0% /run/user/1000
/dev/mapper/vgtest-lvtest   xfs      1014M  185M  830M  19% /test

2、放大操作系统容量

[root@host-7 test]# xfs_growfs /test
meta-data=/dev/mapper/vgtest-lvtest isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 262144 to 384000

# 此时已经方法到1.5G
[root@host-7 test]# df -hT
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg_sys-lv_root  ext4       20G  2.4G   17G  13% /
devtmpfs                    devtmpfs   95G     0   95G   0% /dev
tmpfs                       tmpfs      95G     0   95G   0% /dev/shm
tmpfs                       tmpfs      95G   19M   95G   1% /run
tmpfs                       tmpfs      95G     0   95G   0% /sys/fs/cgroup
/dev/mapper/vg_sys-lv_home  ext4       20G  525M   19G   3% /home
/dev/sdb2                   ext4      976M  184M  726M  21% /boot
/dev/mapper/vg_sys-lv_var   ext4       49G 1012M   46G   3% /var
/dev/mapper/vg_data-lv_nova xfs        20G   33M   20G   1% /var/lib/placements
tmpfs                       tmpfs      19G     0   19G   0% /run/user/1000
/dev/mapper/vgtest-lvtest   xfs       1.5G  185M  1.3G  13% /test

14.3.4 使用LVM thin Volume让LVM动态调整磁盘使用率

可以在1G的thin pool中创建10G的thin设备,thin设备用了多少空间,pool才会动态分配多少空间,具体的后续了解

14.3.5 LVM的LV磁盘快照

14.3.5 LVM的关闭

1、先卸载系统上的LVM文件系统

[root@host-7 /]# umount /test
[root@host-7 /]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/vg_sys-lv_root    20G  2.4G   17G  13% /
devtmpfs                      95G     0   95G   0% /dev
tmpfs                         95G     0   95G   0% /dev/shm
tmpfs                         95G   19M   95G   1% /run
tmpfs                         95G     0   95G   0% /sys/fs/cgroup
/dev/mapper/vg_sys-lv_home    20G  526M   19G   3% /home
/dev/sdb2                    976M  184M  726M  21% /boot
/dev/mapper/vg_sys-lv_var     49G 1012M   46G   3% /var
/dev/mapper/vg_data-lv_nova   20G   33M   20G   1% /var/lib/placements
tmpfs                         19G     0   19G   0% /run/user/1000

2、删除LV

[root@host-7 /]# lvremove /dev/vgtest/lvtest
Do you really want to remove active logical volume vgtest/lvtest? [y/n]: y

[root@host-7 /]# lvscan
  ACTIVE            '/dev/vg_data/lv_nova' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_root' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_home' [20.00 GiB] inherit
  ACTIVE            '/dev/vg_sys/lv_var' [50.00 GiB] inherit

3、删除VG Active标志,然后删除VG

[root@host-7 /]# vgchange -a n vgtest
  0 logical volume(s) in volume group "vgtest" now active
[root@host-7 /]# vgremove vgtest
  Volume group "vgtest" successfully removed
[root@host-7 /]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg_data" using metadata type lvm2
  Found volume group "vg_sys" using metadata type lvm2

4、删除PV

[root@host-7 /]# pvremove /dev/sdb{5,6}
  Labels on physical volume "/dev/sdb5" successfully wiped.
  Labels on physical volume "/dev/sdb6" successfully wiped.
[root@host-7 /]# pvscan
  PV /dev/sdb4   VG vg_data         lvm2 [20.00 GiB / 4.00 MiB free]
  PV /dev/sdb3   VG vg_sys          lvm2 [<90.02 GiB / 20.00 MiB free]
  Total: 2 [110.02 GiB] / in use: 2 [110.02 GiB] / in no VG: 0 [0   ]

6、将System ID修改回来

[root@host-7 /]# gdisk  /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): t                # t就是修改code,可以通过?查看命令
Partition number (1-6): 6
Current type is 'Linux LVM'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.

[root@host-7 /]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048           22527   10.0 MiB    EF02  bios_grub
   2           22528         2119679   1024.0 MiB  8300  primary
   3         2119680       190912511   90.0 GiB    8E00  primary
   4       190912512       232871935   20.0 GiB    8E00  primary
   5       232871936       234969087   1024.0 MiB  8300  Linux filesystem
   6       234969088       237066239   1024.0 MiB  8300  Linux filesystem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值