Linux 磁盘分区与挂载实操,从此不再迷糊
背景与适用场景
磁盘分区和挂载是 Linux 运维中最基础但也最容易出问题的操作之一。新服务器上线需要分区格式化、数据盘需要挂载、磁盘满了需要扩容、磁盘故障需要更换,这些场景每个运维工程师都会遇到。
磁盘分区是将一块物理磁盘划分成多个逻辑区域的过程,每个区域可以有不同的文件系统、不同的挂载点、不同的用途。挂载则是将分区关联到目录,使得该目录可以访问分区上的数据。
常见的分区场景包括:新服务器初始化、数据盘挂载、迁移数据到新磁盘、扩容现有分区、修复损坏的文件系统等。挂载相关的操作则包括手动挂载、自动挂载配置、挂载选项调整、卸载等。
本文面向初中级运维工程师,详细讲解 Linux 磁盘分区的概念、工具选择、分区方案,以及挂载的各种场景和操作步骤。
第一部分:磁盘分区基础概念
磁盘和分区的关系
Linux 中一切皆文件,磁盘设备也是如此。常见的磁盘设备文件:
/dev/sda:第一块 SCSI/SATA 磁盘/dev/sdb:第二块 SCSI/SATA 磁盘
分区则是在磁盘上划分的逻辑区域,分区编号从 1 开始:
分区表类型
MBR 分区表
MBR(Master Boot Record)是传统的分区表格式,位于磁盘的第一个扇区(512 字节)。
特点:
- 最多支持 4 个主分区,或 3 个主分区 + 1 个扩展分区
限制:
GPT 分区表
GPT(GUID Partition Table)是现代分区表格式,是 UEFI 规范的一部分。
特点:
- 理论上支持无限多个分区(实际受操作系统限制,Linux 通常限制为 128 个)
- 需要 UEFI 引导或 BIOS + GPT 兼容模式
选择建议:
- 磁盘容量小于 2TB:可以使用 MBR 或 GPT
分区类型
Linux 常见的分区类型(MBR 分区表):
Linux 常见的分区类型(GPT 分区表):
| | |
|---|
| 28732AC1-11D5-4D0C-8A33-4BB7C3D0D0B7 | | |
| 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F | | |
| E6D6D379-F507-44C2-A23C-238F2A3AF928 | | |
| A2D3D0F5-B8C4-45C8-92D2-5D6B5E7F8A9B | | |
查看磁盘和分区
查看所有磁盘设备:
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
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 7.8G 0 lvm [SWAP]
└─centos-home 253:2 0 41.2G 0 lvm /home
sdb 8:16 0 500G 0 disk
sr0 11:0 1 1024M 0 rom
查看磁盘详细信息:
fdisk -l /dev/sda
查看分区表类型:
parted /dev/sda print | grep "Partition Table"
查看 SCSI 设备:
cat /proc/scsi/scsi
第二部分:分区工具详解
fdisk 使用详解
fdisk 是最传统的分区工具,适合 MBR 分区表。
查看分区表
fdisk -l /dev/sda
进入交互模式
fdisk /dev/sdb
交互命令:
新建分区示例
# 进入 fdisk 交互界面
fdisk /dev/sdb
# 输入 m 查看帮助
Command (m forhelp): m
# 输入 p 查看当前分区
Command (m forhelp): p
# 输入 n 新建分区
Command (m forhelp): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): +10G
# 输入 w 保存
Command (m forhelp): w
删除分区示例
fdisk /dev/sdb
Command (m forhelp): p # 先查看分区
Command (m forhelp): d # 删除分区
Partition number (1-4): 1 # 输入分区号
Command (m forhelp): w # 保存
修改分区类型示例
fdisk /dev/sdb
Command (m forhelp): t # 修改类型
Partition number (1-4): 1 # 选择分区
Hex code (type L to list codes): 8e # Linux LVM 类型码
Changed system type of partition 1 to 8e (Linux LVM)
Command (m forhelp): w # 保存
parted 使用详解
parted 是更现代的分区工具,支持 MBR 和 GPT。
查看分区表
parted /dev/sdb print
选择磁盘
parted /dev/sdb
交互命令:
mklabel:创建分区表(msdos=gpt,gpt=gpt)
创建 GPT 分区表
parted /dev/sdb mklabel gpt
创建分区示例
# 创建主分区(GPT)
parted /dev/sdb mkpart primary xfs 0% 100%
# 创建分区并指定文件系统
parted /dev/sdb mkpart primary ext4 0% 50G
# 创建交换分区
parted /dev/sdb mkpart primary linux-swap 50G 60G
# 创建数据分区(使用剩余空间)
parted /dev/sdb mkpart primary xfs 60G 100%
删除分区
parted /dev/sdb rm 1 # 删除分区号 1
调整分区大小(谨慎操作)
# 先卸载
umount /dev/sdb1
# 调整大小
parted /dev/sdb resizepart 1 100G
gdisk 使用详解
gdisk 是专门用于 GPT 分区表的工具,界面和 fdisk 类似。
查看分区表
gdisk -l /dev/sdb
进入交互模式
gdisk /dev/sdb
交互命令:
创建 GPT 分区示例
gdisk /dev/sdb
Command (m forhelp): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 2048
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +50G
Current type is 'Linux filesystem'
Hex code or GUID (L to show all, Enter = 8300): 8300
Command (m forhelp): w
工具选择建议
第三部分:文件系统创建与格式化
常见文件系统
Linux 支持多种文件系统:
| | |
|---|
| | |
| | |
| | |
| | |
| | Linux 访问 Windows 分区(需要 ntfs-3g) |
| | |
创建 ext4 文件系统
# 格式化分区
mkfs.ext4 /dev/sdb1
# 指定卷标
mkfs.ext4 -L "data" /dev/sdb1
# 指定块大小(默认 4096 字节)
mkfs.ext4 -b 4096 /dev/sdb1
# 指定 inode 数量(默认自动计算)
mkfs.ext4 -N 1000000 /dev/sdb1
# 快速格式化(不检查坏块)
mkfs.ext4 -E lazy_itable_init=1 /dev/sdb1
# 完整格式化(带坏块检查)
mkfs.ext4 -c /dev/sdb1
创建 xfs 文件系统
# 格式化分区
mkfs.xfs /dev/sdb1
# 指定卷标
mkfs.xfs -L "data" /dev/sdb1
# 指定数据块大小(默认 4096 字节)
mkfs.xfs -b size=4096 /dev/sdb1
# 指定 inode 大小和数量
mkfs.xfs -i size=512 -i maxpct=5 /dev/sdb1
# 快速格式化
mkfs.xfs -f /dev/sdb1
ext4 和 xfs 的选择:
- 需要快照和数据校验:btrfs(但生产环境使用前请充分测试)
创建 swap 分区
# 格式化为 swap
mkswap /dev/sdb2
# 启用 swap 分区
swapon /dev/sdb2
# 禁用 swap 分区
swapoff /dev/sdb2
# 查看 swap 状态
swapon -s
free -h
查看文件系统信息
# 查看文件系统 UUID 和卷标
blkid /dev/sdb1
# 查看 ext4/ext3/ext2 超级块信息
dumpe2fs -h /dev/sdb1
# 查看 xfs 文件系统信息
xfs_info /dev/sdb1
# 查看磁盘使用情况
df -h
# 查看 inode 使用情况
df -i
文件系统修复
ext4 文件系统修复:
# 卸载分区
umount /dev/sdb1
# 检查并修复(通常需要按 y 确认)
fsck.ext4 -f /dev/sdb1
# 自动修复(跳过交互)
fsck.ext4 -p /dev/sdb1
# 强制修复(危险,可能丢失数据)
fsck.ext4 -fy /dev/sdb1
xfs 文件系统修复:
# 卸载分区
umount /dev/sdb1
# 检查 xfs 文件系统(xfs 只支持检查,不支持修复)
xfs_check /dev/sdb1
# 如果需要修复,可以尝试
xfs_repair /dev/sdb1
注意:文件系统修复前最好先备份数据。修复操作有风险,可能导致数据丢失。
第四部分:挂载操作详解
挂载基础概念
挂载是将分区关联到目录的过程。挂载后,访问该目录就相当于访问分区上的数据。
关键概念:
- 文件系统类型:分区的文件系统格式,如 ext4、xfs
基本挂载操作
# 基本挂载
mount /dev/sdb1 /mnt/data
# 指定文件系统类型挂载
mount -t ext4 /dev/sdb1 /mnt/data
# 以只读模式挂载
mount -r /dev/sdb1 /mnt/data
# 重新挂载(修改选项)
mount -o remount,rw /mnt/data
查看挂载状态
# 查看所有挂载
mount
# 查看特定挂载点
mount | grep /mnt/data
# 使用 df 查看(更直观)
df -h
# 使用 lsblk 查看
lsblk
卸载操作
# 卸载(普通卸载)
umount /mnt/data
# 强制卸载(设备忙时)
umount -f /mnt/data
# 延迟卸载(确保数据写完后再卸载)
umount -l /mnt/data
注意:卸载前确保没有进程还在使用该文件系统。
查看正在使用文件系统的进程:
lsof +D /mnt/data
# 或
fuser -v /mnt/data
挂载选项
常用挂载选项:
| | |
|---|
| 使用默认选项(rw,suid,dev,exec,auto,nouser,async) | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
示例:
# 安全挂载选项(适合公开目录)
mount -o nosuid,noexec,nodev,ro /dev/sdb1 /mnt/shared
# 高性能挂载选项
mount -o noatime,nodiratime,async /dev/sdb1 /mnt/data
# 恢复读写权限
mount -o remount,rw /mnt/data
第五部分:自动挂载配置
/etc/fstab 基础
/etc/fstab 配置文件定义了开机时自动挂载的文件系统。
格式:
# <设备> <挂载点> <类型> <选项> <dump> <pass>
UUID=550e8400-e29b-41d4-a716-446655440000 /boot ext4 defaults 1 2
UUID=b2a7d3f0-1234-5678-9abc-def012345678 / xfs defaults 0 1
UUID=c8b9a1e2-3456-7890-abcd-ef0123456789 /data ext4 defaults,noatime 0 2
/dev/sdb1 /mnt/data ext4 defaults,noatime 0 2
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
字段说明:
- 类型:文件系统类型,如 ext4、xfs、tmpfs
- dump:是否使用 dump 备份(0=不备份,1=备份)
- pass:fsck 检查顺序(0=不检查,1=根分区,2=其他分区)
获取设备 UUID 和 LABEL
# 查看所有设备的 UUID
blkid
# 查看特定设备
blkid /dev/sdb1
# 示例输出
/dev/sdb1: UUID="550e8400-e29b-41d4-a716-446655440000" TYPE="ext4" PARTUUID="12345678-01"
添加自动挂载
编辑 /etc/fstab:
vi /etc/fstab
添加一行:
UUID=550e8400-e29b-41d4-a716-446655440000 /data ext4 defaults,noatime 0 2
测试 fstab 配置
修改 fstab 后,务必测试配置是否正确:
# 重新挂载所有条目(不重启)
mount -a
# 验证挂载
df -h
# 如果失败,系统可能无法启动!
使用 LABEL 挂载
# 给分区设置卷标
e2label /dev/sdb1 "data"
xfs_admin -L "data" /dev/sdb1
# 在 fstab 中使用 LABEL
LABEL=data /data ext4 defaults,noatime 0 2
使用 tmpfs(内存文件系统)
tmpfs 是基于内存的文件系统,断电后数据丢失,适合存储临时数据。
# 在 fstab 中添加
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
# 添加 tmpfs 挂载
tmpfs /tmp/app tmpfs defaults,size=2G,noexec,nosuid,nodev 0 0
常用 tmpfs 选项:
第六部分:LVM 逻辑卷管理
LVM 基础概念
LVM(Logical Volume Manager)是 Linux 下的软件卷管理工具,提供了比传统分区更灵活的管理方式。
核心概念:
- **Physical Volume (PV)**:物理卷,即物理磁盘或分区
- **Volume Group (VG)**:卷组,多个物理卷组成的存储池
- **Logical Volume (LV)**:逻辑卷,从卷组中划分出来的逻辑分区
优势:
创建 LVM
1. 将分区转为 LVM 类型
# 使用 fdisk 创建分区
fdisk /dev/sdb
# 在 fdisk 中将分区类型改为 Linux LVM (8e)
# 输入 t,然后输入 8e
# 或者使用 parted
parted /dev/sdb set 1 lvm on
2. 创建物理卷 (PV)
# 创建 PV
pvcreate /dev/sdb1
# 查看 PV
pvdisplay
pvs
3. 创建卷组 (VG)
# 创建 VG
vgcreate vg_data /dev/sdb1
# 查看 VG
vgdisplay
vgs
# 添加更多 PV 到 VG
vgextend vg_data /dev/sdc1
# 从 VG 移除 PV(需要先迁移数据)
pvmove /dev/sdb1
vgreduce vg_data /dev/sdb1
4. 创建逻辑卷 (LV)
# 创建 LV(-n 指定名称,-L 指定大小,-l 指定 PE 数量)
lvcreate -n lv_data -L 100G vg_data
# 使用全部可用空间
lvcreate -n lv_data -l 100%FREE vg_data
# 查看 LV
lvdisplay
lvs
5. 创建文件系统并挂载
# 创建文件系统
mkfs.ext4 /dev/vg_data/lv_data
# 挂载
mount /dev/vg_data/lv_data /data
LVM 动态调整
扩展逻辑卷
# 1. 先扩展 VG(如果有新 PV)
vgextend vg_data /dev/sdc1
# 2. 扩展 LV
lvextend -L +50G /dev/vg_data/lv_data
# 或者扩展到指定大小
lvextend -L 200G /dev/vg_data/lv_data
# 3. 扩展文件系统(ext4)
resize2fs /dev/vg_data/lv_data
# 3. 扩展文件系统(xfs)
xfs_growfs /mnt/data
缩减逻辑卷(需要先卸载)
# 1. 卸载
umount /dev/vg_data/lv_data
# 2. 检查文件系统
e2fsck -f /dev/vg_data/lv_data
# 3. 缩减文件系统
resize2fs /dev/vg_data/lv_data 50G
# 4. 缩减 LV
lvreduce -L 50G /dev/vg_data/lv_data
# 5. 重新挂载
mount /dev/vg_data/lv_data /data
注意:缩减操作有风险,建议提前备份数据。xfs 文件系统不支持缩减。
LVM 快照
LVM 快照是 LVM 的重要特性,用于备份。
# 创建快照(快照大小要能容纳变化数据)
lvcreate -s -n lv_data_snap -L 10G /dev/vg_data/lv_data
# 挂载快照
mkdir -p /mnt/snapshot
mount /dev/vg_data/lv_data_snap /mnt/snapshot
# 备份完成后卸载快照
umount /mnt/snapshot
# 删除快照
lvremove /dev/vg_data/lv_data_snap
使用快照备份:
#!/bin/bash
# lvm_snapshot_backup.sh
VG_NAME="vg_data"
LV_NAME="lv_data"
SNAP_NAME="lv_data_snap"
SNAP_SIZE="10G"
BACKUP_DIR="/backup"
MOUNT_POINT="/mnt/snapshot"
# 创建快照
lvcreate -s -n $SNAP_NAME -L $SNAP_SIZE /dev/$VG_NAME/$LV_NAME
# 挂载快照
mkdir -p $MOUNT_POINT
mount -o ro /dev/$VG_NAME/$SNAP_NAME$MOUNT_POINT
# 备份
tar -czf $BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz -C $MOUNT_POINT .
# 卸载快照
umount $MOUNT_POINT
# 删除快照
lvremove -f /dev/$VG_NAME/$SNAP_NAME
echo"备份完成: $BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz"
第七部分:生产环境实战案例
案例一:新服务器初始化数据盘
场景描述
新服务器有一块 500GB 的数据盘 /dev/sdb,需要将其挂载到 /data 目录。
操作步骤
lsblk
fdisk -l /dev/sdb
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary xfs 0% 100%
mkfs.xfs /dev/sdb1
blkid /dev/sdb1
# 创建挂载点
mkdir -p /data
# 添加到 fstab
echo"UUID=$(blkid -s UUID -o value /dev/sdb1) /data xfs defaults,noatime 0 2" >> /etc/fstab
# 验证配置
mount -a
# 验证挂载
df -h | grep /data
chown root:root /data
chmod 755 /data
完整脚本
#!/bin/bash
# init_data_disk.sh - 初始化数据盘
DISK="/dev/sdb"
PART="${DISK}1"
MOUNT_POINT="/data"
FS_TYPE="xfs"
# 检查磁盘是否存在
if [ ! -b "$DISK" ]; then
echo"错误: 磁盘 $DISK 不存在"
exit 1
fi
# 检查是否已挂载
if mountpoint -q "$MOUNT_POINT"; then
echo"警告: $MOUNT_POINT 已经挂载"
exit 1
fi
# 检查是否已有分区
if [ -b "$PART" ]; then
echo"警告: 分区 $PART 已存在"
read -p "是否继续? (yes/no): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
exit 0
fi
fi
echo">>> 步骤1: 创建 GPT 分区表"
parted -s $DISK mklabel gpt
echo">>> 步骤2: 创建分区"
parted -s $DISK mkpart primary $FS_TYPE 0% 100%
# 等待分区表刷新
sleep 1
echo">>> 步骤3: 创建文件系统"
mkfs.$FS_TYPE -f $PART
echo">>> 步骤4: 获取 UUID"
UUID=$(blkid -s UUID -o value $PART)
echo"分区 UUID: $UUID"
echo">>> 步骤5: 创建挂载点并配置自动挂载"
mkdir -p $MOUNT_POINT
# 备份原 fstab
cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
# 添加 fstab 条目
echo"UUID=$UUID$MOUNT_POINT$FS_TYPE defaults,noatime 0 2" >> /etc/fstab
echo">>> 步骤6: 验证 fstab 配置"
mount -a
if mountpoint -q "$MOUNT_POINT"; then
echo"挂载成功"
else
echo"挂载失败,恢复 fstab"
cp /etc/fstab.bak.$(date +%Y%m%d) /etc/fstab
exit 1
fi
echo">>> 步骤7: 设置权限"
chown root:root $MOUNT_POINT
chmod 755 $MOUNT_POINT
echo"=== 初始化完成 ==="
df -h $MOUNT_POINT
案例二:扩展根分区
场景描述
服务器根分区空间不足,需要扩展。假设使用了 LVM。
诊断步骤
# 查看磁盘使用情况
df -h /
# 查看 LVM 情况
vgs
lvs
# 查看 VG 剩余空间
vgdisplay vg_centos | grep "Free"
扩展步骤
如果 VG 有剩余空间:
# 扩展 LV
lvextend -L +50G /dev/mapper/centos-root
# 扩展文件系统
resize2fs /dev/mapper/centos-root # ext4
# 或
xfs_growfs / # xfs
如果 VG 没有剩余空间,需要先扩展 PV:
# 查看可用磁盘
lsblk
# 添加新磁盘 /dev/sdc 并创建分区
fdisk /dev/sdc
# 创建 Linux LVM 分区 (8e)
# 创建 PV
pvcreate /dev/sdc1
# 扩展 VG
vgextend centos /dev/sdc1
# 扩展 LV
lvextend -L +100G /dev/mapper/centos-root
# 扩展文件系统
resize2fs /dev/mapper/centos-root
非 LVM 扩展(需要使用 gparted 或重启)
如果是非 LVM 的 ext4 分区,扩展需要:
警告:修改分区表有风险,建议提前备份数据。
案例三:修复挂载故障
场景描述
服务器启动后挂载失败,进入紧急模式。
排查步骤
journalctl -xb | grep -i mount
cat /proc/mounts
cat /etc/fstab
blkid
修复步骤
错误1:UUID 不正确
# 查看正确的 UUID
blkid
# 编辑 fstab
vi /etc/fstab
# 修改 UUID 为正确值
错误2:挂载点不存在
# 创建挂载点
mkdir -p /data
错误3:文件系统损坏
# 在根分区挂载成功后
umount /data
# 修复文件系统
fsck.ext4 -f /dev/sdb1
# 或
xfs_repair /dev/sdb1
# 重新挂载
mount /data
临时绕过(跳过挂载启动)
如果 /etc/fstab 配置错误导致无法启动,可以在启动时:
- 在 linux 行末尾添加
rd.break 或 init=/bin/bash
mount -o remount,rw /
然后修复 /etc/fstab。
案例四:迁移数据到新磁盘
场景描述
需要将 /data 目录的数据从旧磁盘迁移到新磁盘。
操作步骤
# 分区和格式化新磁盘
fdisk /dev/sdc
mkfs.xfs /dev/sdc1
# 挂载到临时目录
mkdir -p /mnt/newdata
mount /dev/sdc1 /mnt/newdata
# 使用 rsync 同步数据
rsync -avz /data/ /mnt/newdata/
# 验证数据完整性
diff -r /data /mnt/newdata
# 获取新磁盘 UUID
blkid /dev/sdc1
# 备份原 fstab
cp /etc/fstab /etc/fstab.bak
# 编辑 fstab,修改 UUID
vi /etc/fstab
# 重启前先卸载
umount /data
umount /mnt/newdata
# 验证 fstab
mount -a
# 重启
reboot
完整脚本
#!/bin/bash
# migrate_data_disk.sh
OLD_DISK="/dev/sdb1"
NEW_DISK="/dev/sdc1"
MOUNT_POINT="/data"
FS_TYPE="xfs"
echo"=== 数据迁移开始 ==="
# 检查新磁盘是否存在
if [ ! -b "$NEW_DISK" ]; then
echo"错误: 新磁盘 $NEW_DISK 不存在"
exit 1
fi
# 挂载新磁盘到临时目录
mkdir -p /mnt/newdata
echo">>> 格式化新磁盘..."
mkfs.$FS_TYPE -f $NEW_DISK
echo">>> 挂载新磁盘..."
mount $NEW_DISK /mnt/newdata
# 同步数据
echo">>> 同步数据..."
rsync -avz --delete $MOUNT_POINT/ /mnt/newdata/
# 验证
echo">>> 验证数据..."
diff -r $MOUNT_POINT /mnt/newdata && echo"数据一致" || echo"数据不一致!"
# 获取新磁盘 UUID
NEW_UUID=$(blkid -s UUID -o value $NEW_DISK)
echo"新磁盘 UUID: $NEW_UUID"
# 更新 fstab
echo">>> 更新 /etc/fstab..."
cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
# 替换旧 UUID 为新 UUID
OLD_UUID=$(blkid -s UUID -o value $OLD_DISK)
sed -i "s|$OLD_UUID|$NEW_UUID|g" /etc/fstab
echo">>> 原 fstab 备份: /etc/fstab.bak.$(date +%Y%m%d)"
# 重启前验证
echo">>> 重启前验证 fstab..."
umount $MOUNT_POINT
umount /mnt/newdata
mount -a
if mountpoint -q $MOUNT_POINT; then
echo"挂载验证成功"
else
echo"挂载验证失败,恢复 fstab"
cp /etc/fstab.bak.$(date +%Y%m%d) /etc/fstab
mount -a
fi
echo"=== 迁移完成 ==="
echo"请重启服务器以完成迁移"
echo"重启后可以删除旧磁盘分区"
总结
分区工具速查
# fdisk - MBR 分区
fdisk -l /dev/sda # 查看分区
fdisk /dev/sdb # 交互分区
# parted - GPT/MBR 通用
parted /dev/sdb print# 查看分区
parted /dev/sdb mklabel gpt # 创建 GPT
parted /dev/sdb mkpart primary xfs 0% 100% # 创建分区
# gdisk - GPT 分区
gdisk -l /dev/sdb # 查看分区
gdisk /dev/sdb # 交互分区
文件系统速查
# ext4
mkfs.ext4 /dev/sdb1
fsck.ext4 /dev/sdb1
resize2fs /dev/sdb1
# xfs
mkfs.xfs /dev/sdb1
xfs_check /dev/sdb1
xfs_growfs /mountpoint
xfs_repair /dev/sdb1
# swap
mkswap /dev/sdb1
swapon /dev/sdb1
swapoff /dev/sdb1
挂载速查
# 手动挂载
mount /dev/sdb1 /mnt/data
mount -t ext4 /dev/sdb1 /mnt/data
mount -o ro,noexec /dev/sdb1 /mnt/data
# 卸载
umount /mnt/data
umount -f /mnt/data
umount -l /mnt/data
# 查看
mount
df -h
lsblk
blkid
fstab 速查
# 格式
# UUID=xxx /mountpoint type defaults 0 2
# 常用选项
defaults # 默认选项
noatime # 不更新访问时间
nodiratime # 不更新目录访问时间
ro # 只读
noexec # 不允许执行
nosuid # 不允许 SUID
LVM 速查
# PV
pvcreate /dev/sdb1
pvs
pvdisplay
# VG
vgcreate vg_name /dev/sdb1
vgextend vg_name /dev/sdc1
vgs
vgdisplay
# LV
lvcreate -n lv_name -L 10G vg_name
lvextend -L +10G /dev/vg_name/lv_name
lvs
lvdisplay
# 扩展文件系统
resize2fs /dev/vg_name/lv_name # ext4
xfs_growfs /mountpoint # xfs
常见问题处理
最佳实践
- 使用 UUID:fstab 中使用 UUID 而不是设备名(设备名可能变化)
- 测试 fstab:修改后用
mount -a 测试 - 使用 LVM:数据盘建议使用 LVM,方便后续扩展
- 合理分区:生产环境建议单独分区 /var/log、/data 等
- 定期检查:使用 df、lsblk 定期检查磁盘使用情况