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)
- 6. 挂载相关配置文件
- 6.1 /etc/fstab
- 6.2 /etc/mtab
- 6.3 /proc/mounts
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): l0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris1 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 Syrinx5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS accessa OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/Ob W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStorc W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fse W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPTf 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 setCommand (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, 884736Allocating 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视逻辑卷为物理分区。

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

① 通过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/sdc1Physical volume "/dev/sdc1" successfully created.
[root@node1 ~]# pvsPV 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/sdc1VG NamePV Size 1.00 GiBAllocatable NOPE Size 0Total PE 0Free PE 0Allocated PE 0PV UUID 3bi7tx-83U9-rI4i-UyRh-z1wM-YpSF-IzCrpo[root@node1 ~]# pvscanPV /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/sdc2Volume group "vg01" successfully created
[root@node1 ~]# vgsVG #PV #LV #SN Attr VSize VFreecentos 2 2 0 wz--n- 28.99g <2.00gvg01 2 0 0 wz--n- 2.99g 2.99g
[root@node1 ~]# vgdisplay--- Volume group ---VG Name vg01System IDFormat lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 2.99 GiBPE Size 4.00 MiBTotal PE 766Alloc PE / Size 0 / 0Free PE / Size 766 / 2.99 GiBVG UUID fkjcPk-XXXR-B5bA-YA4n-KMya-UT6w-r32kzc
[root@node1 ~]# vgscanReading volume groups from cache.Found volume group "vg01" using metadata type lvm2Found volume group "centos" using metadata type lvm2
[root@node1 ~]# vgextend vg01 /dev/sdc3Volume group "vg01" successfully extended
[root@node1 ~]# vgdisplay--- Volume group ---VG Name vg01System IDFormat lvm2Metadata Areas 3Metadata Sequence No 2VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 3Act PV 3VG Size <3.48 GiBPE Size 4.00 MiBTotal PE 890Alloc PE / Size 0 / 0Free PE / Size 890 / <3.48 GiBVG UUID fkjcPk-XXXR-B5bA-YA4n-KMya-UT6w-r32kzc[root@node1 ~]# vgreduce vg01 /dev/sdc3Removed "/dev/sdc3" from volume group "vg01"
[root@node1 ~]# vgdisplay--- Volume group ---VG Name vg01System IDFormat lvm2Metadata Areas 2Metadata Sequence No 3VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 2.99 GiBPE Size 4.00 MiBTotal PE 766Alloc PE / Size 0 / 0Free PE / Size 766 / 2.99 GiBVG 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 vg01Logical volume "lv01" created.
[root@node1 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertroot centos -wi-ao---- <25.00gswap centos -wi-a----- 2.00glv01 vg01 -wi-a----- 1.00g
[root@node1 ~]# lvdisplay--- Logical volume ---LV Path /dev/vg01/lv01LV Name lv01VG Name vg01LV UUID Ue866C-n3VA-uRrN-ha1d-jOob-cICY-EcExZxLV Write Access read/writeLV Creation host, time node1, 2023-03-07 12:40:11 -0500LV Status available# open 0LV Size 1.00 GiBCurrent LE 256Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2
[root@node1 ~]# lvextend -L +500M /dev/vg01/lv01Size 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 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertroot centos -wi-ao---- <25.00gswap centos -wi-a----- 2.00glv01 vg01 -wi-a----- <1.49g
[root@node1 ~]# lvreduce -L -500M /dev/vg01/lv01WARNING: 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]: ySize 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 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertroot centos -wi-ao---- <25.00gswap centos -wi-a----- 2.00glv01 vg01 -wi-a----- 1.00g
⑤ 创建文件系统
mkfs.ext4 /dev/Vol2/lvtest1
⑥ 挂载
mount /dev/Vol2/lvtest1 /mnt/lvtest2/
3.3 LVM 的 LV 磁盘快照(LVM备份)
什么是 LV 磁盘快照啊?快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。

底下我们针对传统 LV 磁盘进行快照的建置,大致流程为:
- 预计被拿来备份的原始 LV 为 /dev/vbirdvg/vbirdlv 这个东西~
- 使用传统方式快照建置,原始碟为 /dev/vbirdvg/vbirdlv,快照名称为 vbirdsnap1,容量为 vbirdvg 的所有剩余容量
传统快照区的建立
# 1. 先观察 VG 还剩下多少剩余容量
[root@study ~]# vgdisplay vbirdvg
....(其他省略)....Total PE 252Alloc PE / Size 226 / 3.53 GiBFree 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/vbirdlvLogical volume "vbirdsnap1" created
# 上述的指令中最重要的是那个 -s 的选项!代表是 snapshot 快照功能之意!
# -n 后面接快照区的装置名称, /dev/.... 则是要被快照的 LV 完整檔名。
# -l 后面则是接使用多少个 PE 来作为这个快照区使用。
[root@study ~]# lvdisplay /dev/vbirdvg/vbirdsnap1--- Logical volume ---LV Path /dev/vbirdvg/vbirdsnap1LV Name vbirdsnap1VG Name vbirdvgLV UUID I3m3Oc-RIvC-unag-DiiA-iQgI-I3z9-0OaOzRLV Write Access read/writeLV Creation host, time study.centos.vbird, 2015-07-28 19:21:44 +0800LV snapshot status active destination for vbirdlvLV Status available# open 0LV Size 2.50 GiB # 原始碟,就是 vbirdlv 的原始容量Current LE 160COW-table size 416.00 MiB # 这个快照能够纪录的最大容量!COW-table LE 26Allocated to snapshot 0.00% # 目前已经被用掉的容量!Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block 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]: yLogical 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只适合用于数据安全性不高的场合

2. RAID 1(镜像存储)
RAID 1 (镜像存储)通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上残生互为备份的数据
RAID 1在数据安全性和可用性非常高,当其中一块盘失效,另一块能自动切换顶替,不需要重组数据,但是相对的在读写效率上会有所损失,而且成本也是最高的。
缺点:
成本昂贵,是磁盘阵列中单位成本最高的一种方式。
实际空间的使用率低,增加了系统计算功能的负载。相当于实际空间使用率只有50%(两块硬盘)。33%的空间利用率(三块硬盘)
优点:
保障了数据的安全性。如备份和错误修复能力。
当其中一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用

3. RAID 5
RAID5(最少三块硬盘):RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。
RAID5把校验码信息分布到各个磁盘上。例如:总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的奇偶校验信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上),一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验信息去恢复损坏的数据
RAID5最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块同时损坏了,那数据就无法恢复了。
磁盘利用率:(N-1)/N
共N份数据在N盘上循环均衡存储,N块盘同时读写,读写性很高,但由于校验机制,写性能不是很高,可靠性高

4. RAID 6
RAID 6需要N(N>=4)块盘组成阵列,利用率为(N-2)/N
与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块
两个独立的奇偶系统使不同的算法,及时两块磁盘失效也不影响数据,但是比RAID 5有更大的写损失

RAID 6
5. RAID 1+0 (先做镜像,再做条带)
N(偶数,N>=4)块盘两两镜像后,在组合成一个RAID 0
N/2磁盘利用率,性能高,可靠性也高

6. RAID 0+1 (先做条带,再做镜像)
读写性能和RAID 1+0 一样
安全性能比RAID 1+0低

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. 准备工作
① 给我们的虚拟机加几块虚拟硬盘

[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 setCommand (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.2Creation Time : Tue Mar 7 21:53:05 2023Raid Level : raid0Array Size : 4188160 (3.99 GiB 4.29 GB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistentUpdate Time : Tue Mar 7 21:53:05 2023State : cleanActive Devices : 2Working Devices : 2Failed Devices : 0Spare Devices : 0Chunk Size : 512KConsistency Policy : noneName : zabbix-svr-2:0 (local to host zabbix-svr-2)UUID : 6df48c8c:f8403d03:a11178a6:6e3b71f8Events : 0Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb11 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, 884736Allocating 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 andmay not be suitable as a boot device. If you plan tostore '/boot' on this device please ensure thatyour 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.2Creation Time : Tue Mar 7 22:00:31 2023Raid Level : raid1Array Size : 2094080 (2045.00 MiB 2144.34 MB)Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistentUpdate Time : Tue Mar 7 22:00:41 2023State : cleanActive Devices : 2Working Devices : 2Failed Devices : 0Spare Devices : 0Consistency Policy : resyncName : zabbix-svr-2:1 (local to host zabbix-svr-2)UUID : a0557b0c:c64b9988:7e4f4c31:22946840Events : 17Number Major Minor RaidDevice State0 8 49 0 active sync /dev/sdd11 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.2Creation Time : Tue Mar 7 22:14:54 2023Raid Level : raid5Array Size : 2094080 (2045.00 MiB 2144.34 MB)Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)Raid Devices : 2Total Devices : 3Persistence : Superblock is persistentUpdate Time : Tue Mar 7 22:15:04 2023State : cleanActive Devices : 2Working Devices : 3Failed Devices : 0Spare Devices : 1Layout : left-symmetricChunk Size : 512KConsistency Policy : resyncName : zabbix-svr-2:5 (local to host zabbix-svr-2)UUID : e86ea2fa:72e897d1:536562d3:39b16051Events : 18Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb13 8 33 1 active sync /dev/sdc12 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.2Creation Time : Tue Mar 7 22:21:19 2023Raid Level : raid6Array Size : 4188160 (3.99 GiB 4.29 GB)Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Tue Mar 7 22:21:29 2023State : clean, resyncingActive Devices : 4Working Devices : 4Failed Devices : 0Spare Devices : 0Layout : left-symmetricChunk Size : 512KConsistency Policy : resyncResync Status : 96% completeName : zabbix-svr-2:6 (local to host zabbix-svr-2)UUID : 757e5863:93c1d500:21a7b9a4:125010b5Events : 15Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb11 8 33 1 active sync /dev/sdc12 8 49 2 active sync /dev/sdd13 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 删除磁盘阵列
- 查看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 chunksunused devices: <none>
- 卸载md0这个挂载点
一定要先解挂载不然会报错
[root@zabbix-svr-2 ~]# umount /dev/md0
- 停止md0阵列
[root@zabbix-svr-2 ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
- 清除成员磁盘当中阵列的超级块信息,这一步很重要!
[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
执行一遍之后可以在执行一遍, 这里意思是未识别组件,说明我们已经将它删除了
- 如果在/etc/fstab里写了永久挂载信息需要删除
vim /etc/fstab
- 删除或注释/etc/mdadm.conf对应的RAID信息
vim /etc/mdadm.conf ##进入配置进行修改
如果没有/etc/mdadm.conf跳过即可,有就将对应的RAID文件删除
- 再检查一遍
[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 命令用于检查文件系统并尝试修复出现的错误。该命令的基本格式如下:
SYNOPSISfsck [-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 命令查看文件系统类型,进而判断出哪个是我们需要的文件。
示例:
- 例如,出现
contains a file system with errors, check forced磁盘问题
fsck.ext4 -C0 /dev/sda1
建议根据系统提示进行修复
- 采用互动的修复模式
[root@localhost ~]#fsck -r /dev/sdb1
6. 挂载相关配置文件
6.1 /etc/fstab
/etc/fstab是系统启动时的配置文件,在该文件内记录的磁盘在系统启动时会自动挂载。当我们用mount命令进行挂载时,会将所有的选项与参数信息写入到该文件内。
使用cat命令查看该文件时,每一行代表一个磁盘分区信息,信息被分为6大部分:
[root@outsider1 ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Fri Jul 14 05:27:30 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
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=bcb76c67-cba1-4b22-86b9-1ac3f7d37847 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
每一行记录表示一个已经挂载的文件系统。该文件格式如下:
[设备/UUID等] [挂载点] [文件系统类型] [文件系统参数] [dump] [fsck]
-
第一部分:可以使用磁盘设备的 [ 文件名/UUID/Label name ]
- 文件系统或者磁盘的设备文件名,例如:/dev/sda1
- 文件系统的UUID,例如UUID=XXX
- 文件系统的LABEL名称,例如LABEL=XXX
-
第二部分:挂载点(mount point)
- 挂载点一定是个目录。(注意:如果是内存交换分区的话,因为内存交换分区无挂载点,此处填写swap)
-
第三部分:磁盘分区的文件系统类型
注意:在手动挂载时可以让系统自动检测挂载。但是在这个文件当中,我们必须手动写入文件系统才行,例如:xfs、ext4、vfat、reiserfs、nfs等 -
第四部分:文件系统参数
| 参数 | 说明 |
|---|---|
| async(默认),sync | 此文件系统是否使用同步写入的内存机制 |
| atime,noatime | 文件系统是否会修改文件的读取时间。为了性能,某些时刻会使用noatime |
| ro,rw | 文件系统是只读(ro)还是可读写(rw) |
| auto(默认),noauto | 当执行mount -a时,此文件系统是否会被主动测试挂载 |
| dev,nodev | 文件系统是否可以建立设备文件 |
| suid,nosuid | 文件系统是否可以含有suid/sgid的文件格式 |
| exec,noexec | 文件系统是否可以拥有可执行的二进制文件 |
| user,nouser | 是否允许文件系统让任何使用者都可以执行mount命令。一般来说,mount仅有root可以进行 |
defaults | 默认值为:rw、suid、dev、exec、auto、nouser、async |
| remount | 重新挂载。这在系统出错,或重新更新参数时很有用 |
| codepage=数值 | 挂载USB移动磁盘时,指定挂载的文件系统所使用的语系。中文语系为:950 |
| iocharset=编码名 | 挂载USB移动磁盘时,指定移动磁盘的编码。一般有:utf8、Big5 |
| loop | 进行loop设备挂载时会使用到 |
- 第五部分:能否使用dump备份命令作用
- dump是一个用来做为备份的命令,不过现在有太多的备份方案,这个地方直接输入0就好了
- 第六部分:是否以fsck检验扇区
- 早期系统启动的过程中,会有一段时间去校验本机的文件系统是否完整(clean),主要通过fsck去完成
- 不过xfs文件系统会自己进行校验,所以xfs文件系统不需要进行这个操作,设置为0
注意事项
① /etc/fstab是系统启动时的配置文件,实际文件系统的挂载时记录到/etc/mtab与/proc/mounts这两个文件中(每次我们在修改/etc/fstab文件的挂载信息时,同时也会修改这两个文件)
② 承上,如果我们在/etc/fstab输入的数据错误,导致无法磁盘顺利启动,而进入单人维护模式,这时候根目录就变为只读的状态,当然此时也无法修改/etc/mtab与/proc/mounts这两个文件。此时就可以用下面这一行命令
mount -n -o remount,rw /
6.2 /etc/mtab
/etc/mtab是一个系统文件,它记录了当前挂载的文件系统信息,包括挂载点、设备、文件系统类型和挂载参数等。
如:
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=865792k,nr_inodes=216448,mode=755,inode64 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev,inode64 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,size=358132k,nr_inodes=819200,mode=755,inode64 0 0
cgroup2 /sys/fs/cgroup cgroup2 rw,seclabel,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot 0 0
pstore /sys/fs/pstore pstore rw,seclabel,nosuid,nodev,noexec,relatime 0 0
none /sys/fs/bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700 0 0
/dev/sda2 / xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
...
每一行记录表示一个已经挂载的文件系统。该文件格式如下:
<设备> <挂载点> <文件系统类型> <挂载参数> 0 0
具体说明如下:
- 设备:被挂载的设备名称或UUID。
- 挂载点:设备被挂载到的目录。
- 文件系统类型:被挂载的文件系统类型,例如ext4, ntfs等。
- 挂载参数:指定了该文件系统的一些选项,比如读写权限、缓存策略等。
0 0: 表示不进行dump(备份)操作(第五个字段)和不进行fsck操作(第六个字段)。
mtab文件记录着当前已挂载的文件系统以及它们的初始化选项。mtab的内容和fstab中的类似,主要的区别在于后者(fstab)列出了系统启动时应该挂载的所有文件系统,而前者(mtab)则列出了当前已挂载的信息(包含不在 fstab 文件中、手动挂载的文件系统)。因此,mtab的格式通常和fstab很相像。大多数情况下,可以在fstab中直接使用mtab的配置内容。该文件的路径通常为 /etc/mtab。
6.3 /proc/mounts
这个文件是/proc/self/mounts的软链接,/proc下面的文件都是保存在内存中的,是内核自动生成的。所以/proc/mounts比/etc/mtab文件能更加真实的反映当前mount的情况。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
