磁盘方面

磁盘分区

分区概念

在linux系统中,磁盘分区是一种物理硬盘分割成多个逻辑部分的方法,每个分区可以独立地进行管理和使用通常会分为

  • 主分区:每个磁盘最多可以有四个主分区。需要更多地分区可以使用扩展分区。
  • 扩展分区: 扩展分区本身不能直接用于存储数据,但可以包含多个逻辑分区。
  • 逻辑分区: 位于扩展分区内地分区,可以超过四个限制。
分区职责
  • 主分区:用于安装操作系统,存储数据,以及引导系统
  • 扩展分区:是用于包含逻辑分区的一个容器,解决主分区的限制,创建多个逻辑分区
  • 逻辑分区:可以用来存储操作系统,应用程序和数据。
常见目录
目录 描述
/ 根目录,包含系统中所有文件和目录的起点。
/bin 基本命令的二进制文件,如 lscpmv 等。
/boot 存放启动加载器相关的文件和内核文件。
/dev 设备文件目录,包含所有设备的接口文件(如硬盘、终端)。
/etc 配置文件目录,包含系统和应用程序的所有配置文件。
/home 用户家目录,每个用户都有一个单独的子目录,用于存放个人文件和配置。
/lib 系统库文件目录,包含基本系统库和内核模块。
/media 自动挂载的可移动媒体设备(如CD-ROM、USB驱动器)。
/mnt 临时挂载文件系统的挂载点。
/opt 可选软件包目录,用于安装附加的第三方应用程序。
/proc 虚拟文件系统,提供系统和进程信息。
/root 超级用户(root)家目录。
/run 运行时数据,存放系统启动后产生的临时文件(如进程ID文件)。
/sbin 系统管理员命令的二进制文件,如 fdiskifconfig 等。
/srv 服务数据目录,存放特定服务的数据(如Web服务器文件)。
/sys 虚拟文件系统,提供内核设备和驱动程序信息。
/tmp 临时文件目录,存放临时文件,系统重启后可能会清空。
/usr 用户程序目录,包含二进制文件、库文件、文档等(如 /usr/bin/usr/lib)。
/var 可变数据文件目录,存放日志文件、邮件、临时文件等(如 /var/log/var/mail)。

MBR (Master Boot Record)

  • MBR是一种传统的磁盘分区表格式,它位于磁盘的第一个扇区。
  • MBR分区表最多支持4个主分区,如果需要更多分区,必须将其中一个主分区转换为扩展分区,再在扩展分区内创建逻辑分区。
  • 由于使用32位地址,MBR最多支持2TB的磁盘。
逻辑结构
  1. 主引导记录 (Master Boot Record)

    • 位于磁盘的第一个扇区(LBA 0)。
    • 大小为512字节。
  2. 主引导代码 (Boot Code)

    • 前446字节存储主引导代码,用于启动操作系统。
  3. 分区表 (Partition Table)

    • 紧随其后64字节(每个分区条目16字节,共4个条目)。
    • 描述最多四个主分区或一个扩展分区的起始位置和大小。
  4. 签名 (Signature)

    • 最后2字节为磁盘签名(0x55AA),标志主引导记录的结束。
  5. 扩展分区

    • 如果需要超过四个分区,可以创建一个扩展分区(Extended Partition)。
    • 扩展分区包含一个扩展引导记录 (EBR),每个逻辑分区包含一个EBR。

GPT (GUID Partition Table)

  • GPT是一种现代的磁盘分区表格式,取代了传统的MBR。
  • GPT使用64位地址,可以支持超过8ZB的磁盘容量。
  • GPT最多可以支持128个主分区,没有扩展分区的限制。
  • GPT分区表有冗余备份和CRC校验,提高了数据的安全性和可靠性。
逻辑结构
  1. 保护性MBR (Protective MBR)

    • 位于磁盘的第一个扇区(LBA 0),防止旧版工具误读GPT磁盘。
  2. 主GPT头 (Primary GPT Header)

    • 位于LBA 1,描述GPT分区表的总体信息。
    • 包含GPT版本、头部大小、CRC32校验和等。
  3. 主分区表 (Primary Partition Table)

    • 紧随其后,从LBA 2开始,一般占用32个扇区。
    • 每个分区条目128字节,通常最多支持128个分区条目。
  4. 分区条目 (Partition Entries)

    • 每个条目描述一个分区的GUID、类型GUID、起始LBA、结束LBA、属性标志等。
  5. 用户分区

    • 从主分区表结束位置开始,存储实际的数据和文件系统。
  6. 备份分区表 (Backup Partition Table)

    • 位于磁盘末尾,用于恢复主GPT头和分区表。
  7. 备份GPT头 (Backup GPT Header)

    • 位于磁盘倒数第二个扇区,记录备份分区表的信息。

Legacy / BIOS 引导

Legacy/BIOS(Basic Input/Output System)引导是一种传统的计算机启动模式。它是PC兼容系统的早期固件接口,负责初始化硬件并引导操作系统。以下是详细的说明:

工作原理
  1. 电源自检(POST):

    • 计算机启动时,BIOS首先进行电源自检(Power-On Self-Test),检查和初始化系统硬件,如内存、CPU、硬盘和外设。
    • 如果POST过程中检测到错误,BIOS会通过蜂鸣声或屏幕错误信息提示用户。
  2. 查找引导设备:

    • POST完成后,BIOS会根据预设的引导顺序查找可启动设备(如硬盘、光盘、U盘等)。
    • 引导顺序通常可以在BIOS设置界面中配置。
  3. 加载引导扇区:

    • 一旦找到一个可引导的设备,BIOS会读取该设备的主引导记录(MBR,Master Boot Record),这通常是设备的第一个扇区(512字节)。
    • MBR包含了启动加载程序的初始部分以及分区表信息。
  4. 执行引导加载程序:

    • BIOS将控制权交给MBR中的引导加载程序。这个程序进一步加载操作系统或更多的引导代码(例如,GRUB、LILO等引导加载程序)。
  5. 启动操作系统:

    • 引导加载程序最终加载操作系统内核,并将控制权交给它,操作系统开始初始化并进入用户模式。
特点和限制
  • 地址空间限制: BIOS模式只能使用传统的32位地址模式,无法利用超过4GB的内存空间。
  • MBR分区限制: MBR分区表限制最大支持4个主分区,每个分区最大只能是2TB。
  • 兼容性: 由于其长期存在,BIOS模式具有广泛的硬件和软件兼容性。
设置和配置
  • 进入BIOS设置: 通常通过在启动时按下特定的键(如F2、Del、Esc)进入BIOS设置界面。
  • 配置引导顺序: 在BIOS设置界面中,用户可以配置引导设备的优先级。
  • 启用/禁用设备: 可以在BIOS中启用或禁用某些硬件设备,以优化系统性能或解决兼容性问题。

UEFI

UEFI(统一可扩展固件接口)是一种现代固件接口,用于替代传统的BIOS。它提供更强大的功能和更灵活的引导方式。以下是详细的UEFI启动流程和相关设置的教学:

UEFI 启动流程
  1. 电源开启和硬件初始化:

    • 计算机启动时,UEFI固件首先进行硬件初始化和电源自检(POST,Power-On Self-Test)。
    • 检查CPU、内存、存储设备和外设,确保它们工作正常。
  2. 进入UEFI固件界面:

    • 在启动过程中,用户可以按特定的键(如F2、Del、Esc)进入UEFI固件设置界面。
  3. 查找EFI系统分区(ESP):

    • UEFI固件会查找包含EFI系统分区(ESP)的存储设备。ESP是一个特殊的分区,用于存储EFI引导加载程序和相关文件。
    • ESP通常格式化为FAT32文件系统,并且标记为“EFI System Partition”。
  4. 加载EFI引导加载程序:

    • 在ESP中,UEFI固件查找引导加载程序文件,通常位于 \EFI\Boot\bootx64.efi(对于64位系统)。
    • 用户可以在UEFI设置中指定特定的引导加载程序路径或更改引导顺序。
  5. 执行引导加载程序:

    • UEFI将控制权交给引导加载程序。这个程序进一步加载操作系统的引导程序或内核。
    • 常见的引导加载程序包括Windows Boot Manager、GRUB、Clover等。
  6. 启动操作系统:

    • 引导加载程序加载操作系统内核并将控制权交给它,操作系统开始初始化并进入用户模式。
设置和配置UEFI
  1. 进入UEFI设置界面:

    • 重启计算机,在启动过程中按下特定的键(如F2、Del、Esc)进入UEFI设置界面。
    • 不同品牌的主板可能有不同的按键,具体请参考主板或计算机手册。
  2. 配置引导顺序:

    • 在UEFI设置界面中,找到“Boot”或“启动”选项卡。
    • 配置引导设备的优先级,将希望首先引导的设备设置为第一优先级。
    • 如果需要从特定的EFI引导文件启动,可以手动指定路径。
  3. 启用/禁用设备:

    • 在“Advanced”或“高级”选项卡中,可以启用或禁用某些硬件设备。
    • 例如,启用/禁用USB端口、网卡、SATA接口等。
  4. 安全启动(Secure Boot):

    • 安全启动是一项UEFI功能,用于防止加载未签名或未经授权的操作系统引导程序。
    • 在“Security”或“安全”选项卡中,可以启用或禁用安全启动。
    • 如果需要安装非官方签名的操作系统,可能需要暂时禁用安全启动。
  5. 保存和退出:

    • 完成设置后,选择“Save & Exit”或“保存并退出”选项。
    • 保存设置后,系统将重新启动并应用新的设置。

sar

sar(System Activity Reporter)是一个强大的工具,用于在Linux系统上收集、报告和保存系统活动信息。它可以提供有关系统性能的详细数据,包括CPU、内存、网络、磁盘I/O等多个方面。sar命令通常与sysstat软件包一起使用。下面是如何使用sar命令来监控磁盘活动的步骤:

安装sysstat包

在大多数Linux发行版中,可以通过包管理器安装sysstat包:

# 对于基于Debian的系统(如Ubuntu)
sudo apt-get update
sudo apt-get install sysstat

# 对于基于RHEL的系统(如CentOS)
sudo yum install sysstat
启用和配置sysstat

安装完成后,确保sysstat服务已启用并正在运行:

# 启用sysstat服务
sudo systemctl enable sysstat
sudo systemctl start sysstat

# 配置sysstat以启用数据收集
sudo nano /etc/default/sysstat

# 将ENABLED="false"修改为ENABLED="true"
ENABLED="true"

# 保存并退出编辑器
使用sar监控磁盘I/O

sar可以通过-d选项来监控磁盘I/O活动:

# 实时监控磁盘I/O,每1秒报告一次,共报告10次
sar -d 1 10
常用选项
  • -d:报告磁盘I/O统计信息。
  • -p:将设备名称从设备编号翻译为设备名称。
  • -r:报告内存和交换空间使用情况。
  • -n:报告网络统计信息(如-n DEV报告网络接口统计信息)。
  • -u:报告CPU使用情况。
查看历史数据

sar命令可以查看过去的系统性能数据,这些数据通常保存在/var/log/sa/目录中:

# 查看特定日期的磁盘I/O活动(例如2024年7月5日)
sar -d -f /var/log/sa/sa05
示例输出解读

image-20240709151241420

以下是sar -d命令的示例输出及其含义:

  • tps:每秒传输数(读+写)。
  • rd_sec/s:每秒读取的扇区数。
  • wr_sec/s:每秒写入的扇区数。
  • avgrq-sz:平均请求大小(扇区)。
  • avgqu-sz:平均请求队列长度。
  • await:每个I/O操作的平均等待时间(毫秒)。
  • svctm:每个I/O操作的平均服务时间(毫秒)。
  • %util:设备的I/O使用百分比。

使用sar工具可以帮助系统管理员深入了解系统性能瓶颈并进行相应的优化。

RAID

RAID(Redundant Array of Independent Disks,即独立磁盘冗余阵列)是一种将多个物理硬盘驱动器组合成一个逻辑单元的存储技术。其主要目的是提高数据存储的性能、容量和可靠性。RAID技术通过不同的配置(称为RAID级别)来实现这些目标。以下是几种常见的RAID级别:

  1. RAID 0

    • 条带化(Striping):数据在多个磁盘上分割并并行写入。
    • 优点:提高读写速度。
    • 缺点:没有冗余,任何一个磁盘故障都会导致数据丢失。
  2. RAID 1

    • 镜像(Mirroring):每个数据块都在两个或多个磁盘上复制。
    • 优点:提供高冗余,数据安全性高。
    • 缺点:磁盘利用率低(50%),只使用了一半的存储容量。
  3. RAID 5

    • 分布式奇偶校验(Distributed Parity):数据和奇偶校验信息分布在所有磁盘上。
    • 优点:平衡了性能、容量和数据安全性,至少需要3个磁盘。
    • 缺点:写操作较慢,因为需要计算和写入奇偶校验数据。
  4. RAID 6

    • 双奇偶校验(Double Parity):类似RAID 5,但有两组奇偶校验数据,容忍两块磁盘同时故障。
    • 优点:更高的数据安全性。
    • 缺点:写操作更慢,磁盘利用率较低。
  5. RAID 10(或1+0)

    • 条带化和镜像结合:先进行镜像,再进行条带化。
    • 优点:结合了RAID 0和RAID 1的优点,高性能和高冗余。
    • 缺点:需要较多的磁盘,成本较高。
  6. RAID 50(或5+0)

    • 条带化和分布式奇偶校验结合:将RAID 5阵列条带化。
    • 优点:提高了性能和冗余,适合大规模存储需求。
    • 缺点:复杂度增加,需要更多磁盘。

fdisk

fdisk 是用于操作磁盘分区的工具,适用于 MBR 分区表。

命令 描述 使用说明
m 显示帮助菜单 显示所有可用命令的列表和简要说明。
p 显示当前分区表 列出指定磁盘上的所有分区信息。
n 添加一个新分区 根据提示选择主分区或逻辑分区,并设置分区的开始和结束位置。
d 删除一个分区 选择要删除的分区编号。
l 列出已知分区类型 显示支持的所有分区类型代码和说明。
t 更改一个分区的系统ID 选择分区后,输入新的类型代码。
a 切换启动标志 设置或取消某个分区的启动标志(使其可引导)。
w 写入分区表并退出 将对分区所做的更改写入磁盘,并退出fdisk。
q 不保存更改并退出 退出fdisk而不保存对分区表的任何更改。
创建新分区
  1. 输入n创建新分区。
  2. 选择分区类型(主分区p或逻辑分区e)。
  3. 指定分区号(例如1)。
  4. 指定分区的起始扇区和结束扇区。
  5. 输入w保存并退出。
删除分区
  1. 输入p查看当前分区表。
  2. 输入d删除分区。
  3. 输入要删除的分区编号(例如1)。
  4. 输入w保存并退出。
更改分区类型
  1. 输入t更改分区类型。
  2. 输入分区编号(例如1)。
  3. 输入新的类型代码(例如83用于Linux分区)。
  4. 输入w保存并退出。

image-20240709125834777

parted

fdisk 是用于操作磁盘分区的工具,适用于 GPT分区表。

命令 描述 使用说明
mklabel 创建新的磁盘标签(分区表) 格式:mklabel <label>,其中label可以是gptmsdos等。
mkpart 创建新分区 格式:mkpart <part-type> <fs-type> <start> <end>,例如mkpart primary ext4 1MiB 500MiB
rm 删除分区 格式:rm <number>,其中number是分区编号。
print 显示分区表 列出指定磁盘上的所有分区信息。
name 给分区命名 格式:name <number> <name>,给指定编号的分区命名。
set 设置分区标志 格式:`set <on
resizepart 调整分区大小 格式:resizepart <number> <end>,将分区调整到新的结束位置。
move 移动分区 格式:move <number> <start> <end>,移动分区到新的位置。
mkfs 创建文件系统 格式:mkfs <number> <fs-type>,例如mkfs 1 ext4
align-check 检查分区对齐 格式:align-check <opt> <number>,例如align-check optimal 1
rescue 尝试恢复丢失的分区 格式:rescue <start> <end>,尝试在指定范围内恢复分区。
quit 退出parted 退出parted交互模式。
unit 设置显示单位 格式:unit <unit>,其中unit可以是s(扇区)、MBGB等。
启动parted
sudo parted /dev/sdb
创建新的分区表(GPT)
(parted) mklabel gpt
创建新分区

创建一个从1MiB开始,500MiB结束的主分区,文件系统类型为ext4:

(parted) mkpart primary ext4 1MiB 500MiB
删除分区

删除刚才创建的第一个分区:

(parted) rm 1
调整分区大小

假设重新创建了一个分区,现在调整其大小到1000MiB:

(parted) mkpart primary ext4 1MiB 500MiB
(parted) resizepart 1 1000MiB
设置分区标志

设置第一个分区的启动标志:

可设置的标识有:

boot:引导分区

esp:EFI系统分区(通常用于UEFI引导)

lvm:逻辑卷管理

raid:RAID分区

swap:交换分区

(parted) set <分区编号> <标识> on
显示分区表

显示当前的分区表:

(parted) print
给分区命名

给第一个分区命名:

(parted) name 1 my_partition
创建文件系统

在第一个分区上创建ext4文件系统:

(parted) mkfs 1 ext4
文件类型
  1. ext4

    • 目前最广泛使用的Linux文件系统,ext4具有良好的性能、稳定性和兼容性,支持大文件和大容量存储,适用于大多数应用场景。
  2. XFS

    • XFS是一个高性能的日志文件系统,擅长处理大文件和高并发环境,常用于需要高性能和可扩展性的服务器和存储系统。
  3. Btrfs

    • Btrfs(B-tree FS)支持快照、压缩、多设备存储池、在线文件系统检查和修复等高级功能,适用于需要高级数据管理和灵活性的环境。
  4. **ZFS on Linux (ZoL)**:

    • ZFS具有高度的数据完整性、快照和复制等高级特性,适用于高存储要求的环境,如服务器和大型存储系统。
检查分区对齐

检查第一个分区的对齐情况:

(parted) align-check optimal 1
尝试恢复丢失的分区

假设分区丢失,尝试在指定范围内恢复分区:

(parted) rescue 1MiB 1000MiB
退出parted

退出parted:

(parted) quit
验证操作

为了验证这些操作,可以使用lsblkfdisk -l来查看分区表:

sudo lsblk
sudo fdisk -l /dev/sdb

系统中没有parted工具,可以通过以下命令安装:

sudo apt-get install parted  # Debian/Ubuntu
sudo yum install parted # CentOS/RHEL
sudo dnf install parted # Fedora

LVM

LVM 是一种逻辑卷管理器,允许对硬盘和其他存储设备进行灵活的分区管理。

ps: 逻辑卷是由LVM创建和管理的虚拟存储单元,可以跨越多个物理磁盘或分区。逻辑卷是建立在物理卷之上,物理卷可以是整个磁盘分区或RAID设备。

为什么要用到LVM

有工具就是因为有需求,传统的分区因为固定分区大小,需要停机调整分区,影响服务可用。所以需要用到LVM,在线扩展逻辑卷的大小无需停机,只需要添加新的物理硬盘到卷组(VG)中,然后扩展逻辑卷(LV)大小。除此之外,还能够快速创建备份,不需要传统的长时间锁定数据库,还能够整合多个磁盘设备成为一个存储池,能够在数据迁移阶段,避免长时间停机。

怎么查看逻辑卷
了解大概的可用块设备

这张图片显示了lsblk命令的输出,列出了系统中的所有块设备及其挂载点。以下是对这张图片的详细描述:

  1. loop设备

    • loop0: 111.9M, 类型为loop,挂载在/snap/lxd/24322
    • loop1: 87M, 类型为loop,挂载在/snap/lxd/28373
    • loop2: 53.3M, 类型为loop,挂载在/snap/snapd/19457
    • loop3: 38.8M, 类型为loop,挂载在/snap/core20/1974
    • loop4: 63.9M, 类型为loop,挂载在/snap/core20/2318
    • loop5: 63.9M, 类型为loop,挂载在/snap/core20/2456
  2. 物理磁盘

    • sda

      : 25G, 类型为disk

      • sda1: 1M, 类型为part,没有挂载点(这可能是BIOS引导分区或其他用途的特殊分区)
      • sda2: 2G, 类型为part,挂载在/boot
      • sda3: 23G, 类型为part,没有挂载点(这可能是LVM物理卷)
  3. 逻辑卷管理器(LVM)

    • ubuntu–vg-ubuntu–lv: 12.5G, 类型为lvm,挂载在/
  4. 光驱设备

    • sr0: 2G, 类型为rom,没有挂载点
  • loop设备:这些是虚拟设备,通常用于挂载磁盘映像文件。

  • sda

    :这是系统中的一个物理磁盘,包含三个分区(sda1, sda2, sda3)。

    • sda1:非常小,只有1M,通常用于系统引导或其他特殊用途。
    • sda2:挂载在/boot,通常用于存放启动加载程序和内核。
    • sda3:较大,为23G,可能用于LVM管理。
  • LVM逻辑卷ubuntu--vg-ubuntu--lv是一个逻辑卷,挂载在根目录/。这表示LVM在管理这个分区的存储。

  • 光驱设备(sr0):显示为2G,未挂载。

image-20240709110545123

扩展逻辑卷大概步骤
  1. 添加新物理硬盘
  2. 将新的物理硬盘初始化为物理卷(PV)
  3. 将PV添加到现在的卷组VG
  4. 扩展逻辑卷LV的大小
  • 示例: 创建一个逻辑卷
# 创建物理卷
pvcreate /dev/sdb
# 创建卷组
vgcreate myvg /dev/sdb
# 创建逻辑卷
lvcreate -L 10G -n mylv myvg
# 格式化逻辑卷
mkfs.ext4 /dev/myvg/mylv
# 创建挂载点
mkdir /mnt/kalyantest
# 挂载载目录上(ps:一个逻辑卷只能挂载一个目录)
mount /mnt/kalyantest
实操

创建lvm分区以及扩容

  1. 首先增加物理盘
    image-20240709114035255
  2. 然后查询存储块

image-20240709114244596

  1. 为物理盘建立分区

image-20240709114615916

  1. 创建PV,VG,LV

image-20240709115109564

  1. 格式化lv
    ![image-20240709115309348](https://gcore.jsdelivr.net/gh/Kalyan-zitiu/TyporaIMG/img/image-20240709115309348.png)
    
  2. 创建挂载目录(也可挂载在你想挂载的地方),并进行挂载(ps:记得修改etc/fstab文件,不然重启会丢失mount点)

image-20240709115612877