谈Linux之磁盘管理——万字详解

------ 小 峰 编 程

目录

一、硬盘的基本知识

1.了解硬盘的接口类型

[2. 硬盘命名方式](#2. 硬盘命名方式)

[3. 磁盘设备的命名](#3. 磁盘设备的命名)

[4. HP服务器硬盘](#4. HP服务器硬盘)

[5. 硬盘的分区方式](#5. 硬盘的分区方式)

[二、 基本分区管理](#二、 基本分区管理)

[1. 磁盘划分思路](#1. 磁盘划分思路)

[2. 分区](#2. 分区)

[2.1 MBR分区](#2.1 MBR分区)

2.2GPT分区

3.格式化---命令:mkfs

4.挂载

4.1手动挂载

[4.2开机自动挂载之编辑/etc/fstable 或/etc/rc.local](#4.2开机自动挂载之编辑/etc/fstable 或/etc/rc.local)

4.3autofs自动挂载

4.4卸载设备:umount

三、逻辑卷管理(重点)

[1. 逻辑卷介绍](#1. 逻辑卷介绍)

2、逻辑卷基本概念

[3. 逻辑卷LVM应用](#3. 逻辑卷LVM应用)

[3.1 逻辑卷创建](#3.1 逻辑卷创建)

[3.2 逻辑卷动态扩容](#3.2 逻辑卷动态扩容)

[3.3 逻辑卷相关命令](#3.3 逻辑卷相关命令)

四、RAID

1、RAID介绍

2、常见的RAID级别

[2.1. RAID0](#2.1. RAID0)

[2.2. RAID1](#2.2. RAID1)

[2.3. RAID5](#2.3. RAID5)

[2.4. RAID6](#2.4. RAID6)

[2.5. RAID10](#2.5. RAID10)

[2.6 RAID01](#2.6 RAID01)

[2.7. 总结](#2.7. 总结)

三、软硬RAID

[1. 软RAID](#1. 软RAID)

[2. 硬RAID](#2. 硬RAID)

四、软raid创建

[1. 环境准备](#1. 环境准备)

[2. raid的创建](#2. raid的创建)

创建RAID0

创建RAID1

创建RAID5

[2. 保存RAID信息](#2. 保存RAID信息)

[3. raid停止与启动](#3. raid停止与启动)

[4. raid的删除](#4. raid的删除)


一、硬盘的基本知识

1.了解硬盘的接口类型

2. 硬盘命名方式

|-------|----------|----------|----------|
| OS | IDE(并口) | SATA(串口) | SCSI |
| RHEL5 | /dev/hda | /dev/sda | /dev/sda |
| RHEL6 | /dev/sda | /dev/sda | /dev/sda |
| RHEL7 | /dev/sda | /dev/sda | /dev/sda |

3. 磁盘设备的命名

/dev/sda2
s=硬件接口类型(sata/scsi) ,d=disk(硬盘),a=第1块硬盘(b,第二块)2=第几个分区 /dev/hd h=IDE硬盘 /dev/hdd3

/dev/vd v=虚拟硬盘 /dev/vdf7

4. HP服务器硬盘

/dev/cciss/c0d0 /dev/cciss/c0d0p1 c0第一个控制器, d0第一块磁盘, p1分区1 /dev/cciss/c0d0p2 c0第一个控制器,d0第一块磁盘, p2分区2

5. 硬盘的分区方式

MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)

MBR(Master Boot Record)的缩写,由三部分组成,即:

  • Bootloader(主引导程序)=446字节 、硬盘第一个扇区=512字节

引导操作系统的主程序

  • DPT分区表(Disk Partition Table)=64字节

分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息。每个分区需要占用16个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用。逻辑分区的分区信息保存在扩展分区内,而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制

  • 硬盘有效标志(校验位)=2个字节

GPT >2TB gdisk(parted) 128个主分区
**注意:**从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!

扩展阅读:http://www.eassos.cn/jiao-cheng/ying-pan/mbr-vs-gpt.php

二、 基本分区管理

1. 磁盘划分思路

  • 进入分区表 ,新建分区 fdisk /dev/sdb;
  • 更新分区表<刷新分区表>;
  • 格式化分区------>文件系统 mkfs.ext4 /dev/sdb1;
  • 挂载使用------>mount【开机自动挂载|autofs自动挂载】。

2. 分区

2.1 MBR分区

总结:

    1. 最多只能分4个主分区,主分区编号1-4
bash 复制代码
# lsblk
# df -h 查看正在挂载的设备情况
# fdisk -l 查看当前系统的所有设备分区情况

硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)

Disk /dev/sda: 10.7 GB, 10737418240 bytes--磁盘空间

20971520 sectors---扇区

Sector size (logical/physical): 512 bytes / 512 bytes ---扇区大小(逻辑/物理) 都是512字节。

I/O size (minimum/optimal): 512 bytes / 512 bytes---I/O 大小(最小/最大) 都是512字节。

Disk label type: dos ---设备标签类型,这个磁盘分区类型,dos表示为MBR分区,gpt为gpt分区

Disk identifier: 0xf921a80d---设备识别码

|--------------|---------|----------|---------|----|-----------|
| 启动设备 | 起始 | 结束 | 块 | id | 系统 |
| Device Boot | Start | End | Blocks | Id | System |
| /dev/sda1 * | 2048 | 1026047 | 512000 | 83 | Linux |
| /dev/sda2 | 1026048 | 20971519 | 9972736 | 8e | Linux LVM |

......

bash 复制代码
# fdisk /dev/sdb
bash 复制代码
Command(m for help): m 输出帮助信息
   a   toggle a bootable flag   设置启动分区
   b   edit bsd disklabel           编辑分区标签
   c   toggle the dos compatibility flag
   d   delete a partition    删除一个分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types     列出分区类型
   m   print this menu    帮助
   n   add a new partition    建立一个新的分区
   o   create a new empty DOS partition table  创建一个新的空白DOS分区表
   p   print the partition table   打印分区表
   q   quit without saving changes  退出不保存设置
   s   create a new empty Sun disklabel  创建一个新的空的SUN标示
   t   change a partition's system id   改变分区的类型
   u   change display/entry units  改变显示的单位
   v   verify the partition table    检查验证分区表
   w   write table to disk and exit   保存分区表
   x   extra functionality (experts only)
    1. 逻辑分区大小总和不能超过扩展分区大小,逻辑分区分区编号从5开始
    1. 如果删除扩展分区,下面的逻辑卷分区也被删除
    1. 扩展分区的分区编号(1-4)

总结:

  1. 扩展分区的大小决定了所有逻辑分区的大小

  2. 删除扩展分区后下面的逻辑分区都被删除

  3. 分完区后需要手动刷新分区表(partprobe/partx -d),如果刷新不成功需要重启操作系统

  4. 创建分区的时候尽可能注意分区序号的连续性

2.2GPT分区

磁盘分区 常用来分区的工具有 fdisk 和 parted/ gdisk,因为 fdisk 是一个基于 MBR 的分区工具,无法支持超过 2TB 的分区需求(最新的系统里边已经升级支持),推荐使用 parted (gdisk和fdisk的使用类似,在这里我就不进行讲解了)。

  • 如果没有parted命令,使用yum直接安装
bash 复制代码
yum install parted -y
  • 设置磁盘分区类型
bash 复制代码
parted -s /dev/xxx mklabel gpt

**# 注意:**将xxx替换为自己lsblk出来需要处理的磁盘名称;分区类是对磁盘设置的,不是分区哦,所以不要出 现/dev/vdb1 这种part设备;mbr分区 label为 msdos.

  • 创建分区
bash 复制代码
parted -s /dev/xxx mkpart part-type fs-type start end

**/dev/xxx :**要操作的磁盘设备,例如 /dev/sda 、 /dev/sdb 等。

**part-type :**分区的类型,例如 primary 、 logical 或 extended 。

**fs-type :**文件系统的类型,例如 ext4 、 xfs 、 ntfs 等。参数可选,一般不指定, fs-type 会在格式化时指定

**start 和end :**分区的起始和结束位置,通常以 MB 为单位,或者使用百分比(例如 10% ) 推荐使用百分比,这样会自动处理分区对齐问题。
思考: 什么是分区对齐,分区对齐有什么作用?

**答:**分区对齐是指在硬盘上划分分区时,将每个分区的起始位置与硬盘的物理块边界对齐的过程。分区对齐的作用主要有以下几点:

  1. **提高性能:**分区对齐可以减少硬盘读写时的寻址时间,从而提升磁盘I/O性能,减少读写延迟,提高数据传输速度。

  2. **增强硬盘寿命:**分区对齐可以减少硬盘的寻址次数,降低硬盘读写的磨损程度,延长硬盘的使用寿命。

  3. **避免数据损坏:**未对齐的分区可能导致部分数据跨越多个物理块,容易发生读写错误,甚至数据损坏。

总的来说,分区对齐可以优化硬盘性能,提高数据传输速度,减轻硬盘的负担,降低数据损坏的风险,是一个值得注意和遵循的硬盘管理原则

  • 查看磁盘现有分区
bash 复制代码
lsblk
parted -s /dev/xxx print
fdisk -l

以上三个命令都可以,请自己测试对比其中信息的差异,根据自己的需求使用。

  • 删除分区

删除分区时一个非常危险的动作,在操作之前,请明确每一条命令的功能和结果 。删除分区虽然只是将分区信息删除,实际上边的文件系统,文件是没有删除的 。只要你可以将源分 区信息还原(实际上就是每一个分区的起始位置和终止位置),数据就可以正常读取出来。这仅是对您 的提示,生产环境尽量不要碰到这种情况。 没有特殊的需求,分区都从0%-100%,即一个磁盘只创建一个分区。这样分区被误删是比较 容易恢复的,重新按照 0%到100%大小创建分区即可。在生产环境下目前大部分的实践是不分区,直接格式化

bash 复制代码
parted -s /dev/xxx rm 1  

# 删除第一个分区,这个需要是从 parted -s /dev/xxx print 中 获取的。磁盘完成分区之后,是无法直接使用的,还需要格式化,这个过程实际上是在硬盘上创建文件系 统。

3.格式化---命令:mkfs

系统中除了 mkfs 命令外,还有上边这一批,mkfs.* 开头的命令,可以直接格式化对应的文件系 统,目前被Linux系统广泛使用的是 ext4 和 xfs 。 mkfs.ext4 这个命令就等价于 mkfs -t ext4。

bash 复制代码
mkfs.ext4  /dev/xxx 或 mkfs -t ext4  /dev/xxx 

注意: 格式化是非常危险的操作,会造成数据丢失 ,所以请务必谨慎核对格式化的分区名称。 mkfs 格式化时,需要指定分区(lsblk 命令显示 part类型的设备),而不是磁盘,如果对一个 已经分区的磁盘直接进行格式化,会令分区丢失。

4.挂载

4.1手动挂载

  • 创建新的挂载点

自己创建一个挂载点,或者挂载当前系统下的某个挂载点上。

bash 复制代码
mkdir /test
  • 挂载使用 mount [options] 需要挂载的设备 挂载点
bash 复制代码
 mount /dev/sdb1 /test

特点:系统重启后需要重新挂载;手动卸载后需要手动挂载

  • -o:挂载选项 ro,sync,rw,remount

  • -t:文件系统类型

  • mount -t nfs=mount.nfs
    mount -t cifs=mount.cifs
    10.1.1.2 /share [smb]
    mount.cifs -o user=user01,password=123 //10.1.1.2/smb /u01
    mount.nfs 10.1.1.2:/share /u02

  • remount:重新挂载一个正在挂载的设备

注意: 后面可以根挂载点也可以跟设备本身;**挂载设备:**真实设备、设备UUID,设备的卷标

bash 复制代码
blkid /dev/xxxx  查看设备的UUID和文件系统类型

4.2开机自动挂载之编辑/etc/fstable 或/etc/rc.local

操作系统启动流程:

    1. 硬件初始化 硬盘、内存.......
    1. 系统初始化 /sbin/init--->xxxxxx/etc/fstab

补充:

操作系统启动流程通常包括以下步骤:

  1. 加电自检(Power-On Self-Test,POST):计算机加电时进行的自检,检查硬件是否正常工作。

  2. BIOS启动:计算机启动时首先加载Basic Input/Output System(BIOS),进行硬件初始化、设备检测等操作。

  3. 引导加载程序(Boot Loader):BIOS将控制权交给引导加载程序,比如GRUB、LILO等。引导加载程序会加载操作系统的内核。

  4. 操作系统内核加载:引导加载程序加载操作系统内核,将控制权交给内核。

  5. 系统初始化:操作系统内核负责进行系统的初始化工作,包括初始化内存、文件系统、进程管理等。

  6. 运行init进程:操作系统内核启动一个init进程(或者Systemd等替代物),init负责系统的后续初始化和服务管理。在Linux系统中,初始的init进程是/sbin/init。

  7. 挂载文件系统:系统初始化完毕后,会根据/etc/fstab文件中的配置将需要的文件系统挂载到相应的目录上,包括根目录、/home目录等。

这是一个简要的操作系统启动流程,具体步骤可能因操作系统的版本和配置而有所不同。

  • **/etc/fstab文件:**vim /etc/fstab ---->编辑该文件之后就可开机自动挂载

格式:

bash 复制代码
 要挂载的资源路径              挂载点 文件系统类型   挂载选项 dump备份支持 文件系统检测
UUID=xxxx(自己使用blkid进行查看) /     ext4       defaults      1          1
  1. 1段:挂载的设备(磁盘设备的文件名 或设备的卷标 或者是设备的UUID
  2. 2段:挂载点(建议用一个空目录),建议不要将多个设备挂载到同一个挂载点上
  3. 3段:文件系统类型(ext3、ext4、vfat、ntfs(安装软件包)、swap等等)
  4. 4段:挂载选项,defaults 同时具有rw, dev, exec, acl, async,nouser等参数。

|-------------|----------------------------------|
| async/sync | 异步/同步; |
| auto/noauto | 自动/非自动; |
| rw/ro | 读写/只读 |
| exec/noexec | 可被执行/不可被执行; |
| remount | 重新挂在一个已经挂载的文件系统,常用于修改挂载参数; |
| user/nouser | 允许/不允许其他普通用户挂载; |
| suid/nosuid | 具有/不具有suid权限:该文件系统是否允许SUID的存在; |
| usrquota | 这个是在启动文件系统的时候,让其支持磁盘配额,这个是针对用户的; |
| grpquota | 支持用户组的磁盘配额; |
| .... ||

mount -a 重新读取/etc/fstab文件内容

man mount 可以找到详细信息

5.5段:是否支持dump备份。dump是一个用来备份的命令,**0代表不要做dump备份,1代表要每天进行dump的动作,2也代表其他不定日期的dump备份。**通常这个数值不是0就是1。数字越小优先级越高。

6.6段:是否用 fsck 检验扇区。开机的过程中,系统默认会用fsck检验文件系统是否完整。0是不要检验,1表示最先检验(一般只有根目录会设定为1) ,2也是要检验,只是1是最先,2是其次才进行检验。

  • 我本人并不建议挂载在该设备文件中,如果稍有差错就会导致一些列加载启动的问题。 由于/etc/rc.local 操作系统启动后读取的最后一个文件,所以我建议大家挂载在此目录下:
bash 复制代码
vim /etc/rc.local
/bin/mount -o noexec,ro /dev/sdb1 /test

自动挂载 Automount:

fsck -f /dev/sdb2 强制检验/dev/sdb2上文件系统

说明:

要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等。

特点:系统重启后自动挂载;手动卸载后重启会自动挂载或者使用mount -a自动挂载

补充说明:e2label只能够对ext2~ext4的文件系统设置卷标(等同标识符)

  • 便于使用卷标对卷进行管理,如挂载
bash 复制代码
e2label /dev/sdb1 mytest
blkid /dev/sdb1
mount LABEL="mytest" /test

4.3autofs自动挂载

特点:挂载是由访问产生;卸载是由超时产生;依赖于后台的autofs服务。使用时触发自动挂载,超时自动卸载。

  • 如何配置设备的autofs自动挂载?

1)安装autofs软件

bash 复制代码
rpm -q autofs #先查看本机有没有安装autofs
yum install autofs -y

2)修改/etc/auto.master文件 定义1级挂载点和超时时间,子配置文件

bash 复制代码
vi /etc/auto.master
            ......
/misc   /etc/auto.misc
/test(一级目录路径)   /etc/auto.test  -t 120 #在文件中招上面一行,进行编辑左边所示。

3)创建刚刚定义的子配置文件 二级挂载点和需要挂载设备以及文件系统类型及挂载方式

bash 复制代码
vi auto.test
test1(二级目录,即就是最终挂载的目录)   -fstype=ext4(系统文件类型)    :/dev/sdb1

4)启动服务,测试验证

bash 复制代码
systemctl start autofs
lsblk或 df -h
cd /test/test1
lsblk或 df -h

4.4卸载设备:umount

bash 复制代码
umount /test 或 umount /dev/sdb1
umonut 挂载的文件名/挂载的设备名称

最后挂载成功之后就可以使用了。

三、逻辑卷管理(重点)

1. 逻辑卷介绍

逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。

特点:++动态在线扩容(重点) 、离线裁剪 、数据条带化 、数据镜像++

**注:**真实的物理设备------>逻辑上(命令创建)------>物理卷(pv)------>卷组(vg)------>逻辑卷(lv)------>逻辑卷格式化------>挂载使用。

2、逻辑卷基本概念

  • 物理卷(Physical Volume,PV)

物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。

  • 卷组(Volume Group, VG)

卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。 一个LVM系统中可以只有一个卷组,也可以包含多个卷组。

  • 逻辑卷(Logical Volume, LV)

逻辑卷建立在卷组之上,它是从卷组中"切出"的一块空间 。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一 一对应。

  • 物理区域 PE(physical extent)

每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的

4MB=4096kb=4096kb/4kb=1024个block

  • 说明:
  1. 硬盘读取数据最小单位1个扇区512字节
  2. 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
  3. lvm寻址最小单位1个PE=4MB

3. 逻辑卷LVM应用

3.1 逻辑卷创建

需求:++创建一个2.5G大小的逻辑卷++
思路:

  1. 物理的设备

  2. 将物理设备做成物理卷

  3. 创建卷组并将物理卷加入其中

  4. 创建逻辑卷

  5. 格式化逻辑卷

  6. 挂载使用

1. 物理设备的准备

bash 复制代码
sdb               8:16   0   10G  0 disk
├─sdb1            8:17   0 1024M  0 part
├─sdb2            8:18   0    1G  0 part
├─sdb3            8:19   0    1G  0 part
├─sdb4            8:20   0    1G  0 part
├─sdb5            8:21   0    1G  0 part
├─sdb6            8:22   0    1G  0 part
├─sdb7            8:23   0    1G  0 part
├─sdb8            8:24   0    1G  0 part
├─sdb9            8:25   0    1G  0 part
└─sdb10           8:26   0 1023M  0 part

2. 创建物理卷

bash 复制代码
pvcreate /dev/sdb1 /dev/sdb2

查看物理卷:

bash 复制代码
pvs #简单查看
bash 复制代码
 PV         VG     Fmt  Attr PSize    PFree
  /dev/sda2  centos lvm2 a--    <9.51g       0
  /dev/sdb1         lvm2 ---  1023.98m 1023.98m
  /dev/sdb2         lvm2 ---     1.00g    1.00g
bash 复制代码
 pvdisplay /dev/sdb1 #详细查看
"/dev/sdb1" is a new physical volume of "1023.98 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               1023.98 MiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Ta58vg-tNa9-xjPw-XAhN-wWCO-dFFt-EwZLlg

3. 创建卷组并将物理卷加入其中

bash 复制代码
vgcreate vg1 /dev/sdb1 /dev/sdb2

查看卷组信息:

bash 复制代码
vgs vg1 #简单查看
vgdisplay vg01 详细查看

4. 创建逻辑卷

bash 复制代码
lvcreate -n lv1 -L 1.5G vg1

在操作系统层面映射两个地方:

bash 复制代码
[root@bogon ~]# ll /dev/mapper/vg1-lv1
lrwxrwxrwx. 1 root root 7 Apr  7 23:02 /dev/mapper/vg1-lv1 -> ../dm-1
[root@bogon ~]# ll /dev/vg1/lv1
lrwxrwxrwx. 1 root root 7 Apr  7 23:02 /dev/vg1/lv1 -> ../dm-1

查看逻辑卷的信息:

bash 复制代码
 lvdisplay /dev/vg1/lv1
-n:指定逻辑卷的名字
-L:指定逻辑卷的大小
-l:指定逻辑卷的大小

5. 格式化逻辑卷

bash 复制代码
mkfs.ext4 /dev/vg1/lv1

6. 挂载使用

1)创建一个空的挂载点

2)挂载使用

bash 复制代码
mount /dev/vg1/lv1 /test/test2

3.2 逻辑卷动态扩容

**需求:**将/test2目录动态扩容到3G
思路:

    1. 查看/u01目录所对应的逻辑卷是哪一个 /dev/mapper/vg02-lv01
    1. 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
    1. 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
    1. 如果vg01空间足够,直接扩容逻辑卷

步骤:

1. 查看/u01目录属于哪个卷组

bash 复制代码
 df -h
 lvs

2. 卷组的剩余空间

bash 复制代码
vgs

结果: ++当前卷组空间不足我扩容++

3. 扩容逻辑卷所在的卷组

  • 1)首先得有物理设备
    1. 将物理设备做成物理卷
bash 复制代码
pvcreate /dev/sdb[3-4]
pvs
  • 3)将物理卷加入到卷组中(卷组扩容)
bash 复制代码
vgextend vg1 /dev/sdb[3-4]
pvs
vgs

**注意:**正常情况下,应该先将物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷。

4. 扩容逻辑卷

bash 复制代码
lvextend -n /dev/vg1/lv1 -L 3G  # -L 3G最终的大小
或者
lvextend -L +1.5G /dev/vg1/lv1 -L +1.5G 扩容1.5G

5. 查看结果

bash 复制代码
lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <9.51g
  lv1  vg1    -wi-ao----  3.00g

6. 同步文件系统

bash 复制代码
resize2fs /dev/vg1/v1  #ext4文件系统类型
xfs_growfs /dev/vg1/v1   #xfs

7. 再次查看验证

bash 复制代码
df -h

离线裁剪逻辑卷(了解)

bash 复制代码
umount /test/test2
e2fsck -f /dev/vg1/lv1 检验文件系统
resize2fs /dev/vg1/lv1 2G 裁剪文件系统到2G
lvreduce /dev/vg1/lv1 -L 2G 裁剪逻辑卷
mount /dev/vg1/lv1 /data 挂载使用

3.3 逻辑卷相关命令

  • 创建物理卷:pvcreate
  • 创建卷组:vgcreate
  • 创建逻辑卷:lvcreate
  • 删除逻辑卷:lvremove
  • 删除卷组:vgremove

说明:卷组里的物理卷没有被使用才可以直接删除卷组

  • 删除物理卷:pvremove
  • 扩容卷组:vgextend
  • 扩容逻辑卷:lvextend
  • 同步文件系统:resize2fs
  • 裁剪卷组:vgreduce
  • 裁剪逻辑卷:lvreduce

四、RAID

1、RAID介绍

RAID(Redundant Array of Independent Disk独立冗余磁盘阵列 )技术是加州大学伯克利分校1987年提出,最初是++为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术++ 。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能,能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响

2、常见的RAID级别

2.1. RAID0

RAID0特点:

  • 至少需要两块磁盘
  • 数据条带化 分布到磁盘,高的读写性能,100%高存储空间利用率
  • 数据没有冗余策略,一块磁盘故障,数据将无法恢复
  • 应用场景:对性能要求高但对数据安全性和可靠性要求不高的场景,比如音频、视频等的存储。

2.2. RAID1

RAID1特点:

  • 至少需要2块磁盘
  • 数据镜像备份写到磁盘上(工作盘和镜像盘),可靠性高,磁盘利用率为50%
  • 读性能可以,但写性能不佳
  • 一块磁盘故障,不会影响数据的读写
  • 应用场景:对数据安全可靠要求较高的场景,比如邮件系统、交易系统等。

2.3. RAID5

RAID5特点:

  • 至少需要3块磁盘
  • 数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
  • 奇偶校验(分散)做数据冗余
  • 一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
  • 是目前综合性能最佳的数据保护解决方案
  • 兼顾了存储性能、数据安全和存储成本等各方面因素(性价比高)
  • 适用于大部分的应用场景

2.4. RAID6

RAID6特点:

  • 至少需要4块磁盘
  • 数据条带化存储在磁盘,读取性能好,容错能力强
  • 采用双重校验方式保证数据的安全性
  • 如果2块磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
  • 成本要比其他等级高,并且更复杂
  • 一般用于对数据安全性要求非常高的场合

2.5. RAID10

RAID10特点:

  • RAID10是raid1+raid0的组合(镜像+条带化)
  • 至少需要4块磁盘
  • 两块硬盘为一组先做raid1,再将做好raid1的两组做raid0
  • 兼顾数据的冗余(raid1镜像)和读写性能(raid0数据条带化)
  • 磁盘利用率为50%,成本较高

2.6 RAID01

raid01与raid10的架构顺序刚好相反,raid01是先做条带再做镜像,结构如图 这种架构的安全性低于raid10,而两者由于IO数量一致。读写速度相同,使用的硬盘数量也一致。

2.7. 总结

类型 读写性能 可靠性 磁盘利用率 成本
RAID0 最好 最低 100% 较低
RAID1 读正常;写两份数据 50%
RAID5 读:近似RAID0 写:多了校验 RAID0<RAID5<RAID1 (n-1)/n RAID0<RAID5<RAID1
RAID6 读:近似RAID0 写:多了双重校验 RAID6>RAID5 RAID6<RAID5 RAID6>RAID1
RAID10 读:RAID10=RAID0 写:RAID10=RAID1 50% 最高

3、软硬RAID

3.1. 软RAID

软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:

  • 占用内存空间
  • 占用CPU资源
  • 如果程序或者操作系统故障就无法运行

总结:基于以上缺陷,所以现在企业很少用软raid。

3.2. 硬RAID

通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。RAID卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。不同的RAID卡支持的RAID功能不同。支持RAlD0、RAID1、RAID4、RAID5、RAID10不等。

4、软raid创建

4.1. 环境准备

添加1个大小为10G的虚拟硬盘,并分10个分区。

4.2. raid的创建

创建RAID0
bash 复制代码
安装mdadm工具:
yum -y install mdadm
mdadm --create /dev/md0 --raid-devices=2 /dev/sdb1 /dev/sdb2 --level=0
mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
-C:创建软raid
-l:指定raid级别
-n:指定raid中设备个数

查看RAID信息:/proc/mdstat文件记录了所有raid信息

bash 复制代码
cat /proc/mdstat 

查看指定的RAID信息:

bash 复制代码
mdadm -D /dev/md0

格式化挂载使用:

bash 复制代码
mkfs.ext4 /dev/md0
mount /dev/md0 /test/test1

测试:

bash 复制代码
iostat -m -d /dev/sdc[12] 2
dd if=/dev/zero of=/u01/file bs=1M count=1024
创建RAID1
  • 创建raid1:
bash 复制代码
mdadm -C /dev/md1 -l1 -n 2 /dev/sdc[34]
  • 查看状态信息:

    bash 复制代码
    watch -n 1 cat /proc/mdstat   #watch命令监控该文件变化情况,1秒钟显示一次
    #或者直接查看 cat /proc/mdstat 

    **注:**两个UU说明状态ok,一个盘故障则显示_U;F表示失效失败;_表示有一块盘失效。

  • 查看raid1详细信息

bash 复制代码
mdadm -D /dev/md1     
  • 格式化挂载使用:
bash 复制代码
mkfs.ext4 /dev/md1
mount /dev/md1 /test/test2
  • 测试验证热插拔:
  1. 模拟一块盘故障(将磁盘标记为失效)
bash 复制代码
mdadm /dev/md1 -f /dev/sdb3
set /dev/sdb3 faulty in /dev/md1
-f or --fail  表示失效
  1. 查看raid1状态
bash 复制代码
cat /proc/mdstat 
  1. 移除故障或者失效硬盘(热拔)
bash 复制代码
mdadm /dev/md1 -r /dev/sdb3
-r or --remove 表示移除
mdadm -D /dev/md1
  1. 加入新的磁盘到raid1中(热插)
bash 复制代码
mdadm /dev/md1 -a /dev/sdb3
-a or --add 表示增加
cat /proc/mdstat 
创建RAID5
  • 创建raid5:
bash 复制代码
mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdc{7,8,9,10}
-x, --spare-devices=  表示指定热备盘
说明:热备盘表示当其中一块盘故障后,热备盘会立马顶上去,而不需要人为手动干预。
  • 格式化挂载使用:
bash 复制代码
mkfs.ext4 /dev/md5
mount /dev/md5 /test/test3
  • 测试热备磁盘作用:
  1. 标记一块活动盘失效
bash 复制代码
mdadm /dev/md5 -f /dev/sdb5

立即查看状态:

bash 复制代码
cat /proc/mdstat 
mdadm -D /dev/md5
  1. 移除失效的盘
bash 复制代码
mdadm /dev/md5 -r /dev/sdc7
cat /proc/mdstat
  1. 为了日后考虑,再次添加一个热备盘到raid5中
bash 复制代码
 mdadm /dev/md5 -a /dev/sdb5

小练习:

  1. 创建一个raid5,raid5至少由3块磁盘设备组成

  2. 模拟1块设备故障,检查raid5是否可以正常使用

保存RAID信息

**问:**为什么要保存raid信息?
答:++如果不做信息的保存,重启系统后raid不能自动被识别到(在rhel6里测试为重启后名字会变)。++

  1. 创建配置文件
bash 复制代码
vim /etc/mdadm.conf 
DEVICES /dev/sdb[125678]

**说明:**该配置文件默认没有,手动创建,里面写上做了raid的所有硬盘设备。

  1. 扫描raid信息保存到配置文件
bash 复制代码
 mdadm -D --scan >> /etc/mdadm.conf 
cat /etc/mdadm.conf 
DEVICES /dev/sdb[125678]
DEVICES /dev/sdb[12345678]
ARRAY /dev/md/0 metadata=1.2 name=localhost.localdomain:0 UUID=b5fae7c0:28c267ed:d2fcf245:638caa84
ARRAY /dev/md1 metadata=1.2 name=bogon:1 UUID=d795a5af:09c8966a:cc88b2d5:a2a68562
ARRAY /dev/md5 metadata=1.2 spares=1 name=bogon:5 UUID=9f29e214:07984db1:20b92e6c:b0604f57
raid停止与启动
  • 以RAID5为例说明:

停止raid:

  1. 卸载raid
bash 复制代码
umount /test/test3
  1. 使用命令停止raid
bash 复制代码
mdadm --stop /dev/md5

启动raid

  1. 配置文件(/etc/mdadm.conf)存在如下启动
bash 复制代码
mdadm -A /dev/md5
-A:Assemble a pre-existing array  表示装载一个已存在的raid
  1. 配置文件(/etc/mdadm.conf)不存在如下启动
bash 复制代码
mdadm -A /dev/md5 /dev/sdb[5678]
  1. 如果设备名不知道,可以去查看每个设备的raid信息,使用uuid把raid设备重新组合
bash 复制代码
mdadm -E /dev/sdb5
 说明:同一个raid里每个磁盘查看的UUID都是这个值
mdadm -E /dev/sdn6
通过以上方法找到后进行重新组合,如下:
mdadm -A --uuid=18a60636:71c82e50:724a2a8f:e763fdcf /dev/md5
raid的删除
    1. 卸载设备
bash 复制代码
umount /test/test3
    1. 移除所有磁盘
bash 复制代码
 mdadm /dev/md5 -f /dev/sdb[5678]
 mdadm /dev/md5 -r /dev/sdb[5678]
    1. 停止raid
bash 复制代码
 mdadm --stop /dev/md5
    1. 擦出超级块(superblock)清除相关信息
bash 复制代码
mdadm --misc --zero-superblock /dev/sdb[5678]

本 篇 完 结 ... ...


持 续 更 新 中 ... ...

相关推荐
jingjingjing1111几秒前
笔记:代码随想录算法训练营day67:Floyd 算法精讲、A * 算法精讲 (A star算法) 严重超时完结,不过,撒花
笔记
庐阳寒月4 分钟前
linux多线(进)程编程——番外1:内存映射与mmap
linux·c语言·嵌入式
zhuyixiangyyds32 分钟前
day28图像处理OpenCV
图像处理·笔记·学习
Forget_855035 分钟前
RHCE第五章:NFS服务器
运维·服务器
QC七哥1 小时前
ubuntu不生成core文件的处理
linux·运维·ubuntu
老友@1 小时前
RabbitMQ 深度解析:从基础到高级应用的全面指南
运维·分布式·rabbitmq
DaLi Yao1 小时前
【笔记】对抗训练-GAN
笔记
zuozewei1 小时前
干货 | 高性能 Nginx 优化配置总结
运维·nginx
不爱吃于先生2 小时前
机器学习概述自用笔记(李宏毅)
人工智能·笔记·机器学习