一、认识服务器的硬件1.1 硬件结构1.项盖6.前置硬盘11.风扇16.PCIe卡2.散热器7.DVD光驱12.导风罩17.I/O模组3.M.2接口固态硬盘8.RAID控制器卡13.后置硬盘背板18.I/O模组4.内存条9.前置硬盘背板14.硬盘19.板载网卡5.主板托架10.风扇框15.电源模块说明:内存边的两个黑色小框是CPU的位置PCIE卡可以接网卡,显卡,存储扩展卡,RAID卡等服务器真实图片前面板图主要是硬盘、开关机键、USB接口、VGA接口后面板图1000M、10G网口电网接网线、光口接光线、BMC接口、USB接口、VGA接口接显示器、电源模块、后置硬盘Raiser卡图片网卡安装在Raiser卡上Raiser卡安装在主板上。网卡图片系统模块框图:CPU与内存插槽示意图:VGA线缆示意图:1.2 硬件设备在Linux中的文件名在Linux系统中一切都是文件每个设备对应一个文件。设备设备在Linux内的文件名SCSI/SATA/USB硬驱/dev/sd[a-p]USB快闪碟/dev/sd[a-p] 与SATA相同VirtI/O界面/dev/vd[a-p] 用于虚拟机内软碟机/dev/fd[0-1]打印机/dev/lp[0-2] 25针打印机 /dev/usb/lp[0-15] USB 接口鼠标/dev/input/mouse[0-15] 通用 /dev/psaux PS/2界面 /dev/mouse 当前鼠标CDROM/DVDROM/dev/scd[0-1] 通用 /dev/sr[0-1] 通用CentOS 较常见 /dev/cdrom 当前 CDROM磁带机/dev/ht0 IDE 界面 /dev/st0 SATA/SCSI界面 /dev/tape 当前磁带IDE硬盘机/dev/hd[a-d] 旧式系统才有二、磁盘2.1 磁盘的相关概念应用 / 文件系统 ↑ 块设备sda / nvme0n1 ↑ 协议SATA / SAS / NVMe ↑ 物理接口SATA口 / SFF-8643 / M.2 ↑ 存储介质HDD / SSD接口 ≠ 协议 ≠ 磁盘类型存储介质分类磁盘“协议”分类物理接口分类机械硬盘HDDSATA 6GbpsSATA(7 针数据线 15 针电源)固态硬盘SSDSAS 12G/24GSAS 接口(SFF 系列:SFF-8482\SFF-8643\SFF-8644SFF-8654)NVMe为SSD量身定制的协议PCIe接口形态M.2\U.2\AIC\EDSFF)2.2 按存储介质分类机械硬盘HDD磁盘盘片调整旋转碰头寻道读写转速越高读写速度越快5400转/分钟、7200转/分钟、10K、15K如下截图是BMC上看到的一块SATA接口的机械硬盘信息截图下图中协商速率大于支持的速率实际最大只支持6Gbps协商是指通道支持的速率但是由于SATA协议只支持6G所以只能到6G从协议层角度看HDD支持哪些硬盘类型接口协议SATA HDDSATAATASAS HDDSASSCSISCSI HDDSCSISCSIFC HDDFCSCSI over FCHDD 历史上有多种协议但在现代系统中机械硬盘基本只剩 SATA 和 SAS 两种不存在 NVMe HDD。固态硬盘NAND Flash存储无机械结构延迟小抗震​ SSD 主流只有三大协议SATAAHCI、SASSCSI、NVMePCIe你看到的实际协议速率说明SATA SSDAHCI6Gb/s [~600 MB/s]老协议SAS SSDSCSI12Gb/s [~1.2 GB/s]企业级NVMe SSDNVMe7 GB/s高性能M.2 SATAAHCI6Gb/s [~600 MB/s]不是 NVMeM.2 NVMeNVMePCIe 代际 × 通道数 × 协议效率 × SSD 控制器/闪存能力 × 系统平台限制高速PCIe 版本单通道带宽约x4 总带宽x8 总带宽PCIe 3.0~1 GB/s~4 GB/s~8 GB/sPCIe 4.0~2 GB/s~8 GB/s~16 GB/sPCIe 5.0~4 GB/s~16 GB/s~32 GB/s多个nvme盘时的命名规律盘设备名第 1 块 NVMe/dev/nvme0n1第 2 块 NVMe/dev/nvme1n1第 3 块 NVMe/dev/nvme2n1命名解释nvme 0 n 1 │ │ │ │ │ │ │ └─ Namespace ID │ │ └──── 命名空间分隔符 │ └──────── 控制器编号 └────────────── NVMe 设备类型下图是一张 SATA接口的SSD硬件信息图从图中可以看到支持的速率为6G协商速率也为6G下图是一张 SATA接口的SSD硬件信息图从图中可以看到支持的速率为6G协商速率也为2.5G,在使用时实际只支持2.5G下图是一张 SAS接口的SSD硬件信息图从图中可以看到支持的速率为12G协商速率也为12G下图是一张PCIe接口的NVMe SSD的磁盘信息lsscsi -t 命令结果中有/nvme0n1 接口是pcie, lsblk命令也可看到nvme设备smartctl -i /dev/nvme0n1 命令查看nvme ssd磁盘信息三、RAID技术把多块物理硬盘组合成一个“虚拟大硬盘”实现提供性能、提供可靠性、提升容量。3.1 解决三个问题单盘问题RAID解决容量小多盘合并性能低并行读写容易坏冗余备份3.2 RAID工作位置物理硬盘 → RAID → 分区 → LVM → 文件系统 → 挂载3.3 RAID三种核心技术技术作用RAID级别Striping条带提升速度RAID0Mirroring镜像提升安全RAID1Parity校验兼顾容量安全RAID5、RAID63.4 硬RAID与软RAID类型工具硬RAIDRAID卡软RAIDmdadm3.5 真实环境中使用多块硬盘 ↓ 做 RAID ↓ 得到 1 块“虚拟磁盘” ↓ 再做 GPT 分区不是必须 ↓ 再做 LVM先把磁盘分区或者整块磁盘创建成PV加入至VG,然后从VG中划分LV格式化LV【建文件系统】LV挂载至目录 ↓ 再建文件系统 ↓ 挂载四、磁盘分区MBRGPT4.1 为什么需要磁盘分区分区把一个物理磁盘物理磁盘、RAID后的逻辑磁盘、虚拟机的虚拟磁盘变成多个逻辑磁盘来管理。操作系统只能从某个“分区”启动没有分区系统不知道从哪里启动。BIOS的启动方式系统盘的一个分区分挂载至/boot。UEFI的启动方式系统盘的一个分区分挂载至/boot/efi。MBR和GPT是磁盘分区表标准用于描述硬盘如何划分分区、如何启动操作系统。4.2 MBR与GPT分区MBRMaster Boot Record主引导记录属于BIOS时代的分区标准。MBR结构MBR只有 512 Bytes里面包含 3部分偏移大小内容0–445446BBoot Loader 引导代码446–50964B分区表最多4项510–5112B结束标志 0x55AAMBR 引导程序 分区表 在同一个扇区一旦损坏系统无法启动分区丢失。4.2.1 MBR分区方式MBR分区表只有64字节每个分区项 16字节所以最多64 / 16 4个分区因此 MBR最大只能有4个主分区Primary为了解决不够用 → 发明了扩展分区Extended Partition4个主分区不够 → 把其中一个改成“扩展分区” 扩展分区里面再套无限逻辑分区最终结构MBR ├─ 主分区1 ├─ 主分区2 ├─ 主分区3 └─ 扩展分区 ├─ 逻辑分区5 ├─ 逻辑分区6 ├─ 逻辑分区7注意没有分区4 → 因为扩展分区占了位置。4.2.2 MBR最大容量限制MBR使用 32位地址最大扇区数 2^32 每扇区 512B 最大容量 2TB所以MBR最大只支持 2TB4.3 GPT分区GPT GUID Partition Table属于UEFI 时代的分区标准是为替代 MBR 设计的现代方案。MBR问题GPT解决方式单点损坏分区表双备份最大2TB支持ZB级容量4分区限制默认128分区BIOS依赖UEFI启动4.3.1 GPT磁盘布局GPT不是只在一个扇区。GPT在磁盘头尾各保存一份分区表磁盘开始 │ ├─ Protective MBR兼容MBR ├─ GPT Header主头 ├─ Partition Table主表 │ │ ← 数据区 → │ ├─ Partition Table备份表 └─ GPT Header备份头 磁盘结尾4.4 BIOS MBR vs UEFI GPT启动体系分区表BIOSMBRUEFIGPT4.4.1 MBR 磁盘结构┌───────────────────────────────┐ │ LBA 0 │ │ Master Boot Record (512B) │ │ ┌───────────────────────────┐ │ │ │ BootLoader 446B │ │ │ │ 分区表 64B (4个分区项) │ │ │ │ 结束标志 55AA │ │ │ └───────────────────────────┘ │ └───────────────────────────────┘ │ │ 分区数据区域 │ ├───────────────┬───────────────┬───────────────┐ │ 主分区1 │ 主分区2 │ 主分区3 │ ├───────────────┴───────────────┬───────────────┤ │ 扩展分区 (容器) │ │ │ ├─逻辑分区5 │ │ │ ├─逻辑分区6 │ │ │ └─逻辑分区7 │ │ └───────────────────────────────────────────────┘内容大小说明Bootloader 代码区446 字节启动代码负责查找并加载活动分区的引导记录 。磁盘分区表 (DPT)64 字节记录主分区信息每项 16 字节共 4 项 。结束签名 (55 AA)2 字节标识该扇区是有效的 MBR 。4.4.2 GPT 磁盘结构磁盘开始 ┌───────────────────────────────┐ │ Protective MBR (兼容MBR) │ └───────────────────────────────┘ ┌───────────────────────────────┐ │ GPT Header (主头) │ │ • 磁盘GUID │ │ • 分区表位置 │ │ • CRC校验 │ └───────────────────────────────┘ ┌───────────────────────────────┐ │ Partition Table (主分区表) │ │ 分区1 GUID │ │ 分区2 GUID │ │ 分区3 GUID │ │ ... 默认128个分区 │ └───────────────────────────────┘ │ │ 巨大的数据区域 │ ├───────────────┬───────────────┬───────────────┐ │ 分区1 │ 分区2 │ 分区3 │ ├───────────────┴───────────────┴───────────────┤ │ 分区4 分区5 分区6 …… 分区128 │ └───────────────────────────────────────────────┘ ┌───────────────────────────────┐ │ Partition Table (备份分区表) │ └───────────────────────────────┘ ┌───────────────────────────────┐ │ GPT Header (备份头) │ └───────────────────────────────┘ 磁盘结束4.5 BIOS MBR vs UEFI GPT 启动流程图4.5.1 BIOS MBR 启动流程传统开机上电 │ ▼ BIOS 固件启动 │ ▼ 读取硬盘 第0扇区 (MBR) │ ▼ 执行 MBR 中的 BootLoader (446B)把操作系统内核加载到内存中并启动 │ ▼ 查找 “活动分区”(Active Partition) │ ▼ 加载 分区中的 BootLoader │ ▼ 启动操作系统MBR分区下的lsblk -f 命令结果可以看到/boot挂载在第一个分区上。BIOS 启动特点• 只能读取磁盘前512B • 只能识别MBR • 启动链很短 • 极度依赖第0扇区关键问题 MBR坏 直接无法开机4.5.2 UEFI GPT 启动流程现代开机上电 │ ▼ UEFI 固件启动 │ ▼ 读取 GPT 分区表 │ ▼ 找到 EFI System Partition (ESP) │ ▼ 读取 EFI 启动文件 │ (类似 exe 程序) ▼ 运行 bootx64.efi 【boot loader】 │ ▼ 启动操作系统 │ ▼ /boot/vmlinuz-xxx.xxx 内核文件 │ ▼ 启动init/systemd等进程UEFI系统执行lsblk -f 查看磁盘挂载可以看到有一个分区挂载至/boot/efi文件系统为FAT32/boot/efi/目录下的BOOTX84.EFI文件截图如下所示查看磁盘分区确认为GPT4.5.3 什么是 ESP 分区重点UEFI 不再从“扇区”启动而是从文件系统启动。ESP 分区格式FAT32 文件系统典型结构EFI System Partition └─ /EFI/ ├─ Microsoft/ │ └─ Boot/ │ └─ bootmgfw.efi │ ├─ ubuntu/ │ └─ grubx64.efi │ └─ Boot/ └─ bootx64.efi本质 UEFI 直接运行.efi 可执行文件就像BIOS 读磁盘扇区 UEFI 运行硬盘里的程序4.5.4 两种启动方式对比图BIOS启动 固件 → MBR → 分区Boot → OS 扇区级启动 UEFI启动 固件 → GPT → ESP分区 → .EFI程序 → OS 文件级启动五、LVM逻辑卷管理解决分区固定大小的问题引入LVM。LVM 是一个虚拟存储层插在分区和文件系统之间。5.1 LVM的三层结构层级名称类比PVPhysical Volume硬盘/分区VGVolume Group存储池LVLogical Volume虚拟分区1️⃣ PV物理卷PV 可以是整块磁盘一个分区多块磁盘组合2️⃣ VG卷组 存储池把多个 PV 合成一个池子VG PV PV PV3️⃣ LV逻辑卷 新分区在 VG 里切出 LVLV 就是新的“分区”例如vg_data ├─ lv_root 100G ├─ lv_home 500G ├─ lv_var 200G这些 LV 才会格式化mkfs.ext4 /dev/vg_data/lv_home然后挂载使用。5.3 用了LVM还需要分区吗场景是否需要分区普通数据盘可以整盘做 PV系统盘UEFIGPT)必须要有 ESP 分区BIOS系统需要 /boot 分区典型 Linux GPT 分区/dev/sda1 EFI 512M ← 必须UEFI /dev/sda2 LVM 其余空间 ← 给 LVM5.2 理解图没有 LVM传统磁盘 ├─ 分区1 → 文件系统 → / ├─ 分区2 → 文件系统 → /home └─ 分区3 → 文件系统 → /var空间固定死❌使用 LVM磁盘 └─ 分区(LVM类型) ↓ PV ↓ VG (存储池) ↓ ├─ LV → 文件系统 → / ├─ LV → 文件系统 → /home └─ LV → 文件系统 → /var空间可动态调整✅六、开机流程中的BIOS与UEFI没有软件的硬件是没有用的为了管理计算机硬件资源 有了操作系统 这个系统软件的生产。由于操作系统会控制所有的硬件并且提供核心功能因此计算机能够认识硬件内的文件并且进一步读取硬盘内的软件与执行该软件来达成各项目的。问题是既然操作系统也是软件那么计算机是如何认识这个操作系统软件并且执行的天机的时候计算机没有任何软件系统那它要如何读取硬盘内的操作系统的这就是涉及到计算机的开机程序了BIOSUEFI。6.1 BIOSCMOS记录各项硬件参数且嵌入在主板上面的存储器BIOS是一个写入到主板上的一个固件。在开机的时候计算机系统会主动执行的第一个程序就是BIOS。接下来BIOS会分析计算机里面有哪些存储设备以硬盘为例BIOS会依据用户的设定去取得能够开机的硬盘并且到该硬盘里去读取第一个磁区的MBR位置。MBR这个仅有446bytes的硬盘容量存放了最基本的开机管理程序boot loader。boot loader加载内核由于boot loader是操作系统在安装的时候所提供的所以它会认识硬盘内的文件系统格式因此能够读取内核。boot loader的作用提供菜单用户可以选择不同的开机项目这也是多系统开机的重要功能。载入内核直接指向可开机的程序来开始操作系统。转交其他loader将开机管理功能转交给其他loader负责。简单的说整个开机流程到操作系统之前的动作是这样的BIOS开机主动执行的软件MBR第一个可开机装置的第一个磁区内的主要开机记录区块内含开机管理程序启动管理器boot loader一个可读取核心来执行的软件核心文件启动操作系统的功能6.2 UEFIUEFI是BIOS的替代产品使用C语言开发比起使用组合语言的传统BIOS要更容易开发。传统BIOS与UEFI的对比如下表比较项目传统 BIOSUEFI使用程序语言组合语言C 语言硬件资源控制使用中断 IRQ 管理 不可变的内存访问 不可变得输入/输出访问使用驱动程序与协议处理器运作环境16 位CPU 保护模式扩充方式透过IRQ连结直接加载驱动程序第三方厂商支持较差较佳且可支持多平台图形化能力较差较佳内置简化操作系统前环境不支持支持从上图可发现与传统BIOS不同UEFI简直就像一个低端的操作系统也跟操作系统类似只需要加载驱动程序即可控制硬件。UEFI加入了一个安全启动secure boot机制即将开机的操作系统必须要被UEFI所验证否则就无法顺利开机。七、Linux安装模式下磁盘分割的选择7.1 目录树结构目录树结构就是以根目录为主然后向下呈现分支的目录结构的一种目录结构。整个目录树架构最近来可好的就是根目录(root directory)这个根目录的表示方法为一条斜线/。7.2 文件系统与目录树的关系挂载挂载就是利用一个目录当成进入点将磁盘或者磁盘分区的数据放置在该目录下也就是说进入该目录就可以读取该磁盘磁盘分区的意思。这个动作称为挂载进入点的目录称为‘挂载点’。由于整个Linux系统最重要的是根目录因此根目录一定需要挂载到某个分区。我们以下图作为一个说明上图中假设我的硬盘分为两区partition 1是挂载到根目录至于partition 2则是挂载到/home这个目录。 这也就是说当我的数据放置在/home内的各次目录时数据是放置到partition 2的如果不是放在/home底下的目录 那么数据就会被放置到partition1了。八、vmware workstation uefi方式安装centos9选择语言选择安装位置磁盘分区选择“自动”磁盘分区选择“Custom自定义”设置root密码开始安装知识拓展BMCIPMIRedfish学习三者的关系如下图所示:┌───────────────┐ │ 管理程序 │ │ Ansible / 云 │ └──────┬────────┘ │ ┌─────────┴─────────┐ │ │ Redfish IPMI (HTTPS/JSON) (UDP/二进制) │ │ └─────────┬─────────┘ │ BMC │ ┌──────┴──────┐ │ 硬件本体 │ └─────────────┘BMC是硬件管家,Baseboard Management Controller,独立于操作系统的微控制器,即使服务器关机,系统故障,只要接电,就能管理服务器.BMC能干什么?开关机远程控制台(KVM相关于接显示器)硬件监控,查看CPU\内存\磁盘\网卡\电源等硬件信息事件日志,查看硬件错误固件升级,BIOS/BMC/网卡等各种硬件的固件版本装系统,可以打开远程控制台(KVM)挂载ISO进行系统安装IPMI是什么?IPMI(Intelligent Platform Management Interface) 是由intel主导,1998年开发的协议,用来和BMC通信.IPMI的通信方式通道说明LANUDP 623Serial串口使用nmap测试服务器BMC地址的623端口返回截图如下:可以看到service是asf-rmcpRedfish是什么?Redfish基于HTTPSJSON的硬件管理API,取代IPMI.Redfish核心特点特性说明协议HTTPS数据格式JSON风格RESTful安全TLS Token生态标准统一Redfish能干什么?能力说明开关机POST /Actions/ComputerSystem.Reset硬件信息CPU / 内存 / 磁盘BIOS 配置自动化改参数固件升级API 批量刷事件订阅WebhookIPMI vs Redfish 对比对比项IPMIRedfish年代老新协议UDP / RMCPHTTPS数据格式二进制JSON安全弱强自动化差极好云平台不友好标配BMC服务配置截图图片解读:如果需要使用远程控制使用KVM协议,使用的端口号为7578扇区扇区是机械硬件上进行数据读写的最小物理单位。传统大小绝大多数硬盘的每个扇区大小为512字节。现在标准现在更大容量的硬盘普遍使用4KB4096字节的扇区称为“高级格式”。无论哪种大小操作系统都无法只读写一个扇区里的一个字节要读就必须把整个扇区的数字全部读出来要写也必须是整个扇区地写。扇区的结构与组成标识符ID记录该扇区的编号和位置信息就像门牌号。数据区Data Field真正存储用户数据的地方大小是512字节或4KB。纠错码ECC一段校验数据。当读取扇区时磁盘控制器会根据数据区的内容重新计算一个ECC值并与扇区上原有的ECC对比。如果一致说明数据正确如果不一致说明该扇区可能损坏出现“坏道”。现在操作系统通常使用LBA逻辑块寻址LBA就是给整个硬盘的所有扇区从0开始编一个逻辑号然后硬盘内部固件再自动把这个逻辑号翻译成实际的物理位置这就简化了操作系统的设计。扇区vs操作系统中的“块”操作系统不能直接使用扇区而是使用“块”Linux叫法或“簇”windows叫法扇区物理层的最小单位硬件决定的块/簇逻辑层的最小单位操作系统决定的通常由1个、2个、4个、8个等扇区组成。为什么要有“块”如果操作系统按扇区512字节管理那对于一个大文件比如1GB需要管理200多万个扇区效率极低。把多个扇区组成一个“块”比如8个扇区4KB管理单位就变成了约25万个块效率大大提高。一个例子你写一个“1KB”的文本文件。物理上硬盘至少写了2个512字节的扇区。逻辑上如果系统块大小是4KB那么文件系统会分配1个完整的块4KB实际只用了前1KB剩下的3KB就是内部碎片浪费了。总结一张表特性扇区 (Sector)块/簇 (Block/Cluster)层级物理层逻辑层/文件系统层决定者硬件制造商操作系统格式化时设定大小固定512字节或4KB可变1、2、4、8个扇区作用硬盘自己寻址、读写的最小单位操作系统分配存储空间的最小单位损坏影响出现物理坏道该块内的所有扇区都无法使用windows系统查看物理扇区与簇大小命令fsutil fsinfo ntfsinfo C:命令中其中C为盘符下图为命令截图命令解释硬盘物理扇区大小4096 字节 (4KB)—— 这是硬盘硬件真实读写的最小单位。操作系统/文件系统使用的“块”这里叫“群集/簇”大小4096 字节 (4KB)—— 这是Windows分配空间的最小单位。关键比例1个群集 1个物理扇区4096 / 4096 1。这是最理想、最高效的对齐状态。为什么显示“每扇区字节数512”—— 这是逻辑扇区是为了兼容老旧的软件/系统而模拟出来的。硬盘内部会把8个逻辑扇区8×5124096拼成一个物理扇区来处理。Linux系统查看扇区大小命令fdisk /dev/sdi -l由上图命令结果可知扇区大小为4096bytesLinux系统查看“块”大小命令stat -f / 其中/ 为挂载目录