1. 引言:为什么要学习linux磁盘管理?
在linux系统中,磁盘是存储数据的核心硬件,无论是服务器部署、日常使用还是开发环境配置,都离不开磁盘管理。常见场景包括:
- 新服务器添加硬盘后,需要分区格式化才能存储数据;
- 系统磁盘空间不足时,需扩展分区或挂载新磁盘;
- 为不同数据类型(如系统文件、数据库、日志)划分独立分区,提升安全性和性能。
磁盘管理的核心流程可概括为:识别磁盘 → 分区 → 格式化 → 挂载,这四个步骤环环相扣。本文将全程以实操为主,带你从零掌握每个环节的具体操作。
2. 磁盘管理基础概念(先搞懂这些再动手)
在动手操作前,先明确几个关键概念,避免踩坑:
2.1 磁盘与分区表
- 磁盘标识:linux中磁盘以
/dev/sdx(sata/scsi接口)或/dev/nvmexny(nvme接口)命名,如/dev/sda(第一块sata硬盘)、/dev/nvme0n1(第一块nvme硬盘)。 - 分区表类型:磁盘必须先创建分区表,才能划分分区,主流类型有两种:
| 分区表类型 | 支持最大磁盘容量 | 最大分区数 | 适用场景 |
|---|---|---|---|
| mbr(master boot record) | 2tb | 4个主分区(或3主+1扩展分区) | 旧设备、小容量磁盘 |
| gpt(guid partition table) | 18eb | 理论无限制(默认128个) | 新设备、大容量磁盘(推荐) |
2.2 分区与文件系统
- 分区:将一块物理磁盘划分为多个逻辑区域(如
/dev/sda1是第一块sata硬盘的第一个分区),每个分区独立使用。 - 文件系统:分区后需格式化(创建文件系统),才能存储文件。linux主流文件系统:
| 文件系统 | 特点 | 适用场景 |
|---|---|---|
| ext4 | 稳定、兼容好、支持日志 | 系统分区、数据分区(通用首选) |
| xfs | 高性能、支持大容量、适合并行i/o | 服务器数据分区、数据库存储 |
| btrfs | 支持快照、 raid、动态扩容 | 需要高级功能的场景(如docker存储) |
| vfat | 跨平台兼容(windows/linux) | u盘、移动硬盘(小文件存储) |
2.3 挂载的核心逻辑
linux中,分区不会自动被系统识别,需通过“挂载”将分区关联到某个目录(如 /data),此后访问该目录即操作对应分区。关键概念:
- 挂载点:用于关联分区的目录(如
/mnt/disk1),必须是空目录; - 临时挂载:重启系统后失效(
mount命令); - 永久挂载:通过
/etc/fstab配置,重启后自动生效(推荐)。
3. 第一步:识别磁盘(查看系统中的磁盘与分区)
在进行任何操作前,先确认系统已识别新磁盘,常用命令如下:
3.1lsblk:直观查看磁盘与分区结构
lsblk(list block devices)是最常用的磁盘查看工具,输出清晰易懂:
lsblk
输出示例(解读关键信息):
name maj:min rm size ro type mountpoint sda 8:0 0 100g 0 disk ├─sda1 8:1 0 500m 0 part /boot # 系统引导分区 └─sda2 8:2 0 99.5g 0 part / # 根分区 sdb 8:16 0 200g 0 disk # 新添加的未分区磁盘(目标操作磁盘) nvme0n1 259:0 0 512g 0 disk └─nvme0n1p1 259:1 0 512g 0 part /home # nvme硬盘的/home分区
type列:disk表示物理磁盘,part表示分区;mountpoint列:显示已挂载的目录(空表示未挂载)。
3.2fdisk -l:查看磁盘详细信息(含分区表)
fdisk 是传统磁盘工具,可查看磁盘容量、分区表类型等细节:
sudo fdisk -l # 需要root权限
输出示例(重点关注新磁盘 /dev/sdb):
disk /dev/sdb: 200 gib, 214748364800 bytes, 419430400 sectors disk model: virtual disk units: sectors of 1 * 512 = 512 bytes sector size (logical/physical): 512 bytes / 512 bytes i/o size (minimum/optimal): 512 bytes / 512 bytes disklabel type: gpt # 分区表类型为gpt disk identifier: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- 若
disklabel type显示dos,则为mbr分区表; - 新磁盘未分区时,会提示“no partitions”。
4. 第二步:磁盘分区(mbr/gpt分区实操)
分区工具选择:
fdisk:支持mbr和gpt分区表,操作简单(推荐入门);parted:支持大磁盘和gpt,功能更强大(适合高级场景)。
本文以 gpt分区表(推荐新磁盘使用)为例,演示分区流程,同时兼顾mbr分区方法。
4.1 用fdisk给新磁盘(/dev/sdb)创建gpt分区
4.1.1 进入fdisk工具(指定目标磁盘)
sudo fdisk /dev/sdb # 注意:是/dev/sdb(磁盘),不是分区(如/dev/sdb1)
进入后终端提示 command (m for help):,输入对应命令操作。
4.1.2 关键操作步骤(分步详解)
- 查看帮助:输入
m,查看所有支持的命令(无需记忆,按需查阅); - 转换分区表类型(若为mbr需转换):
若磁盘原是mbr分区表,输入g转换为gpt(新磁盘默认可能无分区表,输入g会创建gpt):
command (m for help): g created a new gpt disklabel (guid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
(若需创建mbr分区表,输入 o 即可);
创建分区:输入 n 新建分区,按提示配置:
command (m for help): n
partition number (1-128, default 1): # 分区号(默认1,直接回车)
first sector (2048-419430399, default 2048): # 起始扇区(默认2048,回车)
last sector, +/-sectors or +/-size{k,m,g,t,p} (2048-419430399, default 419430399): +100g # 分区大小(如+100g表示100gb,直接回车则占满剩余空间)
created a new partition 1 of type 'linux filesystem' and of size 100 gib.
- 分区类型默认是
linux filesystem(适用于ext4/xfs等); - 若需创建多个分区,重复
n命令即可(如再创建一个50gb分区);
查看分区结果:输入 p 查看已创建的分区:
command (m for help): p disk /dev/sdb: 200 gib, 214748364800 bytes, 419430400 sectors ... device start end sectors size type /dev/sdb1 2048 209717247 209715200 100g linux filesystem /dev/sdb2 209717248 314574847 104857600 50g linux filesystem
保存分区并退出:输入 w 保存配置(若想放弃,输入 q 退出):
command (m for help): w the partition table has been altered. calling ioctl() to re-read partition table. syncing disks.
验证分区:退出后执行 lsblk,确认分区已创建:
lsblk /dev/sdb
输出应显示 /dev/sdb1 和 /dev/sdb2 分区。
4.2 用parted工具创建分区(进阶)
parted 支持交互式和命令行模式,适合大容量磁盘分区,以创建100gb xfs分区为例:
sudo parted /dev/sdb # 进入parted交互式模式 (parted) mklabel gpt # 创建gpt分区表(若已存在可跳过) (parted) mkpart primary xfs 0% 100gb # 创建主分区,文件系统xfs,大小0%-100gb (parted) print # 查看分区 (parted) quit # 退出
5. 第三步:格式化分区(创建文件系统)
分区后必须格式化,即创建文件系统,才能存储数据。使用 mkfs 命令(make filesystem),格式为 mkfs.文件系统类型 分区路径。
5.1 常用格式化命令(代码示范)
5.1.1 格式化为ext4(通用首选)
# 格式化/dev/sdb1为ext4(-f强制格式化,-l添加卷标,方便识别) sudo mkfs.ext4 -f -l data1 /dev/sdb1
输出示例(显示格式化进度和信息):
mke2fs 1.46.5 (30-dec-2021) creating filesystem with 26214400 4k blocks and 6553600 inodes filesystem uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx superblock backups stored on blocks: ... writing inode tables: done creating journal (131072 blocks): done writing superblocks and filesystem accounting information: done
5.1.2 格式化为xfs(高性能场景)
xfs适合大文件和高并发i/o,常用于服务器数据分区:
# 格式化/dev/sdb2为xfs(-f强制格式化,-l卷标) sudo mkfs.xfs -f -l data2 /dev/sdb2
5.1.3 格式化为vfat(跨平台兼容)
适合u盘或移动硬盘(windows和linux均可访问):
sudo mkfs.vfat -f 32 /dev/sdb3 # -f 32表示fat32格式
5.2 关键注意事项
- 格式化会清除分区内所有数据,务必确认分区无重要数据;
- 卷标(
-l参数)可通过blkid命令查看,方便识别分区; - 不要格式化系统分区(如
/dev/sda1、/dev/sda2),否则会导致系统崩溃。
6. 第四步:挂载磁盘(临时与永久挂载)
格式化后,需将分区挂载到目录才能访问,分为临时挂载(重启失效)和永久挂载(推荐)。
6.1 临时挂载(快速测试)
使用 mount 命令,格式:sudo mount 分区路径 挂载点目录。
6.1.1 操作步骤
创建挂载点目录(必须是空目录):
sudo mkdir -p /mnt/data1 # /mnt/data1为挂载点,可自定义(如/home/ubuntu/data) sudo mkdir -p /mnt/data2
挂载分区:
# 挂载ext4分区/dev/sdb1到/mnt/data1 sudo mount /dev/sdb1 /mnt/data1 # 挂载xfs分区/dev/sdb2到/mnt/data2 sudo mount /dev/sdb2 /mnt/data2
验证挂载:
# 方法1:df -h 查看挂载状态(-h人类可读格式) df -h
输出示例(可见 /dev/sdb1 和 /dev/sdb2 已挂载):
filesystem size used avail use% mounted on /dev/sda2 995g 100g 845g 11% / /dev/sdb1 100g 20k 100g 1% /mnt/data1 /dev/sdb2 50g 53m 50g 1% /mnt/data2
或用 mount 命令直接查看:
mount | grep /dev/sdb
6.2 永久挂载(重启不失效,核心推荐)
临时挂载重启后会失效,需通过 /etc/fstab 文件配置永久挂载,步骤如下:
6.2.1 步骤1:获取分区uuid(推荐用uuid挂载,更稳定)
uuid是分区的唯一标识,比 /dev/sdb1 更稳定(磁盘顺序变化不会影响挂载):
blkid # 查看所有分区的uuid和文件系统
输出示例(重点复制目标分区的uuid):
/dev/sdb1: label="data1" uuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" type="ext4" partuuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /dev/sdb2: label="data2" uuid="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" type="xfs" partuuid="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
6.2.2 步骤2:编辑/etc/fstab文件
/etc/fstab 是系统启动时自动挂载的配置文件,格式为:uuid=xxx 挂载点 文件系统类型 挂载参数 0 0。
备份fstab文件(重要!防止配置错误):
sudo cp /etc/fstab /etc/fstab.bak
编辑fstab:
sudo vim /etc/fstab # 用vim编辑,新手可改用nano:sudo nano /etc/fstab
添加挂载配置(在文件末尾添加以下内容):
# 挂载/dev/sdb1(ext4)到/mnt/data1 uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data1 ext4 defaults 0 2 # 挂载/dev/sdb2(xfs)到/mnt/data2 uuid=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy /mnt/data2 xfs defaults 0 2
配置参数解读:
defaults:默认挂载参数(rw、suid、dev、exec、auto、nouser、async);- 第5列(0):是否dump备份(0=不备份,1=备份);
- 第6列(2):是否开机自检(0=不自检,1=优先自检,2=次要自检)。
6.2.3 步骤3:验证配置并生效
测试挂载配置是否正确(关键!避免配置错误导致系统无法启动):
sudo mount -a # 加载/etc/fstab中的所有配置,无报错则正确
若报错,检查uuid、挂载点、文件系统类型是否正确;
验证挂载:再次执行 df -h,确认分区已挂载;
重启测试(可选):重启系统后,执行 df -h 确认挂载依然生效:
sudo reboot
7. 常用磁盘管理辅助命令(必备工具)
7.1 查看磁盘使用情况
df -h # 查看所有挂载分区的使用情况 du -sh /mnt/data1/* # 查看挂载点下各文件/目录的大小(-s汇总,-h人类可读)
7.2 查看分区uuid和文件系统
blkid # 快速查看所有分区的uuid、label、type
7.3 卸载分区(如需修改或移除磁盘)
# 卸载/mnt/data1(确保当前不在该目录下) sudo umount /mnt/data1 # 或通过分区路径卸载 sudo umount /dev/sdb1
- 卸载前需退出挂载点目录(如当前在
/mnt/data1,需先执行cd ~); - 若提示“device is busy”(设备忙),用
fuser -m /mnt/data1查看占用进程,杀死进程后再卸载。
7.4 扩展分区(磁盘空间不足时)
若分区空间不够,可扩展分区(以ext4为例):
- 先通过分区工具(fdisk/parted)扩展分区大小(需先删除相邻空闲分区);
- 扩展文件系统:
# 扩展ext4分区(需先卸载或在线扩展) sudo resize2fs /dev/sdb1 # 扩展xfs分区(无需卸载) sudo xfs_growfs /mnt/data2
8. 常见问题排查(避坑指南)
8.1 挂载失败:“mount: /mnt/data1: can’t find in /etc/fstab.”
- 原因:使用
mount 挂载点时,未在/etc/fstab配置,需指定分区路径:sudo mount /dev/sdb1 /mnt/data1。
8.2 重启后挂载失效
- 原因:未配置
/etc/fstab,或配置错误; - 解决:按6.2节重新配置
/etc/fstab,执行sudo mount -a测试。
8.3 系统无法启动(因fstab配置错误)
- 原因:
/etc/fstab中uuid、挂载点或文件系统类型错误; - 解决:
- 启动时按
e进入grub编辑模式; - 在linux内核行末尾添加
init=/bin/bash,按ctrl+x启动; - 执行
mount -o remount,rw /挂载根分区为可写; - 编辑fstab:
vim /etc/fstab,修正错误配置; - 重启:
reboot。
- 启动时按
8.4 格式化时提示“device or resource busy”
- 原因:分区已挂载,无法格式化;
- 解决:先卸载分区:
sudo umount /dev/sdb1,再格式化。
9. 总结与实操建议
linux磁盘管理的核心流程是 “识别→分区→格式化→挂载”,关键要点总结:
- 新磁盘优先选择gpt分区表(支持大容量和多分区);
- 文件系统推荐ext4(通用)或xfs(高性能);
- 永久挂载必须配置
/etc/fstab,且务必先用mount -a测试; - 操作前备份重要数据,避免误格式化系统分区。
实操建议:
- 新手可先用虚拟机(如vmware、virtualbox)添加虚拟磁盘练习,避免损坏物理机数据;
- 实际部署时,为系统分区、数据分区、日志分区划分独立磁盘/分区,提升安全性和可维护性;
- 定期用
df -h查看磁盘使用情况,避免磁盘满导致服务异常。
以上就是linux磁盘管理之分区、格式化与挂载磁盘的方法的详细内容,更多关于linux分区、格式化与挂载磁盘的资料请关注代码网其它相关文章!
发表评论