存储基础
Raid 相关
-
什么是Raid RAID ( Redundant Array of Independent Disks )就是冗余磁盘阵列,把多个硬磁盘驱动器按照一定的要求使整个磁盘阵列由阵列控制器管理组成一个储存系统。最开始研制目的是为了利用多个廉价的小磁盘来替代昂贵的大磁盘,以此来降低成本。而随着硬盘技术的发展,如今的磁盘阵列采用了冗余信息的方式,使得其具有数据保护的功能
-
Raid 有什么作用
- 提供容错功能
普通的磁盘驱动器是无法提供容错功能的,而磁盘阵列可以通过数据校验提供容错功能,服务器会将数据写入多个磁盘,如果某个磁盘发生故障时,此时仍能保证信息的可用性,重要数据不会丢失,也不会耽误服务器的正常运转
- 提高传输速率
磁盘阵列将多个磁盘组成一个阵列,当做一个单一的磁盘使用,把数据已分段的形式存储到不同的硬盘之中,发生数据存取变动时,阵列中的相关磁盘一起工作,这就可以大幅的降低数据存储的时间,同时还能拥有更佳的空间和使用率
- 提供容错功能
-
主要的 RAID 组合
- RAID0 :至少一块硬盘
- RAID1 :至少 2 块硬盘
- RAID5 :至少 3 块硬盘
- RAID6 :至少 4 块硬盘
- RAID10 :至少 4 块硬盘:先组Raid 1 ,再组 Raid 0
- RAID10 是先将数据进行镜像操作,然后再对数据进行分组,RAID1 在这里就是一个冗余的备份阵列,而RAID0则负责数据的读写阵列;至少要四块盘,两两组合做 RAID1,然后做 RAID0,RAID10 对存储容量的利用率和RAID1一样低,只有 50%;Raid10 方案造成了 50% 的磁盘浪费,但是它提供了 200% 的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一 RAID1 中,就能保证数据安全性,RAID10 能提供比 RAID5 更好的性能。
-
RAID 实现方式
- 硬 RAID
硬 RAID 拥有自己的 RAID 控制处理与 I/O 处理芯片,甚至还有阵列缓冲,对 CPU 的占用率和整体性能是三类实现中最优的,但实现成本也最高的。硬 RAID 通常都支持热交换技术,在系统运行下更换故障磁盘。 硬 RAID 包含 RAID 卡和主板上集成的 RAID 芯片, 服务器平台多采用 RAID 卡。 RAID 卡由 RAID 核心处理芯片( RAID 卡上的 CPU )、端口、缓存和电池 4 部分组成。其中,端口是指 RAID 卡支持的磁盘接口类型,如 IDE/ATA 、 SCSI 、 SATA 、 SAS 、 FC 等接口。
- 软 RAID
软 RAID 没有专用的控制芯片和 I/O 芯片,完全由操作系统和 CPU 来实现所的 RAID 的功能。 现代操作系统基本上都提供软 RAID 支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。 目前,操作系统支持的最常见的 RAID 等级有 RAID0 、 RAID1 、 RAID10 、 RAID01 和 RAID5 等。 比如, Windows Server 支持 RAID0 、 RAID1 和 RAID5 三种等级, Linux 支持 RAID0 、 RAID1 、 RAID4 、 RAID5 、 RAID6 等, Mac OS X Server 、 FreeBSD 、 NetBSD 、 OpenBSD 、 Solaris 等操作系统也都支持相应的 RAID 等级。
- 硬 RAID
-
RAID 应用选择
- 可用性
- I/O 性能
- 成本
主流 RAID 等级对比
RAID 等级 RAID0 RAID1 RAID3 RAID5 RAID6 RAID10 别名 条带 镜像 专用奇偶校验条带 分布奇偶校验条带 双重奇偶校验条带 镜像加条带 容错性 无 有 有 有 有 有 冗余类型 无 有 有 有 有 有 热备份选择 无 有 有 有 有 有 读性能 高 低 高 高 高 高 随机写性能 高 低 低 一般 低 一般 连续写性能 高 低 低 低 低 一般 需要磁盘数 n≥1 2n (n≥1) n≥3 n≥3 n≥4 2n(n≥2)≥4 可用容量 全部 50% (n-1)/n (n-1)/n (n-2)/n 50%
LVM 管理
- 什么是 LVM
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
注意:LVM 只是一个管理工具或者机制,它并不是文件系统。
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
- 硬盘支持 LVM
## 可以同时指定多块硬盘 ## 注意此操作会清空操作的硬盘原有数据 pvcreate /dev/sdb /dev/sdc
- 创建卷组并加入硬盘
## cdata 是指定的卷组名,如果不存在则会自动创建 ## /dev/sdb /dev/sdc 是刚刚 pvcreate 操作的两块硬盘 vgcreate cdata /dev/sdb /dev/sdc
- 从卷组 cdata 中创建大小为 10G 的逻辑卷
## vo 是指定的逻辑卷名称 ## 10G 是指定大小 lvcreate -n vo -L 10G cdata
- 查看逻辑卷
## 不出意外的话,/dev/cdata/vo 是存在的 ls /dev/cdata/ # vo ## 当然也可以用 lvdisplay 查看 lvdisplay /dev/cdata/vo # --- Logical volume --- # LV Path /dev/cdata/vo # LV Name vo # VG Name cdata # LV UUID bmtZQS-xgCb-KNgz-MT5Y-odc8-6Aac-NOzXhW # LV Write Access read/write # LV Creation host, time rockylinux, 2023-08-28 12:17:48 +0800 # LV Status available # # open 0 # LV Size 10.00 GiB # Current LE 2560 # Segments 2 # Allocation inherit # Read ahead sectors auto # - currently set to 8192 # Block device 253:2
- 格式化 vo
mkfs.ext4 /dev/cdata/vo
- 挂载 vo
mount /dev/cdata/vo /mnt/data df -h | grep data # /dev/mapper/cdata-vo 9.8G 24K 9.3G 1% /mnt/data
- 缩容
## 取消挂载 umount /mnt/data ## 检查文件完整性 e2fsck -f /dev/cdata/vo # e2fsck 1.45.6 (20-Mar-2020) # Pass 1: Checking inodes, blocks, and sizes # Pass 2: Checking directory structure # Pass 3: Checking directory connectivity # Pass 4: Checking reference counts # Pass 5: Checking group summary information # /dev/cdata/vo: 12/655360 files (0.0% non-contiguous), 66754/2621440 blocks ## 通知内核将 vo 缩小为 5G resize2fs /dev/cdata/vo 5G # resize2fs 1.45.6 (20-Mar-2020) # Resizing the filesystem on /dev/cdata/vo to 1310720 (4k) blocks. # The filesystem on /dev/cdata/vo is now 1310720 (4k) blocks long. ## 将逻辑卷 vo 修改为 5G lvreduce -L 5G /dev/cdata/vo # WARNING: Reducing active logical volume to 5.00 GiB. # THIS MAY DESTROY YOUR DATA (filesystem etc.) # Do you really want to reduce cdata/vo? [y/n]: y # Size of logical volume cdata/vo changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents). # Logical volume cdata/vo successfully resized. ## 重新挂载 mount /dev/cdata/vo /mnt/data df -h | grep data # /dev/mapper/cdata-vo 4.9G 28K 4.6G 1% /mnt/data ## 查看文件有没有丢失 cat /mnt/data/time.txt # 2023-08-28 12:35:26
- 扩容
- 按需扩容(
原来的vg 不改变
)lvextend -L 15G /dev/cdata/vo # Size of logical volume cdata/vo changed from 5.00 GiB (1280 extents) to 15.00 GiB (3840 extents). # Logical volume cdata/vo successfully resized. ## 检查文件完整性 e2fsck -f /dev/cdata/vo ## 同步内核 resize2fs /dev/cdata/vo ## 挂载并检查数据 mount /dev/cdata/vo /mnt/data/ df -h | grep data # /dev/mapper/cdata-vo 15G 28K 14G 1% /mnt/data cat /mnt/data/time.txt # 2023-08-28 12:35:26
- 扩容剩余空间
lvextend -l +100%FREE /dev/cdata/vo
- 添加新硬盘
## 查看硬盘情况 lsblk ## 对新硬盘分区,操作与正常分区无区别 ## 分完区后 需要修改分区类型 t >>> 8e fdisk /dev/sdd ## 添加 lvm 支持 pvcreate /dev/sdd1 ## 加入卷组 cdata vgextend cdata /dev/sdd1
- 按需扩容(