在 Linux 系统下管理多块磁盘是一个非常常见的系统管理任务。这篇指南将从最基础的磁盘识别,到分区、格式化、挂载,再到多磁盘管理的高级方案(如 RAID 和 LVM),为你提供一个全面而详细的讲解。
无论你是什么需求,管理新磁盘通常都遵循以下几个核心步骤:
对于多磁盘场景,我们还会探讨如何将它们组合起来使用。
当你向 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
是已经在使用中的系统盘,有 sda1
和 sda2
两个分区。sdb
和 sdc
是两块新的 500G 硬盘,它们还没有分区和挂载点(MOUNTPOINT为空)。注意:
/dev/sdX
(a
, b
, c
...)。/dev/nvmeXnY
(例如 /dev/nvme0n1
)。识别到磁盘后,我们需要对其进行分区。分区就像是把一块大蛋糕切成几小块,每一小块都可以有不同的用途。
常用的分区工具有:
fdisk
: 经典、常用的命令行工具,支持 MBR 和 GPT 两种分区表格式。gdisk
: 专门用于 GPT 分区表的 fdisk
版本,操作体验类似。parted
: 更强大的工具,支持脚本化操作,但误操作风险也更高。分区表格式简介:
使用 fdisk
进行分区(以 /dev/sdb
为例):
启动 fdisk:
bashsudo fdisk /dev/sdb
进入 fdisk 交互界面后,输入 m
查看帮助。
创建 GPT 分区表:
输入 g
创建一个新的空的 GPT 分区表。
创建新分区:
n
(new)。+100G
表示创建一个 100G 的分区,或者直接回车使用全部剩余空间。查看分区结果:
输入 p
(print) 查看当前的分区布局。你会看到一个新的分区,如 /dev/sdb1
。
保存并退出:
确认无误后,输入 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
格式化过程很快,完成后分区就准备好了。
为了让操作系统能够访问这个文件系统,需要将它“挂载”到一个目录上。这个目录被称为“挂载点”。
创建挂载点目录:
bashsudo mkdir /data1
sudo mkdir /data2
手动挂载:
bash# 将 /dev/sdb1 挂载到 /data1
sudo mount /dev/sdb1 /data1
# 将 /dev/sdc1 挂载到 /data2
sudo mount /dev/sdc1 /data2
验证挂载:
使用 df -h
或 lsblk
查看挂载情况。
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
文件。
获取分区的 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。
编辑 /etc/fstab
文件:
bashsudo 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
。测试 fstab 配置:
运行 sudo mount -a
命令。如果没有报错,说明你的配置是正确的。这个命令会挂载 fstab
中所有未挂载的条目。
至此,你已经完成了将两块新硬盘作为独立空间进行管理的全过程。
当你有多个磁盘时,将它们独立使用并不总是最优选择。你可能希望将它们合并成一个更大的存储空间,或者为了数据安全做冗余备份。这时就需要用到 RAID 或 LVM。
mdadm
)RAID (Redundant Array of Independent Disks) 可以将多块物理磁盘组合成一个逻辑磁盘,以实现性能提升、数据冗余或二者兼得。
常见 RAID 级别:
示例:使用 mdadm
创建 RAID 1
假设我们用 /dev/sdb1
和 /dev/sdc1
创建一个 RAID 1 阵列。
安装 mdadm
:
bashsudo apt update && sudo apt install mdadm # Debian/Ubuntu
sudo yum install mdadm # CentOS/RHEL
创建 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
查看阵列状态:
bashsudo mdadm --detail /dev/md0
cat /proc/mdstat
你会看到阵列正在同步(re-syncing),等待它完成。
格式化和挂载 RAID 设备:
现在 /dev/md0
就如同一个普通的块设备,可以对它进行格式化和挂载。
bashsudo mkfs.ext4 /dev/md0
sudo mkdir /data_raid
sudo mount /dev/md0 /data_raid
配置自动挂载和 mdadm
配置:
/dev/md0
的挂载信息(使用 blkid
获取其 UUID)写入 /etc/fstab
。mdadm
配置,以便系统重启时能自动识别和启动 RAID 阵列。
bashsudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u # 对于Debian/Ubuntu,更新启动镜像
LVM 是一个比 RAID 更灵活的存储管理方案。它在物理磁盘和文件系统之间增加了一个逻辑层,允许你轻松地创建、调整、合并和快照存储卷,而无需关心底层的物理磁盘布局。
LVM 核心概念:
LVM 的巨大优势:
示例:使用 LVM 合并 /dev/sdb1
和 /dev/sdc1
安装 LVM 工具:
bashsudo apt install lvm2 # Debian/Ubuntu
sudo yum install lvm2 # CentOS/RHEL
创建物理卷 (PV):
bashsudo pvcreate /dev/sdb1 /dev/sdc1
# 查看 PV
sudo pvs
创建卷组 (VG):
将上面创建的两个 PV 加入到一个名为 my_storage_vg
的卷组中。
bashsudo vgcreate my_storage_vg /dev/sdb1 /dev/sdc1
# 查看 VG
sudo vgs
现在你有了一个大约 1TB (500G+500G) 的存储池。
创建逻辑卷 (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
)。
格式化和挂载 LV: 这个设备就和普通分区一样使用。
bashsudo mkfs.ext4 /dev/my_storage_vg/data_lv
sudo mkdir /data_lvm
sudo mount /dev/my_storage_vg/data_lv /data_lvm
配置自动挂载:
同样,将 /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 许可协议。转载请注明出处!