2025-09-07
环境配置
00

目录

核心流程概览
第一步:识别磁盘
第二步:磁盘分区
第三步:格式化分区(创建文件系统)
第四步:挂载分区
第五步:配置自动挂载
高级篇:多磁盘整合方案
方案一:Software RAID (使用 mdadm)
总结与选择建议

在 Linux 系统下管理多块磁盘是一个非常常见的系统管理任务。这篇指南将从最基础的磁盘识别,到分区、格式化、挂载,再到多磁盘管理的高级方案(如 RAID 和 LVM),为你提供一个全面而详细的讲解。

核心流程概览

无论你是什么需求,管理新磁盘通常都遵循以下几个核心步骤:

  1. 识别磁盘 (Discovery):找出系统新接入的物理磁盘。
  2. 分区 (Partitioning):在磁盘上划分一个或多个区域(分区)。
  3. 格式化 (Formatting):在分区上创建文件系统,使其能够存储文件。
  4. 挂载 (Mounting):将格式化后的分区关联到系统的一个目录下,以便访问。
  5. 配置自动挂载 (Persistence):设置系统在开机时自动挂载该分区。

对于多磁盘场景,我们还会探讨如何将它们组合起来使用。


第一步:识别磁盘

当你向 Linux 系统中添加一块新硬盘(物理或虚拟)后,首先需要确认系统是否识别到了它。

常用的命令有:

  • lsblk (List Block Devices): 这是最常用、最直观的命令。
  • fdisk -l: 列出所有磁盘及其分区表信息。
  • parted -l: 功能与 fdisk 类似,更强大。

示例:

假设你有一块系统盘 /dev/sda,然后新加了两块硬盘。

bash
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part / sdb 8:16 0 500G 0 disk <-- 这是新加的第一块盘 sdc 8:32 0 500G 0 disk <-- 这是新加的第二块盘

从输出中可以看到:

  • sda 是已经在使用中的系统盘,有 sda1sda2 两个分区。
  • sdbsdc 是两块新的 500G 硬盘,它们还没有分区和挂载点(MOUNTPOINT为空)。

注意:

  • 在传统的 SCSI/SATA/USB 接口下,磁盘通常被命名为 /dev/sdX (a, b, c...)。
  • 在 NVMe 接口下,磁盘通常被命名为 /dev/nvmeXnY (例如 /dev/nvme0n1)。

第二步:磁盘分区

识别到磁盘后,我们需要对其进行分区。分区就像是把一块大蛋糕切成几小块,每一小块都可以有不同的用途。

常用的分区工具有:

  • fdisk: 经典、常用的命令行工具,支持 MBR 和 GPT 两种分区表格式。
  • gdisk: 专门用于 GPT 分区表的 fdisk 版本,操作体验类似。
  • parted: 更强大的工具,支持脚本化操作,但误操作风险也更高。

分区表格式简介:

  • MBR (Master Boot Record): 老旧格式,最大支持 2TB 的磁盘,最多 4 个主分区。
  • GPT (GUID Partition Table): 现代格式,几乎没有磁盘大小和分区数量的限制。强烈推荐使用 GPT

使用 fdisk 进行分区(以 /dev/sdb 为例):

  1. 启动 fdisk:

    bash
    sudo fdisk /dev/sdb
  2. 进入 fdisk 交互界面后,输入 m 查看帮助。

  3. 创建 GPT 分区表: 输入 g 创建一个新的空的 GPT 分区表。

  4. 创建新分区:

    • 输入 n (new)。
    • 按回车接受默认的分区号(例如 1)。
    • 按回车接受默认的起始扇区。
    • 输入分区大小,例如 +100G 表示创建一个 100G 的分区,或者直接回车使用全部剩余空间。
  5. 查看分区结果: 输入 p (print) 查看当前的分区布局。你会看到一个新的分区,如 /dev/sdb1

  6. 保存并退出: 确认无误后,输入 w (write) 将更改写入磁盘并退出。如果不想保存,输入 q (quit)。

现在,如果你再次运行 lsblk,会看到 /dev/sdb 下多了一个 /dev/sdb1 分区。

bash
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ... sdb 8:16 0 500G 0 disk └─sdb1 8:17 0 500G 0 part <-- 新创建的分区 sdc 8:32 0 500G 0 disk

/dev/sdc 也执行类似的操作,创建分区 /dev/sdc1


第三步:格式化分区(创建文件系统)

分区只是划分了裸空间,还需要在上面创建一个文件系统来管理文件。

常见文件系统类型:

  • ext4: Linux 最常用、最成熟的文件系统,兼容性好,性能稳定。
  • XFS: 适合处理大文件和高并发 I/O 的场景,如数据库、媒体服务器。
  • Btrfs, ZFS: 更现代的文件系统,支持快照、数据压缩等高级功能。

使用 mkfs 命令进行格式化(以 ext4 为例):

bash
# 格式化 /dev/sdb1 分区为 ext4 文件系统 sudo mkfs.ext4 /dev/sdb1 # 格式化 /dev/sdc1 分区为 xfs 文件系统 sudo mkfs.xfs /dev/sdc1

格式化过程很快,完成后分区就准备好了。


第四步:挂载分区

为了让操作系统能够访问这个文件系统,需要将它“挂载”到一个目录上。这个目录被称为“挂载点”。

  1. 创建挂载点目录:

    bash
    sudo mkdir /data1 sudo mkdir /data2
  2. 手动挂载:

    bash
    # 将 /dev/sdb1 挂载到 /data1 sudo mount /dev/sdb1 /data1 # 将 /dev/sdc1 挂载到 /data2 sudo mount /dev/sdc1 /data2
  3. 验证挂载: 使用 df -hlsblk 查看挂载情况。

    bash
    $ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sdb1 492G 72M 467G 1% /data1 /dev/sdc1 499G 196M 499G 1% /data2

手动挂载是临时的,系统重启后会失效。


第五步:配置自动挂载

要让系统开机自动挂载,需要编辑 /etc/fstab 文件。

  1. 获取分区的 UUID: 强烈建议使用 UUID 而不是设备名 (/dev/sdb1),因为设备名在重启后可能会改变(比如你插拔了硬盘),而 UUID 是唯一的、固定的。

    bash
    $ sudo blkid /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-1234-567890abcdef" TYPE="ext4" PARTUUID="..." /dev/sdc1: UUID="b2c3d4e5-f6a7-8901-2345-67890abcdef1" TYPE="xfs" PARTUUID="..."

    复制你需要的 UUID。

  2. 编辑 /etc/fstab 文件:

    bash
    sudo nano /etc/fstab

    在文件末尾添加以下行:

    # <device> <mount_point> <type> <options> <dump> <pass> UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef /data1 ext4 defaults 0 2 UUID=b2c3d4e5-f6a7-8901-2345-67890abcdef1 /data2 xfs defaults 0 2
    • <options>: defaults 通常够用,它包含了一组常用选项。
    • <dump>: 0 表示不备份。
    • <pass>: 2 表示开机时检查该文件系统,根目录通常是 1
  3. 测试 fstab 配置: 运行 sudo mount -a 命令。如果没有报错,说明你的配置是正确的。这个命令会挂载 fstab 中所有未挂载的条目。

至此,你已经完成了将两块新硬盘作为独立空间进行管理的全过程。


高级篇:多磁盘整合方案

当你有多个磁盘时,将它们独立使用并不总是最优选择。你可能希望将它们合并成一个更大的存储空间,或者为了数据安全做冗余备份。这时就需要用到 RAID 或 LVM。

方案一:Software RAID (使用 mdadm)

RAID (Redundant Array of Independent Disks) 可以将多块物理磁盘组合成一个逻辑磁盘,以实现性能提升、数据冗余或二者兼得。

常见 RAID 级别:

  • RAID 0 (条带化):
    • 原理: 数据被分成块,交错写入所有磁盘。
    • 优点: 读写速度极快(接近所有磁盘速度之和)。
    • 缺点: 没有任何冗余。任何一块磁盘损坏,所有数据都会丢失。
    • 场景: 需要极致性能的临时存储,如视频剪辑的暂存区。
  • RAID 1 (镜像):
    • 原理: 数据被完整地复制到每一块磁盘上。
    • 优点: 高冗余。只要有一块磁盘正常,数据就是安全的。
    • 缺点: 磁盘利用率低(例如2块500G盘组成RAID 1,可用空间只有500G)。写入性能略有下降。
    • 场景: 存储关键数据,如操作系统、数据库。
  • RAID 5 (带奇偶校验的条带化):
    • 原理: 数据条带化存储,同时将奇偶校验信息分布在所有磁盘上。
    • 优点: 兼顾了性能、容量和冗余。允许一块磁盘损坏。
    • 缺点: 写入性能比 RAID 0 差,磁盘损坏后重建过程 I/O 压力大。
    • 要求: 至少 3 块磁盘。
  • RAID 10 (RAID 1+0):
    • 原理: 先做镜像(RAID 1),再做条带化(RAID 0)。
    • 优点: 兼具 RAID 1 的高冗余和 RAID 0 的高性能。
    • 缺点: 成本高,至少需要 4 块磁盘,且只有一半的可用空间。

示例:使用 mdadm 创建 RAID 1 假设我们用 /dev/sdb1/dev/sdc1 创建一个 RAID 1 阵列。

  1. 安装 mdadm:

    bash
    sudo apt update && sudo apt install mdadm # Debian/Ubuntu sudo yum install mdadm # CentOS/RHEL
  2. 创建 RAID 阵列:

    bash
    # --create: 创建 # /dev/md0: 阵列设备名 # --level=1: RAID 级别为 1 # --raid-devices=2: 使用2个设备 sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
  3. 查看阵列状态:

    bash
    sudo mdadm --detail /dev/md0 cat /proc/mdstat

    你会看到阵列正在同步(re-syncing),等待它完成。

  4. 格式化和挂载 RAID 设备: 现在 /dev/md0 就如同一个普通的块设备,可以对它进行格式化和挂载。

    bash
    sudo mkfs.ext4 /dev/md0 sudo mkdir /data_raid sudo mount /dev/md0 /data_raid
  5. 配置自动挂载和 mdadm 配置:

    • /dev/md0 的挂载信息(使用 blkid 获取其 UUID)写入 /etc/fstab
    • 保存 mdadm 配置,以便系统重启时能自动识别和启动 RAID 阵列。
      bash
      sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf sudo update-initramfs -u # 对于Debian/Ubuntu,更新启动镜像

方案二:LVM (Logical Volume Manager)

LVM 是一个比 RAID 更灵活的存储管理方案。它在物理磁盘和文件系统之间增加了一个逻辑层,允许你轻松地创建、调整、合并和快照存储卷,而无需关心底层的物理磁盘布局。

LVM 核心概念:

  • PV (Physical Volume, 物理卷): 物理磁盘或分区,是 LVM 的基本构建块。
  • VG (Volume Group, 卷组): 一个或多个 PV 组成的存储池。你可以把它想象成一个大的虚拟硬盘。
  • LV (Logical Volume, 逻辑卷): 从 VG 中划分出的逻辑分区。你可以把它想象成普通分区,但它可以动态调整大小。

LVM 的巨大优势:

  • 弹性扩容: 当 VG 空间不足时,只需添加一块新硬盘(创建为 PV),将其加入 VG,然后就能扩展已有的 LV。
  • 在线调整: 可以不卸载文件系统(取决于文件系统类型)的情况下,增大或缩小 LV。
  • 快照: 可以为 LV 创建一个即时的时间点快照,用于备份或测试,而不影响原始数据。

示例:使用 LVM 合并 /dev/sdb1/dev/sdc1

  1. 安装 LVM 工具:

    bash
    sudo apt install lvm2 # Debian/Ubuntu sudo yum install lvm2 # CentOS/RHEL
  2. 创建物理卷 (PV):

    bash
    sudo pvcreate /dev/sdb1 /dev/sdc1 # 查看 PV sudo pvs
  3. 创建卷组 (VG): 将上面创建的两个 PV 加入到一个名为 my_storage_vg 的卷组中。

    bash
    sudo vgcreate my_storage_vg /dev/sdb1 /dev/sdc1 # 查看 VG sudo vgs

    现在你有了一个大约 1TB (500G+500G) 的存储池。

  4. 创建逻辑卷 (LV):my_storage_vg 中划分出一个 800G 的逻辑卷,名为 data_lv

    bash
    # -n: 名字, -L: 大小 sudo lvcreate -n data_lv -L 800G my_storage_vg # 或者使用全部空间: -l 100%FREE # sudo lvcreate -n data_lv -l 100%FREE my_storage_vg # 查看 LV sudo lvs

    现在,你获得了一个新的设备 /dev/my_storage_vg/data_lv(或 /dev/mapper/my_storage_vg-data_lv)。

  5. 格式化和挂载 LV: 这个设备就和普通分区一样使用。

    bash
    sudo mkfs.ext4 /dev/my_storage_vg/data_lv sudo mkdir /data_lvm sudo mount /dev/my_storage_vg/data_lv /data_lvm
  6. 配置自动挂载: 同样,将 /dev/my_storage_vg/data_lv 的挂载信息写入 /etc/fstab。LVM 的设备路径是稳定的,可以直接使用,但用 UUID 仍然是最佳实践。


总结与选择建议

特性独立磁盘RAID (软件)LVM
目标简单、隔离的空间性能提升或数据冗余灵活、可扩展的存储管理
灵活性低 (阵列创建后难更改)非常高 (可在线调整、扩展)
性能单盘性能RAID 0/10 极高取决于底层物理盘,无额外提升
冗余性RAID 1/5/6/10 提供本身不提供 (但可建在RAID之上)
复杂度中等中等
典型场景挂载多个独立的数据目录数据库、关键应用、高性能计算文件服务器、虚拟机存储、需要频繁扩容的场景

最佳实践组合:RAID + LVM 在生产环境中,最常见和最强大的组合是先用 mdadm 创建一个 RAID 阵列(如 RAID 1 或 RAID 5)来保证数据的冗余和性能,然后在这个 RAID 设备 (/dev/md0) 上创建 PV,再构建 VG 和 LV。

这样,你既享受了 RAID 带来的底层数据安全,又获得了 LVM 带来的上层管理灵活性。

希望这个详细的指南能帮助你自如地在 Linux 下管理多块磁盘!如果你有具体场景的问题,随时可以提出来。

本文作者:James

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!