Skip to content

Commit

Permalink
ops/storage: add contents
Browse files Browse the repository at this point in the history
- 磁盘类型简介
- "磁盘阵列不是备份"
- RAID 思考题
- Linux RAID intro
  • Loading branch information
taoky committed Feb 9, 2024
1 parent 0b17b65 commit 8c72c92
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
Binary file added docs/ops/storage/images/raid-is-not-backup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 38 additions & 2 deletions docs/ops/storage/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,23 @@ icon: material/harddisk

## 磁盘 {#disks}

### 磁盘类型简介 {#disk-type}

在服务器上最常见的为机械硬盘(HDD)和固态硬盘(SSD)。机械硬盘使用磁盘片和机械臂进行数据读写,固态硬盘使用闪存芯片进行数据读写。
除此以外,还可能有一些特殊的存储设备,例如磁带、Intel Optane 等,这里不做详细介绍。

一般来讲,单块机械硬盘的性能取决于 RPM(转速)。在估算时可以认为顺序读写带宽在 100 MB/s 左右,4K 随机读写带宽在 1 MB/s 左右,IOPS[^1] 在 100 左右。
而单块固态硬盘的顺序读写带宽在 500 MB/s (SATA) 或 1500 MB/s (NVMe) 以上,4K 随机读写带宽在 50 MB/s 左右,IOPS 在 10000 左右。
对于企业级硬盘,这些性能指标可能会更高。

硬盘的使用寿命的一项重要参数是 MTBF(Mean Time Between Failures,平均故障间隔时间)。
由于机械硬盘包含运动的部件,机械硬盘的 MTBF 一般会比固态硬盘低,大致在 10 万小时到 100 万小时。
尽管看起来很长,但是由于实际使用中的振动、温度、读写次数等因素,硬盘的实际寿命可能会远远低于 MTBF。
而对于 SSD 来说,一项更加重要的参数是 TBW(Total Bytes Written,总写入字节数),它表示了闪存芯片可以承受的总写入量,一般在几十到数千 TB;
读取操作对 SSD 的损耗可以忽略不计。

对具体的硬盘型号,建议阅读厂商的文档(例如 datasheet 等),以获取准确的信息。

### 磁盘规格与尺寸 {#disk-size}

关于磁盘规格,在服务器安装时我们主要关心以下几点:
Expand Down Expand Up @@ -97,6 +114,14 @@ RAID 10, 50, 60

: 将不同级别的 RAID 组合在一起,兼顾性能和冗余,各取所长,对于 10 块盘以上的阵列是更加常见的选择。例如 RAID 10 = RAID 1 + RAID 0,通常将每两块盘组成 RAID 1,再将这些 RAID 1 的组合拼成一个大 RAID 0。

!!! danger "磁盘阵列不是备份"

RAID 不是备份,它可以实现在某块磁盘故障时保证系统继续运行,但是不能在数据误删除、自然灾害、人为破坏等情况下保护数据。

[![磁盘阵列不是备份](images/raid-is-not-backup.png)](https://mirrors.tuna.tsinghua.edu.cn/tuna/tunight/2023-03-26-disk-array/slides.pdf)

*图片来自[金枪鱼之夜:实验物理垃圾佬之乐——PB 级磁盘阵列演进](https://tuna.moe/event/2023/disk-array/)*

### RAID 等级比较

| 等级 | 容量 | 冗余 | 读写性能 | 适用场景 |
Expand All @@ -110,6 +135,13 @@ RAID 10, 50, 60

RAID 4 和 RAID 50 在这里不作讨论,因为它们没人用。

!!! question "思考题"

1. 为什么 RAID 5 和 RAID 6 的重建期间性能会很差?
2. 为什么将大量的磁盘组合成单个 RAID 6 不是一个好主意?
3. 为什么对大容量磁盘使用 RAID 5 是一个坏主意?
4. 为什么说 RAID 5/6 有很高的写惩罚(Write Penalty)?

### RAID 实现方式

RAID 可以在硬件层面实现,也可以在操作系统层面通过软件实现。
Expand All @@ -126,6 +158,10 @@ Windows:
- 较早的“动态磁盘”功能支持 RAID 0、1、5 等级别,并且是在分区层面实现的,因此同一个硬盘组上可以同时存在多个采用不同 RAID 级别的卷(文件系统)
- 较新的 Windows 开始支持 Storage Spaces,可以实现更多 RAID 级别,以及“镜像加速”、“自动热迁移”等功能,但是比动态磁盘更加难用,重建也更复杂

macOS:
Linux:

- mdadm 是 Linux 上最常见的软件 RAID 实现方式之一
- Linux 常用的逻辑卷管理工具 LVM 也支持 RAID 功能
- 一部分文件系统,如 ZFS 和 Btrfs,也支持 RAID 功能

- 很遗憾超出了本文的范围,
[^1]: IOPS 为每秒的 I/O 操作数,可以简单认为是命令操作延迟的倒数。

0 comments on commit 8c72c92

Please sign in to comment.