HomeLab

欢迎你来读这篇博客,这篇博客主要是关于HomeLab,自建服务器
其中包括了关于我的见解和收集的知识分享。

序言

在Linux的服务器领域,我们能接触的到硬件其实挺多的,但是在这些硬件我们根据我们的需要去使用的时候,一般会涉及到以下几个概念,IPMI,BIOS,RAID。

正文

IPMI

IPMI(Intelligent Platform Management
Interface,智能平台管理接口)是一种标准化的硬件管理接口,旨在提供对服务器系统硬件的远程管理和监控功能。它允许系统管理员通过网络远程管理服务器,即使在操作系统不可用的情况下也能进行管理和监控。

主要功能和特点:

远程电源管理:

IPMI 允许管理员通过网络远程控制服务器的电源状态,包括打开、关闭、重启等操作。即使操作系统崩溃或不可访问,管理员也可以通过
IPMI 进行电源控制。

硬件监控:

IPMI 提供了对服务器硬件的实时监控能力,如 CPU 温度、风扇转速、电压、电流等各种传感器的数据。这些数据可以帮助管理员进行性能监控、故障诊断和预测性维护。

远程控制台:

IPMI 支持远程 KVM(Keyboard-Video-Mouse)控制台,管理员可以通过 IPMI 访问服务器的控制台界面,执行操作系统级别的管理任务,如安装操作系统、修改
BIOS 设置等,而无需物理接触服务器。

事件日志和警报:

IPMI 能够记录各种系统事件和警报,如硬件故障、温度超标、电源状态变化等,管理员可以实时监视这些事件并采取必要的响应措施。

远程虚拟媒体:

IPMI 支持通过网络加载虚拟光盘镜像或者虚拟软盘镜像到服务器中,从而实现远程安装操作系统或者软件。

组件和接口:
基础硬件:IPMI 需要服务器硬件提供支持,包括管理控制器(BMC,Baseboard Management Controller)和传感器。

网络接口:IPMI 通过以太网接口连接到服务器网络,通常使用独立的管理网络或者共享本地网络。

安全性:IPMI 支持安全协议和加密通信,确保远程管理过程的安全性和数据保护。

实际应用场景:
数据中心管理:大型数据中心使用 IPMI 可以远程管理和监控成百上千台服务器,降低运维成本和提高服务可靠性。

远程办公:对于分布在全球不同地区的服务器,IPMI 可以帮助管理员远程进行维护和故障排除,减少物理出差和维修时间。

高可用性需求:对于需要高可用性的应用和服务,IPMI 提供了及时响应和远程控制的能力,加速故障恢复和维护。

总结

  1. IPMI可以理解成为一个独立的微型系统,它存在于主板上。可以通过它来控制硬件及操作系统。

一般情况下都有默认的ip,也有部分机型需要通过bios去配置。在知道或者配置好ipmi的ip地址以后,我们能通过网线,同时连接服务器的ipmi接口,和本地网络接口,本地网络接口配置一个和impi同网段的地址,然后就可以通过浏览器直接访问到服务器IPMI地址。

  1. 一般情况下通过浏览器访问到IPMI(一般都是https协议)然后进行我们需要的操作。比如配置阵列,安装系统等操作。
  2. 第一次使用完成以后,服务器无故障的情况下一般情况下就不会再用到,当服务器故障的时候,可以检查硬件日志分析是否涉及到硬件故障。
  3. 在超大规模的使用的情况下,也可以把所有服务器的ipmi进行统一管理,可以实现一些批量操作。

BIOS

BIOS(Basic Input/Output System,基本输入/输出系统)是计算机系统中的一种固件,它位于主板上的一个芯片中,主要负责启动计算机和初始化硬件设备,以及提供基本的输入输出功能。

功能和作用
启动计算机:

BIOS 是计算机系统启动的第一个程序。当你按下电源按钮时,计算机首先执行 BIOS 中存储的启动程序,检查硬件配置,并加载操作系统。

硬件初始化:

BIOS 负责初始化计算机的各种硬件设备,例如处理器、内存、硬盘驱动器、显卡、键盘等。它确保这些设备在操作系统加载之前处于正常工作状态。

提供基本输入输出功能:

BIOS 提供了基本的输入输出功能,使得计算机可以与外部设备(如键盘、鼠标、显示器)进行交互。这些功能包括键盘输入、屏幕输出以及处理启动时的错误信息和警告。

系统设置和配置:

BIOS 中包含系统的基本设置和配置选项,如日期时间、启动设备顺序、硬件设备设置等。用户可以通过 BIOS 设置程序(BIOS
Setup)进行配置和调整。

BIOS Setup:

BIOS Setup 是一个通过特定的按键(通常是 DEL、F2、F10 等)进入的设置界面,允许用户修改系统设置和配置。在这里可以调整硬件参数、启动顺序、安全设置等。

固件更新:

BIOS 可以通过固件更新来修复错误、提高兼容性、增强功能等。更新 BIOS 需要特殊的固件更新工具和步骤,通常通过官方提供的固件文件进行更新。

系统自检(POST):

在启动过程中,BIOS 还负责执行自检程序(POST,Power-On Self-Test),检测系统硬件是否正常工作。如果发现硬件问题,BIOS
会显示错误信息或发出声音警告。

兼容性和互操作性:

BIOS 为操作系统提供了一个标准化的硬件接口,确保不同厂商的硬件和操作系统能够相互操作。

发展和替代

随着技术的发展,BIOS 的传统形式(基于传统的BIOS/MBR)逐渐被现代的UEFI(Unified Extensible Firmware
Interface,统一可扩展固件接口)所取代。UEFI 提供了比传统 BIOS 更多的功能和灵活性,支持更大的硬盘容量、更快的启动速度、更好的图形界面等特性。

综上所述,BIOS 是计算机启动和硬件初始化的基础,虽然它的角色在现代计算机中被UEFI逐渐取代,但在许多传统和嵌入式系统中仍然广泛使用。其实现在的BIOS已经基本上都是UEFI的。

总结

  1. bios主要的可能就是配置一些硬件支持的相关参数,比如阵列,impi(不绝对)启动顺序,硬件功能开关等。
  2. bios传统模式是文本操作,uefi可以是图形操作。
  3. bios只支持键盘,uefi支持鼠标和键盘。
  4. bios最大支持硬盘到2T,uefi则支持更大(这个和前面讲到的mbr&gpt类似)。
  5. 一般进入bios的方式是系统自检以后按F1,F12等(一般都有提示)。

RAID

讲RAID之前,我们先思考一个问题,我们如果购买一个盘,这个盘坏了,我们数据丢了怎么办?虽然这个问题在个人领域,普通人可能一辈子也无法遇到。但是在服务器领域,尤其是超大规模,任何小概率事件,都会经常发生。这也是个人理解RAID的来源。

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种数据存储技术,旨在通过将多个硬盘驱动器组合起来,以提高存储系统的性能、容量或可靠性。RAID
技术最初由加利福尼亚大学伯克利分校的研究人员提出,并在1980年代初得到推广和发展。

主要的 RAID 级别

RAID 0:条带化(Striping)

将数据块分散存储在多个硬盘上,提高了读写速度和整体性能。

不提供冗余备份,一台磁盘损坏会导致数据丢失。

RAID 1:镜像(Mirroring)

将相同的数据同时写入两个或多个硬盘,提供了数据冗余,增强了数据安全性和可靠性。

读性能可以优于单个硬盘,但写性能可能有所降低,因为数据要写入多个磁盘。

RAID 5:带分布式奇偶校验(Striping with Distributed Parity)

将数据和奇偶校验信息分散存储在多个硬盘上,提供了性能和容错性的平衡。

可以容忍一块硬盘的故障,同时不会损失数据。最低要求3块硬盘。

RAID 6:双分布式奇偶校验(Striping with Double Distributed Parity)

类似 RAID 5,但提供了更高级别的容错能力。

可以容忍两块硬盘的故障,在大容量硬盘的使用场景中更为常见。

RAID 10:RAID 1+0(Mirrored Striping)

将多组 RAID 1 镜像组成 RAID 0 条带化阵列,结合了 RAID 0 的性能和 RAID 1 的数据冗余。

提供了很高的读写性能和较高的数据保护能力,但需要至少四块硬盘。

RAID 的优点

  • 提高性能:通过条带化技术,在多个磁盘上并行读写数据,显著提高了数据访问速度。
  • 提供冗余:通过镜像或分布式奇偶校验技术,提供了数据的备份和容错能力,一定程度上提高了系统的可靠性和稳定性。
  • 灵活性:可以根据不同的应用需求选择合适的 RAID 级别,平衡性能、容量和可靠性。

RAID 的应用场景

  • 数据库服务器、文件服务器和企业级应用,需要高性能和数据冗余的环境。
  • 大数据处理和存储,需要高速数据读写和大容量存储的场景。
  • 要求数据备份和容错能力的关键业务应用,如金融交易系统和医疗数据存储。

总之,RAID 技术通过不同的实现级别,在性能、容量和可靠性之间找到了平衡点,是现代数据存储系统中常见和重要的技术之一。

总结

  1. 其实在分布式存储诞生以后,在大规模集群里面RAID应用已经比较少,主要通过软件多副本方式来保证的高可靠性。并且由于Kubernetes的应用,对单机的可靠性要求也大大降低。
  2. 在部分采用的RAID的业务里面,主要也是以系统盘为主。
  3. RAID的配置有的需要通过bios来完成,也有的可以通过ipmi来完成。
  4. 目前在市面上的NAS产品,包括个人和企业在很大程度上也是依靠RAID来保证高可用的。
  5. RAID是分硬件和软件两种的,下一章我们再讲讲具体的

RAID阵列

在一般的品牌服务器里面基本上都有一个叫阵列卡的硬件,硬盘先连接到阵列卡上面,然后阵列卡再连接到主板上。

根据需要对磁盘做阵列以后,暴露给主板或者说操作系统,如果是4块盘,做了RAID5以后,组合成一个盘,对于操作系统而言,看到的就是只有一个盘,但是如果我们从IPMI可以看到4个物理盘组成了一个逻辑盘。并且一般情况下,这些磁盘都是可以在服务器上直接热插拔的。即便有的硬盘坏了,也可以直接拔下来,然后重新换上一个新的硬盘,RAID卡会自动识别并正常加入到RAID中,这个时候操作系统是无法感知到这一切的。

数据需要经过操作系统通过阵列卡,再到磁盘,这个中间是有一个时间差值的,对于阵列卡部分型号是会带一个独立的电池的,也就是对于操作系统而言,数据已经落盘了,但是这个落盘,还在阵列卡里面,还没有写到真正的磁盘里面,如果这个时候系统断电或者崩溃,由于有电池存在,这个数据会存储在阵列卡里面,等待系统恢复的时候在写入到磁盘里面,从而可以提高可靠性。

当然如果是自己DIY的服务器或者是没有阵列卡的设备上,要体验或者要使用RAID功能也是没问题,因为Linux是可以从软件层面来实现。当然在测试环境,我们没有真正的硬件,是无法模拟出来的阵列的情况,所以就通过Linux软件来模拟阵列情况(虽然在实际运维中,可能不会用到,但是把他当成知识扩展以及理解阵列还是可以的)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#这台服务器,准备了2块多余的磁盘,sdb和sdc,我们使用他来模拟一个RAID1.
[root@localhost ~]# 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
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 973M 0 rom

# 安装软件
yum -y install mdadm

# 创建阵列
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc --metadata=0.90
# /dev/md0 是设备的名字,可根据需要自己定义
# --level=1 是阵列的级别
# --metadata=0.90 主要是兼容性问题

# 查看阵列
#可以看到2个磁盘组成了一个阵列磁盘
[root@localhost ~]# 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
sdb 8:16 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1
sdc 8:32 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1

[root@localhost ~]# ll /dev/md0
brw-rw---- 1 root disk 9, 0 7月 19 22:19 /dev/md0
# 这个时候我们就有了个20g由阵列提供的磁盘空间,下面的操作就和前面磁盘操作部分一样(创建分区,格式化,挂载等),当然这里只演示了一个简单的RAID阵列,具体更多功能可以自己探索

# 创建分区
[root@localhost ~]# fdisk /dev/md0
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x92791e84 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):
命令(输入 m 获取帮助):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
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
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)

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41942911,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41942911,默认为 41942911):
将使用默认值 41942911
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

# 格式化
#分区名字可以通过lsblk或者直接看/dev里面的设备名字来获取
[root@localhost ~]# mkfs.ext4 /dev/md0p1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242608 blocks
262130 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 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, 1605632, 2654208,
4096000

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

# 挂载
[root@localhost ~]# mkdir /mnt/raid
[root@localhost ~]# mount /dev/md0p1 /mnt/raid
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
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 2.1G 15G 12% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/md0p1 20G 45M 19G 1% /mnt/raid

# 检查raid状态
#两个磁盘组成的RAID是正常的
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Fri Jul 19 22:19:27 2024
Raid Level : raid1
Array Size : 20971456 (20.00 GiB 21.47 GB)
Used Dev Size : 20971456 (20.00 GiB 21.47 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Fri Jul 19 22:28:19 2024
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : resync

UUID : 0794079f:4ce9add0:bfe78010:bc810f04 (local to host localhost.localdomain)
Events : 0.18

Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc

# 模拟下磁盘故障,掉盘
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Fri Jul 19 22:19:27 2024
Raid Level : raid1
Array Size : 20971456 (20.00 GiB 21.47 GB)
Used Dev Size : 20971456 (20.00 GiB 21.47 GB)
Raid Devices : 2
Total Devices : 1
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Fri Jul 19 22:31:55 2024
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

Consistency Policy : resync

UUID : 0794079f:4ce9add0:bfe78010:bc810f04 (local to host localhost.localdomain)
Events : 0.18

Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 16 1 active sync /dev/sdb

## 可以看到,已经有块盘离线了
## 下面我们继续挂载,然后向里面写数据,都是ok的,体现了raid的1高可用性。

[root@localhost ~]# mount /dev/md0p1 /mnt/raid
[root@localhost ~]# cd /mnt/raid
[root@localhost raid]# touch abcd
[root@localhost raid]# ll
总用量 16
-rw-r--r-- 1 root root 0 7月 19 22:34 abcd
drwx------ 2 root root 16384 7月 19 22:24 lost+found
[root@localhost raid]#

总结

  1. 了解阵列原理及实现方式,在实际运维中还是很有用处的。
  2. 软件阵列如果坏了,还是比较难修的,作为理解阵列倒是没啥问题的。

参考资料

启示录

富贵岂由人,时会高志须酬。

能成功于千载者,必以近察远。


HomeLab
https://allendericdalexander.github.io/2025/04/07/home_lab/
作者
AtLuoFu
发布于
2025年4月7日
许可协议