CHAPTER 3 磁盘管理

磁盘管理

    • 1 块设备信息(lsblk)
    • 2 挂载硬盘
      • 2.1 挂载单个硬盘(mkfs、mount)
      • 2.2 磁盘分区工具(fdisk)
      • 2.3 创建分区
      • 2.4 相关命令
        • 1. df
        • 2. partprobe
        • 3. mkfs
    • 3 逻辑卷管理器(LVM)
      • 3.1 相关概念
      • 3.2 使用LVM流程
      • 3.3 LVM 的 LV 磁盘快照(LVM备份)
        • 传统快照区的建立
        • 利用快照区复原系统
    • 4 RAID
      • 4.1 RAID分类
        • 1. RAID 0(条带化存储)
        • 2. RAID 1(镜像存储)
        • 3. RAID 5
        • 4. RAID 6
        • 5. RAID 1+0 (先做镜像,再做条带)
        • 6. RAID 0+1 (先做条带,再做镜像)
        • 7. RAID对比
      • 4.2 创建RAID
        • 1. 准备工作
        • 2. 创建RAID 0
        • 3. 创建RAID 1
        • 4. 创建RAID 5
        • 5. 创建RAID 6
        • 6. 创建RAID10
      • 4.3 删除磁盘阵列
    • 5 磁盘检测及修复(fsck)

1 块设备信息(lsblk)

lsblk命令的英文是“list block”,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。lsblk命令包含util-linux中。通过yum provides lsblk命令查看命令对应的软件包

[root@dbc-server-554 zabbix]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  1.8T  0 disk
├─sda1            8:1    0  200M  0 part /boot/efi
├─sda2            8:2    0    1G  0 part /boot
└─sda3            8:3    0  1.8T  0 part
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0  7.8G  0 lvm  [SWAP]
  └─centos-home 253:3    0  1.8T  0 lvm  /home
sdb               8:16   0  1.8T  0 disk
└─sdb1            8:17   0  1.8T  0 part
  └─DBCVG-DBCLV 253:2    0  3.7T  0 lvm  /mnt/DBC_Data
sdc               8:32   0  1.8T  0 disk
└─sdc1            8:33   0  1.8T  0 part
  └─DBCVG-DBCLV 253:2    0  3.7T  0 lvm  /mnt/DBC_Data

字段含义

字段 说明
NAME 这是块设备名。
MAJ:MIN 本栏显示主要和次要设备号。
RM 本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE 本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
RO 该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE 本栏显示块设备是否是磁盘或磁盘上的一个分区。sda和sdb是磁盘,而sr0是只读存储(rom)
MOUNTPOINT 本栏指出设备挂载的挂载点。

从上述输出信息中,可以直观地了解到目前系统的硬盘分区及挂载情况。你也许可以发现,lsblk 显示的块设备的名字十分特别。事实上,Linux 中的块设备的命名是有一定规则的。

① 对于 SATA、SCSI 或 USB 接口的硬盘或 U 盘,其命名规则如下

主设备文件名 次设置文件名(分区)
sd[小写字母],如 sda、sdb 等 sd[小写字母][正整数],如 sda1、sdc1 等

② 对于 NVMe(M.2)接口的硬盘,其命名规则如下:

主设备文件名 次设置文件名(分区)
nvme[非负整数],如 nvme0、nvme1 等 nvme[非负整数]n[正整数]p[正整数],如 nvme0n1p1、nvme1n1p3 等

③ 对于 CD 或 DVD (ROM)光驱设备,其命名规则如下:

主设备文件名 次设置文件名(分区)
sr[非负整数]如 sr0、sr1 等 光驱不能分区

2 挂载硬盘

2.1 挂载单个硬盘(mkfs、mount)

查看linux下的硬盘

df -h
df -t tmpfs			#查看指定文件系统类型 

① 格式化:

mkfs -t ext4 /dev/sda1

② 创建挂载目录:

mkdir /data

③ 把空间挂在/data :

mount /dev/sda1 /data

④ 将以下信息添加到 /etc/fstab

/dev/sda1    /data    ext4    defaults    0    0

⑤ 立即执行 fstab 的内容:

mount -a

至此,硬盘挂载完毕。前三步为临时挂载,下次重启前挂载均有效,重启后挂载失效,当完成第四步后,已完成永久挂载

⑥ 若硬盘无法访问:
如出现报错: permission denied
同样修改文件权限即可:

sudo chmod 777 /media/sda1

⑦ 若需要解除挂载:

sudo umount /dev/sda1

⑧ 若需要临时挂载:
只是把硬盘插上,开机时可能会自动挂载硬盘,但是这样硬盘无法使用,需要先解除挂载:

sudo umount /dev/sdd1

重新挂载:

sudo mount /dev/sdd1 /snowstorm

2.2 磁盘分区工具(fdisk)

如果要挂载的硬盘,需要划分为多个分区,则需要创建分区,然后进行挂载,这个时候需要使用fdisk命令

Linux fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表、BSD 或者 SUN 类型的磁盘列表。

语法

# 更改分区表
fdisk [options] <disk>
# 列出分区表
fdisk [options] -l <disk>
# 给出分区大小
fdisk -s <partition>

该命令支持的选项有:

选项 说明
-b 扇区大小(512、1024、2048或4096)
-c 兼容模式:“dos”或“nondos”(默认)
-h 打印此帮助文本
-u 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
-v 打印版本信息
-C 指定柱面数
-H 指定磁头数
-S 指定每个磁道的扇区数

当进入分区界面后,可以输入如下命令进行操作:

命令 命令说明
a 切换可引导标志
b 编辑bsd磁盘标签
c 切换dos兼容性标志
d 删除分区
g 创建一个新的空GPT分区表
G 创建一个IRIX(SGI)分区表
l 列出已知的分区类型
m 打印此菜单
n 添加一个新分区
o 创建一个新的空DOS分区表
p 打印分区表
q 退出而不保存更改
s 创建一个新的空Sun磁盘标签
t 更改分区的系统id
u 更改显示/输入单位
v 验证分区表
w 将表写入磁盘并退出
x 额外功能(仅限专家)

查看支持的分区类型

Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

2.3 创建分区

通过fdisk -l lsblk,我们可以知道那些磁盘是空闲并未使用
如果要为指定硬盘创建分区,命令格式如下:

# 语法
fdisk 指定磁盘
# 示例,给磁盘 /dev/sdb 进行分区,/dev/sdb 是查询出来的磁盘名
fdisk /dev/sdb

创建分区基本流程:

  • fdisk /dev/device
  • > p(显示设备详细信息)
  • > n(创建新分区)
  • >1(partition number)
  • > 回车,即选择默认(first sector)
  • > +20G(last sector)
  • 提示 Partition 1 of type Linux and of size 5 GiB is set
  • > p
  • > w(保存退出)
[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   35G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   25G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm
sdb               8:16   0   10G  0 disk
└─centos-root   253:0    0   25G  0 lvm  /
sdc               8:32   0    5G  0 disk
sr0              11:0    1  973M  0 rom
[root@node1 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf1526ce9.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Partition 1 of type Linux and of size 5 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   35G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   25G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm
sdb               8:16   0   10G  0 disk
└─centos-root   253:0    0   25G  0 lvm  /
sdc               8:32   0    5G  0 disk
└─sdc1            8:33   0    5G  0 part
sr0              11:0    1  973M  0 rom
[root@node1 ~]# mkfs -t ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@node1 ~]# mkdir /mnt/sdc
[root@node1 ~]# mount /dev/sdc /mnt/sdc
[root@node1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 866M     0  866M   0% /dev
tmpfs                    878M     0  878M   0% /dev/shm
tmpfs                    878M   87M  791M  10% /run
tmpfs                    878M     0  878M   0% /sys/fs/cgroup
/dev/mapper/centos-root   25G   18G  7.6G  70% /
/dev/sda1               1014M  225M  790M  23% /boot
tmpfs                    176M     0  176M   0% /run/user/0
/dev/sdc                 4.8G   20M  4.6G   1% /mnt/sdc
[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   35G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   25G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm
sdb               8:16   0   10G  0 disk
└─centos-root   253:0    0   25G  0 lvm  /
sdc               8:32   0    5G  0 disk /mnt/sdc
sr0              11:0    1  973M  0 rom

注意:

分区可以按主分区(primary partition)或扩展分区(extended partition)创建,主分区可以被系统直接格式化,而扩展分区则只能容纳逻辑分区。扩展分区出现是因为每个存储设备只能有4个分区,可通过创建多个扩展分区,在扩展分区内创建分区

有的版本不会自动更新linux系统新分区的生成,需要使用partprobe或hdparm,或重启系统让系统更新分区表

2.4 相关命令

1. df

df命令的英文全称即“Disk Free”,顾名思义功能是用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于阅读。

日常普遍用该命令可以查看磁盘被占用了多少空间、还剩多少空间等信息。

语法格式:

df [参数] [指定文件]

常用参数:

  • -a 显示所有系统文件
  • -B <块大小> 指定显示时的块大小
  • -h 以容易阅读的方式显示
  • -H 以1000字节为换算单位来显示
  • -i 显示索引字节信息
  • -k 指定块大小为1KB
  • -l 只显示本地文件系统
  • -t <文件系统类型> 只显示指定类型的文件系统
  • -T 输出时显示文件系统类型
  • --sync 在取得磁盘使用信息前,先执行sync命令

参考实例:

[root@node1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 866M     0  866M   0% /dev
tmpfs                    878M     0  878M   0% /dev/shm
tmpfs                    878M   87M  791M  10% /run
tmpfs                    878M     0  878M   0% /sys/fs/cgroup
/dev/mapper/centos-root   25G   18G  7.6G  70% /
/dev/sda1               1014M  225M  790M  23% /boot
tmpfs                    176M     0  176M   0% /run/user/0
/dev/sdc                 4.8G   20M  4.6G   1% /mnt/sdc
[root@node1 ~]# df -t ext4 -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        4.8G   20M  4.6G   1% /mnt/sdc

2. partprobe

partprobe命令用于重读分区表,将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表。如果删除文件后,仍然提示占用空间,可以用partprobe在不重启的情况下重读分区 。

语法格式:

partprobe [参数]

常用参数:

  • -d 不更新内核
  • -s 显示摘要和分区
  • -h 显示帮助信息
  • -v 显示版本信息

参考实例:
在安装Linux系统之后,创建分区并且在不重新启动机器的情况下,让系统识别这些分区(sdb6为新创建的分区):

[root@linux265 ~]# partprobe /dev/sdb6

3. mkfs

在磁盘分区上创建ext2、ext3、ext4、ms-dos、vfat文件系统,默认情况下会创建ext2。mkfs用于在设备上构建Linux文件系统,通常是硬盘分区。文件要么是设备名称(例如/dev/hda1,/dev/sdb2),要么是包含文件系统的常规文件。成功返回0,失败返回1。

实际上,mkfs只是Linux下可用的各种文件系统构建器(mkfs.fstype)的前端,在可能/sbin、/sbin/fs、/sbin/fs.d、/etc/fs、/etc/fs等多个目录中搜索特定于文件系统的生成器(编译时定义了精确的列表,但至少包含/sbin和/sbin/fs),最后在PATH环境变量中列出的目录中搜索。

mkfs.ext4 等价于 mkfs -t ext4

语法格式:

mkfs [参数]

常用参数:

  • device 预备检查的硬盘分区,例如:/dev/sda1
  • -V 详细显示模式
  • -t 给定档案系统的型式,Linux 的预设值为 ext2
  • -c 在制做档案系统前,检查该partition 是否有坏轨
  • -l bad_blocks_file 将有坏轨的block资料加到 bad_blocks_file 里面
  • block 给定 block 的大小

参考实例:
在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来:

[root@linux265 ~]# mkfs -V -t msdos -c /dev/hda5 

将sda6分区格式化为ext3格式:

[root@linux265 ~]# mfks -t ext3 /dev/sda6      

3 逻辑卷管理器(LVM)

任务 PV 阶段 VG 阶段 LV 阶段 filesystem-XFS filesystem-EXT4
搜寻(scan) pvscan vgscan lvscan lsblk, blkid lsblk, blkid
建立(create) pvcreate vgcreate lvcreate mkfs.xfs mkfs.ext4
列出(display) pvdisplay vgdisplay lvdisplay df, mount df, mount
增加(extend) vgextend lvextend (lvresize) xfs_growfs resize2fs
减少(reduce) vgreduce lvreduce (lvresize) 不支援 resize2fs
删除(remove) pvremove vgremove lvremove umount, 重新格式化 umount, 重新格式化
改变容量(resize) lvresize xfs_growfs resize2fs
改变属性(attribute) pvchange vgchange lvchange /etc/fstab, remount /etc/fstab, remount

3.1 相关概念

  • 逻辑卷管理器-LVM(logical volume manager)是linux对磁盘分区进行管理的一种机制,能为已有的文件系统添加额外的空间。
  • 物理卷-PV:在逻辑卷的世界里,磁盘分区称为物理卷PV(physical volume),每个物理卷都映射到磁盘的特定物理分区
  • 实体延伸区块-PE(Physical Extend)是LVM最小的存储单位,一般为4MB大小,它是构成VG的基本单位,PE对于VG来说就如block对于分区来讲,它是存储数据的单元。而pe的大小并不是固定的,而是可以变化的,所以pe决定了LVM的灵活性,即能扩增,也能缩减。
  • 卷组-VG:多个物理卷组成卷组VG(volume group),逻辑卷管理器将VG视为一个物理硬盘,实际上VG可能是由分布在多个物理硬盘上的多个物理分区组成,VG提供了一个创建逻辑分区的平台,而这些逻辑分区包含了文件系统。
  • 逻辑卷-LV:整个结构中最后一层是逻辑卷LV(logical volume),为创建文件系统提供了分区环境,linux视逻辑卷为物理分区。

CHAPTER 3 磁盘管理_第1张图片

注意:

LVM缺点:单个硬盘损坏,会造成多个逻辑卷无法访问
LVM2引入快照,条带化,镜像

3.2 使用LVM流程

CHAPTER 3 磁盘管理_第2张图片

① 通过fdisk创建LVM分区(更换文件系统类型):

  • fdisk /dev/sda1
  • > t(更换文件系统类型 )
  • > 5(Partition number)
  • > 8e (Partition type,Centos7 8e)
  • > p
  • > w
    参考其他文档,在n之后有t选项,笔者的系统没有,所以只能先创建分区,之后更换文件系统类型

② 创建PV

pvcreate /dev/sda1
pvdisplay /dev/sda1 #查看pv

pv相关命令

pvcreate(创建)
pvremove(删除)
pvscan(扫描)
pvs(列表)
pvdisplay(详情)
pvmove(移动数据)

示例:

[root@node1 ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.
[root@node1 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sdc1         lvm2 ---    1.00g  1.00g
[root@node1 ~]# pvdisplay
  "/dev/sdc1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3bi7tx-83U9-rI4i-UyRh-z1wM-YpSF-IzCrpo

[root@node1 ~]# pvscan
  PV /dev/sdc1                      lvm2 [1.00 GiB]
  Total: 3 [29.99 GiB] / in use: 2 [28.99 GiB] / in no VG: 1 [1.00 GiB]

③ 创建VG

vgcreate Vol2 /dev/sda1
vgdisplay Vol2  #查看vg

vg相关命令:

vgcreate(创建)
vgscan(扫描)
vgs(列表)
vgchange	#激活和禁用卷组
vgremove	#删除卷组
vgextend	#扩展卷组
vgreduce	#缩减卷组

示例:

[root@node1 ~]# vgcreate vg01 /dev/sdc1 /dev/sdc2
  Volume group "vg01" successfully created
[root@node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   2   2   0 wz--n- 28.99g <2.00g
  vg01     2   0   0 wz--n-  2.99g  2.99g
[root@node1 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  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               fkjcPk-XXXR-B5bA-YA4n-KMya-UT6w-r32kzc
[root@node1 ~]# vgscan
  Reading volume groups from cache.
  Found volume group "vg01" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2
[root@node1 ~]# vgextend vg01 /dev/sdc3
  Volume group "vg01" successfully extended
[root@node1 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <3.48 GiB
  PE Size               4.00 MiB
  Total PE              890
  Alloc PE / Size       0 / 0
  Free  PE / Size       890 / <3.48 GiB
  VG UUID               fkjcPk-XXXR-B5bA-YA4n-KMya-UT6w-r32kzc

[root@node1 ~]# vgreduce vg01 /dev/sdc3
  Removed "/dev/sdc3" from volume group "vg01"
[root@node1 ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  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               fkjcPk-XXXR-B5bA-YA4n-KMya-UT6w-r32kzc

④ 创建LV

lvcreate -l 100%FREE -n lvtest1 Vol2
lvdisplay Vol2	#查看lv

lv相关命令:

lvcreate option_args position_args
options_args:
	-l 	#指定分配给新逻辑卷的逻辑区段数,或要用的逻辑区段百分比,或用-L指定分配给新逻辑卷的硬盘大小可以为KB,MB,GB为单位,
	-n 	#指定名称

lvextend	#扩容逻辑卷
lvreduce	#缩容逻辑卷
lvremove(删除) 
lvscan(扫描)
lvs(列表)
lvdisplay(详情)

示例:

[root@node1 ~]# lvcreate -L 1G -n lv01 vg01
  Logical volume "lv01" created.
[root@node1 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <25.00g
  swap centos -wi-a-----   2.00g
  lv01 vg01   -wi-a-----   1.00g
[root@node1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                Ue866C-n3VA-uRrN-ha1d-jOob-cICY-EcExZx
  LV Write Access        read/write
  LV Creation host, time node1, 2023-03-07 12:40:11 -0500
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
[root@node1 ~]# lvextend -L +500M  /dev/vg01/lv01
  Size of logical volume vg01/lv01 changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
  Logical volume vg01/lv01 successfully resized.
[root@node1 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <25.00g
  swap centos -wi-a-----   2.00g
  lv01 vg01   -wi-a-----  <1.49g
[root@node1 ~]# lvreduce -L -500M /dev/vg01/lv01
  WARNING: Reducing active logical volume to 1.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
  Size of logical volume vg01/lv01 changed from <1.49 GiB (381 extents) to 1.00 GiB (256 extents).
  Logical volume vg01/lv01 successfully resized.
[root@node1 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <25.00g
  swap centos -wi-a-----   2.00g
  lv01 vg01   -wi-a-----   1.00g

⑤ 创建文件系统

mkfs.ext4 /dev/Vol2/lvtest1

⑥ 挂载

mount /dev/Vol2/lvtest1 /mnt/lvtest2/

3.3 LVM 的 LV 磁盘快照(LVM备份)

什么是 LV 磁盘快照啊?快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。
CHAPTER 3 磁盘管理_第3张图片
底下我们针对传统 LV 磁盘进行快照的建置,大致流程为:

  • 预计被拿来备份的原始 LV 为 /dev/vbirdvg/vbirdlv 这个东西~
  • 使用传统方式快照建置,原始碟为 /dev/vbirdvg/vbirdlv,快照名称为 vbirdsnap1,容量为 vbirdvg 的所有剩余容量

传统快照区的建立

# 1. 先观察 VG 还剩下多少剩余容量
[root@study ~]# vgdisplay vbirdvg
....(其他省略)....
 Total PE 252
 Alloc PE / Size 226 / 3.53 GiB
 Free PE / Size 26 / 416.00 MiB
# 就只有剩下 26 个 PE 了!全部分配给 vbirdsnap1 啰!
# 2. 利用 lvcreate 建立 vbirdlv 的快照区,快照被取名为 vbirdsnap1,且给予 26 个 PE
[root@study ~]# lvcreate -s -l 26 -n vbirdsnap1 /dev/vbirdvg/vbirdlv
 Logical volume "vbirdsnap1" created
# 上述的指令中最重要的是那个 -s 的选项!代表是 snapshot 快照功能之意!
# -n 后面接快照区的装置名称, /dev/.... 则是要被快照的 LV 完整檔名。
# -l 后面则是接使用多少个 PE 来作为这个快照区使用。
[root@study ~]# lvdisplay /dev/vbirdvg/vbirdsnap1
 --- Logical volume ---
 LV Path /dev/vbirdvg/vbirdsnap1
 LV Name vbirdsnap1
 VG Name vbirdvg
 LV UUID I3m3Oc-RIvC-unag-DiiA-iQgI-I3z9-0OaOzR
 LV Write Access read/write
 LV Creation host, time study.centos.vbird, 2015-07-28 19:21:44 +0800
 LV snapshot status active destination for vbirdlv
 LV Status available
 # open 0
 LV Size 2.50 GiB # 原始碟,就是 vbirdlv 的原始容量
 Current LE 160
 COW-table size 416.00 MiB # 这个快照能够纪录的最大容量!
 COW-table LE 26
 Allocated to snapshot 0.00% # 目前已经被用掉的容量!
 Snapshot chunk size 4.00 KiB
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 8192
 Block device 253:11
[root@study ~]# mkdir /srv/snapshot1
[root@study ~]# mount -o nouuid /dev/vbirdvg/vbirdsnap1 /srv/snapshot1
[root@study ~]# df -Th /srv/lvm /srv/snapshot1
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vbirdvg-vbirdlv xfs 2.5G 111M 2.4G 5% /srv/lvm
/dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1
# 有没有看到!这两个咚咚竟然是一模一样喔!我们根本没有动过
# /dev/vbirdvg/vbirdsnap1 对吧!不过这里面会主动记录原 vbirdlv 的内容!

利用快照区复原系统

# 1. 先将原本的 /dev/vbirdvg/vbirdlv 内容作些变更,增增减减一些目录吧!
[root@study ~]# df -Th /srv/lvm /srv/snapshot1
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vbirdvg-vbirdlv xfs 2.5G 111M 2.4G 5% /srv/lvm
/dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1
[root@study ~]# cp -a /usr/share/doc /srv/lvm
[root@study ~]# rm -rf /srv/lvm/log
[root@study ~]# rm -rf /srv/lvm/etc/sysconfig
[root@study ~]# df -Th /srv/lvm /srv/snapshot1
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vbirdvg-vbirdlv xfs 2.5G 146M 2.4G 6% /srv/lvm
/dev/mapper/vbirdvg-vbirdsnap1 xfs 2.5G 111M 2.4G 5% /srv/snapshot1
[root@study ~]# ll /srv/lvm /srv/snapshot1
/srv/lvm:
total 60
drwxr-xr-x. 887 root root 28672 Jul 20 23:03 doc
drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc
/srv/snapshot1:
total 16
drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc
drwxr-xr-x. 16 root root 4096 Jul 28 00:01 log
# 两个目录的内容看起来已经不太一样了喔!检测一下快照 LV 吧!
[root@study ~]# lvdisplay /dev/vbirdvg/vbirdsnap1
 --- Logical volume ---
 LV Path /dev/vbirdvg/vbirdsnap1
....(中间省略)....
 Allocated to snapshot 21.47%
# 鸟哥仅列出最重要的部份!就是全部的容量已经被用掉了 21.4% 啰!
# 2. 利用快照区将原本的 filesystem 备份,我们使用 xfsdump 来处理!
[root@study ~]# xfsdump -l 0 -L lvm1 -M lvm1 -f /home/lvm.dump /srv/snapshot1
# 此时你就会有一个备份资料,亦即是 /home/lvm.dump 了!
# 3. 将 vbirdsnap1 卸除并移除 (因为里面的内容已经备份起来了)
[root@study ~]# umount /srv/snapshot1
[root@study ~]# lvremove /dev/vbirdvg/vbirdsnap1
Do you really want to remove active logical volume "vbirdsnap1"? [y/n]: y
 Logical volume "vbirdsnap1" successfully removed
[root@study ~]# umount /srv/lvm
[root@study ~]# mkfs.xfs -f /dev/vbirdvg/vbirdlv
[root@study ~]# mount /dev/vbirdvg/vbirdlv /srv/lvm
[root@study ~]# xfsrestore -f /home/lvm.dump -L lvm1 /srv/lvm
[root@study ~]# ll /srv/lvm
drwxr-xr-x. 131 root root 8192 Jul 28 00:12 etc
drwxr-xr-x. 16 root root 4096 Jul 28 00:01 log
# 是否与最初的内容相同啊!这就是透过快照来还原的一个简单的方法啰!

4 RAID

RAID简称为独立冗余磁盘阵列(Redundant Arrays of Independent Disks,RAID),把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术,组成磁盘阵列的不同方式称为RAID级别。

常用的RAID级别:RAID0、RAID1、RAID5、RAID6、RAID10等

4.1 RAID分类

1. RAID 0(条带化存储)

RAID0(至少需要两块硬盘):如图所示,把多块物理硬盘通过软件或硬件的方式串联在一起,组成一个大的卷组。连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输速率,但它没有数据冗余

优点:
有效提升硬盘数据的吞吐速度

缺点:
不具备数据备份和错误修复能力,数据是分开存放的。任意一块硬盘发生故障将导致整个系统的数据收到破坏。数据安全性得不到保障

所以RAID 0只适合用于数据安全性不高的场合
CHAPTER 3 磁盘管理_第4张图片

2. RAID 1(镜像存储)

RAID 1 (镜像存储)通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上残生互为备份的数据

RAID 1在数据安全性和可用性非常高,当其中一块盘失效,另一块能自动切换顶替,不需要重组数据,但是相对的在读写效率上会有所损失,而且成本也是最高的。

缺点:
成本昂贵,是磁盘阵列中单位成本最高的一种方式。
实际空间的使用率低,增加了系统计算功能的负载。相当于实际空间使用率只有50%(两块硬盘)。33%的空间利用率(三块硬盘)

优点:
保障了数据的安全性。如备份和错误修复能力。
当其中一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用
CHAPTER 3 磁盘管理_第5张图片

3. RAID 5

RAID5(最少三块硬盘):RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。

RAID5把校验码信息分布到各个磁盘上。例如:总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的奇偶校验信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上),一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验信息去恢复损坏的数据

RAID5最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块同时损坏了,那数据就无法恢复了。

磁盘利用率:(N-1)/N

共N份数据在N盘上循环均衡存储,N块盘同时读写,读写性很高,但由于校验机制,写性能不是很高,可靠性高
CHAPTER 3 磁盘管理_第6张图片

4. RAID 6

RAID 6需要N(N>=4)块盘组成阵列,利用率为(N-2)/N

与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块

两个独立的奇偶系统使不同的算法,及时两块磁盘失效也不影响数据,但是比RAID 5有更大的写损失
CHAPTER 3 磁盘管理_第7张图片

RAID 6

5. RAID 1+0 (先做镜像,再做条带)

N(偶数,N>=4)块盘两两镜像后,在组合成一个RAID 0

N/2磁盘利用率,性能高,可靠性也高
CHAPTER 3 磁盘管理_第8张图片

6. RAID 0+1 (先做条带,再做镜像)

读写性能和RAID 1+0 一样

安全性能比RAID 1+0低
CHAPTER 3 磁盘管理_第9张图片

7. RAID对比

假设有 n 颗磁盘组成的 RAID 设定喔!

项目 RAID0 RAID1 RAID10 RAID5 RAID6
最少磁盘数 2 2 4 3 4
最大容错磁盘数(1) n-1 n/2 1 2
数据安全性(1) 完全没有 最佳 最佳 比RAID5好
理论写入效能(2) n 1 n/2
理论读出效能(2) n n n
可用容量(3) n 1 n/2 n-1 n-2
一般应用 强调效能但数据不重要的环境 资料与备份 服务器、云系统常用 资料与备份 资料与备份

注:因为 RAID5, RAID6 读写都需要经过 parity 的计算器制,因此读/写效能都不会刚好满足于使用的磁盘数量喔!

另外,根据使用的情况不同,一般推荐的磁盘阵列等级也不太一样。以鸟哥为例,在鸟哥的跑空气质量模式之后的输出数据,动辄几百 GB 的单一大文件数据, 这些情况鸟哥会选择放在 RAID6 的数组环境下,这是考虑到数据保全与总容量的应用,因为 RAID 6 的效能已经足以应付模式读入所需的环境。

近年来鸟哥也比较积极在作一些云程序环境的设计,在云环境下,确保每个虚拟机能够快速的反应以及提供数据保全是最重要的部份! 因此效能方面比较弱的 RAID5/RAID6 是不考虑的,总结来说,大概就剩下 RAID10 能够满足云环境的效能需求了。在某些更特别的环境下, 如果搭配 SSD 那才更具有效能上的优势哩!

4.2 创建RAID

1. 准备工作

① 给我们的虚拟机加几块虚拟硬盘
CHAPTER 3 磁盘管理_第10张图片

[root@zabbix-svr-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
sdc               8:32   0    2G  0 disk
sdd               8:48   0    2G  0 disk
sde               8:64   0    2G  0 disk
sr0              11:0    1  973M  0 rom

② 新磁盘分区

[root@zabbix-svr-2 ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x46a761e9.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-4194303, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303):
Using default value 4194303
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@zabbix-svr-2 ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@zabbix-svr-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part
sdc               8:32   0    2G  0 disk
└─sdc1            8:33   0    2G  0 part
sdd               8:48   0    2G  0 disk
└─sdd1            8:49   0    2G  0 part
sde               8:64   0    2G  0 disk
└─sde1            8:65   0    2G  0 part
sr0              11:0    1  973M  0 rom

③ 安装软件
在Linux系统中目前以MD(Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的数据恢复到新的设备上。

mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具

[root@zabbix-svr-2 ~]# yum install mdadm -y
[root@zabbix-svr-2 ~]# mdadm -V
mdadm - v4.1 - 2018-10-01

④ mdadm基本语法

mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[def]1 -x1 /dev/sdg1
-C:表示新建
-v:显示创建过程中的详细信息
-a yes:--auto,表示如果有什么设备文件没有存在的话就自动创建,可省略
-l:指定RAID的级别,-l5 表示创建RAID5
-n:指定使用几块硬盘创建RAID,n3表示使用三块盘
-x:指定使用几块盘做RAID的热备用盘,x1表示保留一块备用

2. 创建RAID 0

mdadm -Cv /dev/md0 -l0 -n2 /dev/sd[bc]1
创建新的RAID /dev/md0,显示创建过程详细信息, RAID级别为0,使用2块盘sdb1,sdc1

[root@zabbix-svr-2 ~]# mdadm -Cv /dev/md0 -l0 -n2 /dev/sd[bc]1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@zabbix-svr-2 ~]# mdadm -D  /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Mar  7 21:53:05 2023
        Raid Level : raid0
        Array Size : 4188160 (3.99 GiB 4.29 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Tue Mar  7 21:53:05 2023
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : zabbix-svr-2:0  (local to host zabbix-svr-2)
              UUID : 6df48c8c:f8403d03:a11178a6:6e3b71f8
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
[root@zabbix-svr-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part  /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm   /
  └─centos-swap 253:1    0    2G  0 lvm   [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part
  └─md0           9:0    0    4G  0 raid0
sdc               8:32   0    2G  0 disk
└─sdc1            8:33   0    2G  0 part
  └─md0           9:0    0    4G  0 raid0
sdd               8:48   0    2G  0 disk
└─sdd1            8:49   0    2G  0 part
sde               8:64   0    2G  0 disk
└─sde1            8:65   0    2G  0 part
sr0              11:0    1  973M  0 rom
[root@zabbix-svr-2 ~]# ll /dev/md0
brw-rw---- 1 root disk 9, 0 Mar  7 21:53 /dev/md0
[root@zabbix-svr-2 ~]# mkdir /mnt/md0
[root@zabbix-svr-2 ~]# mkfs -t ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
262144 inodes, 1047040 blocks
52352 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

[root@zabbix-svr-2 ~]# mount /dev/md0 /mnt/md0
[root@zabbix-svr-2 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.7G   16G  10% /
/dev/sda1               1014M  138M  877M  14% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/md0                 3.9G   16M  3.7G   1% /mnt/md0

3. 创建RAID 1

mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[de]1

[root@zabbix-svr-2 ~]# mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[de]1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 2094080K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@zabbix-svr-2 ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Tue Mar  7 22:00:31 2023
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Tue Mar  7 22:00:41 2023
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : zabbix-svr-2:1  (local to host zabbix-svr-2)
              UUID : a0557b0c:c64b9988:7e4f4c31:22946840
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       65        1      active sync   /dev/sde1

4. 创建RAID 5

此处可以先跳到下文"4.3 删除磁盘阵列",查看如何删除已创建的磁盘阵列

mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[bc]1 -x1 /dev/sdd1

[root@zabbix-svr-2 ~]# mdadm -C -v /dev/md5  -l5 -n2 /dev/sd[bc]1 -x1 /dev/sdd1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 2094080K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@zabbix-svr-2 ~]# mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Tue Mar  7 22:14:54 2023
        Raid Level : raid5
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Mar  7 22:15:04 2023
             State : clean
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : zabbix-svr-2:5  (local to host zabbix-svr-2)
              UUID : e86ea2fa:72e897d1:536562d3:39b16051
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       3       8       33        1      active sync   /dev/sdc1

       2       8       49        -      spare   /dev/sdd1

5. 创建RAID 6

mdadm -C -v /dev/md6 -l6 -n4 /dev/sd[bc]1 -x1 /dev/sd[de]1

[root@zabbix-svr-2 ~]# mdadm -C -v /dev/md6  -l6 -n4 /dev/sd[bcde]1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 2094080K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md6 started.
[root@zabbix-svr-2 ~]# mdadm -D /dev/md6
/dev/md6:
           Version : 1.2
     Creation Time : Tue Mar  7 22:21:19 2023
        Raid Level : raid6
        Array Size : 4188160 (3.99 GiB 4.29 GB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Mar  7 22:21:29 2023
             State : clean, resyncing
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

     Resync Status : 96% complete

              Name : zabbix-svr-2:6  (local to host zabbix-svr-2)
              UUID : 757e5863:93c1d500:21a7b9a4:125010b5
            Events : 15

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

6. 创建RAID10

先创建两个RAID 1

mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[bc]1    ##创建RAID 1 md0
mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[de]1    ##创建RAID 1 md1

再组合2个RAID 1为RAID 0

mdadm -Cv /dev/md10 -l0 -n2 /dev/md0  /dev/md1 ##将RAID md0和md1组合创建RAID 10

4.3 删除磁盘阵列

  1. 查看RAID磁盘阵列信息,确认一下要关闭哪个
[root@zabbix-svr-2 ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sde1[1] sdd1[0]
      2094080 blocks super 1.2 [2/2] [UU]

md0 : active raid0 sdc1[1] sdb1[0]
      4188160 blocks super 1.2 512k chunks

unused devices: <none>
  1. 卸载md0这个挂载点
    一定要先解挂载不然会报错
[root@zabbix-svr-2 ~]# umount /dev/md0
  1. 停止md0阵列
[root@zabbix-svr-2 ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
  1. 清除成员磁盘当中阵列的超级块信息,这一步很重要!
[root@zabbix-svr-2 ~]#     mdadm --zero-superblock /dev/sdb1 /dev/sdc1
[root@zabbix-svr-2 ~]#     mdadm --zero-superblock /dev/sdb1 /dev/sdc1
mdadm: Unrecognised md component device - /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdc1

执行一遍之后可以在执行一遍, 这里意思是未识别组件,说明我们已经将它删除了

  1. 如果在/etc/fstab里写了永久挂载信息需要删除
    vim /etc/fstab  
  1. 删除或注释/etc/mdadm.conf对应的RAID信息
    vim /etc/mdadm.conf  ##进入配置进行修改

如果没有/etc/mdadm.conf跳过即可,有就将对应的RAID文件删除

  1. 再检查一遍
[root@zabbix-svr-2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part
sdc               8:32   0    2G  0 disk
└─sdc1            8:33   0    2G  0 part
sdd               8:48   0    2G  0 disk
└─sdd1            8:49   0    2G  0 part
sde               8:64   0    2G  0 disk
└─sde1            8:65   0    2G  0 part
sr0              11:0    1  973M  0 rom

没有前面创建的md0,md1就可以了

5 磁盘检测及修复(fsck)

计算机难免会由于某些系统因素或人为误操作(突然断电)出现系统异常,这种情况下非常容易造成文件系统的崩溃,严重时甚至会造成硬件损坏。这也是我们一直在强调的“服务器一定要先关闭服务再进行重启”的原因所在。

那么,如果真出现了文件系统损坏的情况,有办法修复吗?可以的,对于一些小问题,使用 fsck 命令就可以很好地解决。

fsck 命令用于检查文件系统并尝试修复出现的错误。该命令的基本格式如下:

SYNOPSIS
       fsck [-lrsAVRTMNP] [-C [fd]] [-t fstype] [filesystem...]  [--] [fs-specific-options]

参数

  • -a 自动修复文件系统,不询问任何问题。
  • -A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
  • -N 不执行指令,仅列出实际执行会进行的动作。
  • -P 当搭配"-A"参数使用时,则会同时检查所有的文件系统。
  • -r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
  • -R 当搭配"-A"参数使用时,则会略过/根目录的文件系统不予检查。
  • -s 依序执行检查作业,而非同时执行。
  • -t<文件系统类型> 指定要检查的文件系统类型。
  • -T 执行fsck指令时,不显示标题信息。
  • -V 显示指令执行过程。
  • -C 显示检查分区的进度条。

注意事项:

  • 此命令通常只有身为 root 用户且文件系统出现问题时才会使用,否则,在正常状况下使用 fsck 命令,很可能损坏系统。另外,如果你怀疑已经格式化成功的硬盘有问题,也可以使用此命令来进行检查。
  • 使用 fsck 检查并修复文件系统是存在风险的,特别是当硬盘错误非常严重的时候,因此,当一个受损文件系统中包含了非常有价值的数据时,务必首先进行备份!
  • 在使用 fsck 命令修改某文件系统时,这个文件系统对应的磁盘分区一定要处于卸载状态,磁盘分区在挂载状态下进行修复是非常不安全的,数据可能会遭到破坏,也有可能会损坏磁盘。

fsck 命令在执行时,如果发现存在没有文件系统依赖的文件或目录,就会提示用户是否把它们找回来,因为这些没有文件系统依赖的文件或目录对用户来说是看不到的,换句话说,用户根本无法使用,这通常是由文件系统内部结构损坏导致的。如果用户同意找回(输入 y),fsck 命令就会把这些孤立的文件或目录放到 lost+found 目录中,并用这些文件自己对应的 inode 号来命名,以便用户查找自己丢失的文件。

因此,当用户在利用 fsck 命令修复磁盘分区以后,如果发现分区中有文件丢失,就可以到对应的 lost+found 目录中去查找,但由于无法通过文件名称分辨各个文件,这里可以利用 file 命令查看文件系统类型,进而判断出哪个是我们需要的文件。

示例:

  1. 例如,出现contains a file system with errors, check forced磁盘问题
fsck.ext4 -C0 /dev/sda1

建议根据系统提示进行修复

  1. 采用互动的修复模式
[root@localhost ~]#fsck -r /dev/sdb1

你可能感兴趣的:(#,linux,文件系统管理,linux,运维,服务器)