18、Linux常用命令-磁盘分区相关命令
空间查看、设备识别、分区划分、刷新格式化分区(创建文件系统)、挂载与卸载分区、分区维护与检查、文件系统管理、swap分区文件管理等操作
1. 磁盘/分区空间查看
a. df(查看已挂载文件系统的空间使用)
功能:显示所有已挂载文件系统的总容量、已用、可用空间及挂载点,常用于检查磁盘是否满了。
常用用法:
df -h # 以人类可读的单位(GB/MB)显示
df -T # 显示文件系统类型(ext4、xfs等)
df -i # 显示inode使用情况(避免因inode满导致无法创建文件)
df /mnt/data # 查看指定挂载点的空间
b. du(查看目录/文件的磁盘占用)
功能:计算指定目录或文件占用的磁盘空间(与 df 不同,du 聚焦于具体文件/目录,df 聚焦于整个文件系统)
常用用法:
du -sh /home # 显示/home目录总大小(-s:汇总,-h:人类可读)
du -h --max-depth=1 /var # 显示/var下一级子目录的大小(--max-depth=1限制层级)
du -ah /tmp # 显示/tmp下所有文件和目录的大小(-a:所有文件目录,内容多就慢)
2. 识别设备
a. lsblk(推荐,直观展示块设备)
列出所有块设备(磁盘、分区、虚拟磁盘等),显示设备名称、大小、挂载点等信息,结构清晰。
常用用法:
lsblk # 简单列出所有块设备
lsblk -f # 额外显示文件系统类型和UUID
lsblk /dev/sda # 查看指定磁盘(如sda)的分区详情
示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 2.1G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 800M 0 part /boot
└─nvme0n1p2 259:2 0 99.2G 0 part ├─rl-root 253:0 0 95.3G 0 lvm /└─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
b. fdisk -l(查看磁盘分区表详情)
显示所有磁盘的分区表信息(包括未挂载的磁盘),支持 MBR 分区表,对 GPT 分区表显示有限。
常用用法:
sudo fdisk -l # 列出所有磁盘及分区(需root权限)
sudo fdisk -l /dev/nvme0n1p1 # 查看指定磁盘(如nvme0n1p1)的详细分区信息
示例输出:
Disk /dev/nvme0n1p1: 800 MiB, 838860800 bytes, 1638400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
c. parted -l(支持 GPT 分区表,显示更全面)
比 fdisk 更强大,支持 MBR 和 GPT 分区表,能显示分区的文件系统类型、起始/结束位置等。
常用用法:
sudo parted -l # 列出所有磁盘的分区信息(包括GPT)
d. blkid(查看分区的UUID、文件系统类型等)
功能:获取块设备(分区)的UUID、LABEL(卷标)、文件系统类型,常用于配置 /etc/fstab 永久挂载(UUID 比设备名更稳定)。
常用用法:
blkid # 显示所有分区的UUID、类型等
blkid /dev/nvme0n1p1 # 查看指定分区(如nvme0n1p1)的信息
3. 分区
用于对磁盘进行分区划分(创建、删除、调整分区),需根据磁盘大小和分区表类型选择工具:
- MBR 分区表:支持最大 2TB 磁盘,最多 4 个主分区(或 3 主 + 1 扩展分区),适合旧设备或小磁盘
- GPT 分区表:支持超过 2TB 磁盘,无主分区数量限制,适合新设备或大磁盘
a. fdisk(MBR 分区表专用,简单易用)
交互式工具,用于创建、删除 MBR 分区,步骤清晰,适合新手
操作流程(以 /dev/sdb 为例):
sudo fdisk /dev/sdb # 进入sdb磁盘的分区交互模式
进入后输入以下命令(按 m 查看帮助):
n:创建新分区(选择p主分区或e扩展分区,设置分区编号、起始扇区,默认按回车用全部空间)。p:查看当前分区表(确认分区是否正确)。d:删除分区(输入分区编号)。w:保存并退出(分区生效);q:放弃修改退出。
示例:给 /dev/sdb 创建一个主分区并占满磁盘:
sudo fdisk /dev/sdb
# 输入n → p → 1(分区号)→ 回车(默认起始扇区)→ 回车(默认结束扇区)→ p(查看)→ w(保存)
b. gdisk(GPT 分区表专用,类似 fdisk)
用于创建、删除 GPT 分区,操作逻辑与 fdisk 类似,支持大磁盘。需先安装(如 sudo apt install gdisk 或 yum install gdisk)。
操作流程(以 /dev/sdb 为例):
sudo gdisk /dev/sdb # 进入GPT分区交互模式
常用命令:
n:创建新分区(设置分区号、起始扇区、大小,默认用全部空间)。p:查看分区表。d:删除分区。w:保存退出;q:放弃退出。
c. parted(支持 MBR 和 GPT,适合高级操作)
非交互式或交互式工具,可调整分区大小(需文件系统支持),适合 GPT 或大磁盘。
示例1:交互式创建 GPT 分区
sudo parted /dev/sdb # 进入交互模式
(parted) mklabel gpt # 设置分区表为GPT(若为MBR则用msdos)
(parted) mkpart # 创建分区
Partition name? []? data # 分区名称(可选)
File system type? [ext2]? ext4 # 预期文件系统(仅标识,不实际格式化)
Start? 0% # 起始位置(0%表示从开头)
End? 100% # 结束位置(100%表示占满磁盘)
(parted) print # 查看分区
(parted) quit # 退出
示例2:非交互式创建分区
sudo parted /dev/sdb mklabel gpt # 非交互设置GPT分区表
sudo parted /dev/sdb mkpart data ext4 0% 100% # 非交互创建分区
4. 刷新分区
分区创建后,系统可能未立即识别新分区,需手动刷新分区表:
a. partprobe
sudo partprobe /dev/sdb # 刷新指定磁盘(如sdb)的分区表
# 若无效,可重启系统,或卸载再重新加载磁盘
b. partx(刷新分区表,替代 partprobe)
功能:告知内核重新读取磁盘的分区表,使新分区立即生效(有时 partprobe 无效时可用)。
示例:
partx -u /dev/sdb # 刷新磁盘sdb的分区表
5. 格式化分区(创建文件系统)
分区后需格式化(创建文件系统,如 ext4、xfs、fat32 等)才能存储数据,使用 mkfs 系列命令
a. mkfs.ext4(创建 ext4 文件系统,最常用)
ext4 是 Linux 主流文件系统,支持大文件、日志功能(崩溃后易恢复)
示例:格式化 /dev/sdb1 为 ext4:
sudo mkfs.ext4 /dev/sdb1 # -L 可指定卷标:sudo mkfs.ext4 -L data /dev/sdb1
b. mkfs.xfs(创建 xfs 文件系统,适合大磁盘)
xfs 性能优异,支持更大的文件和磁盘容量,常用于企业级存储(如 CentOS 7 默认文件系统)
示例:格式化 /dev/sdb1 为 xfs:
sudo mkfs.xfs /dev/sdb1 # 需先安装xfs工具:sudo apt install xfsprogs
c. mkfs.vfat(创建 FAT32 文件系统,用于跨系统兼容)
FAT32 支持 Windows、Linux、macOS 读写,适合 U 盘或移动硬盘,但单文件最大 4GB
示例:格式化 /dev/sdb1 为 FAT32:
sudo mkfs.vfat /dev/sdb1 # -n 可指定卷标:sudo mkfs.vfat -n USB /dev/sdb1
6. 挂载与卸载
“挂载”(mount)是将外部存储设备(如硬盘、U盘、光盘)、虚拟文件系统(如ISO镜像、网络共享)与系统目录树关联的过程,是实现存储设备访问的核心机制
a. 挂载的核心逻辑
Linux采用单一目录树结构,所有可访问的文件/目录都必须属于以 /(根目录)为起点的树形结构中。而外部存储设备(硬盘分区、如U盘)或虚拟文件系统(如ISO镜像)本身是独立的“数据块”,无法直接被系统识别。
“挂载”的作用就是将这些独立的存储单元“接入”目录树的某个节点(挂载点),使得该设备的内容可以通过这个目录被读写。例如:将U盘挂载到 /mnt/usb 后,访问 /mnt/usb 就等同于访问U盘内的文件。
b. 挂载的3个核心要素
挂载操作需明确三个关键信息,缺一不可:
i. 设备(Device)
指需要被挂载的存储介质,在Linux中以“设备文件”形式存在于 /dev/ 目录下(内核自动创建,代表硬件或虚拟设备)。常见设备类型:
- 本地硬盘/分区:
- SATA/SAS硬盘:
/dev/sda1(第一块硬盘的第一个分区)、/dev/sdb2(第二块硬盘的第二个分区); - NVMe固态硬盘:
/dev/nvme0n1p3(第一块NVMe硬盘的第三个分区) - LVM逻辑卷:
/dev/vg_name/lv_name(逻辑卷设备)。
- SATA/SAS硬盘:
- 移动设备:
- U盘/SD卡:通常为
sdc1、sdd1等(可通过lsblk或fdisk -l查看);
- U盘/SD卡:通常为
- 光学介质:
- 光盘:
/dev/cdrom或/dev/sr0(光驱设备) - ISO镜像文件:
/root/centos.iso(本地文件,需通过loop模拟为块设备)
- 光盘:
- 网络存储:
- NFS共享:
192.168.1.100:/data(远程服务器的共享目录) - CIFS/SMB共享:
//192.168.1.200/share(Windows或Samba共享)
- NFS共享:
ii. 挂载点(Mount Point)
是Linux目录树中已存在的空目录,作为挂载后设备的访问入口。
- 要求:必须是预先创建的空目录(若目录非空,挂载后原内容会被临时隐藏,卸载后恢复)
- 常见挂载点:
/mnt/(临时挂载)、/media/(自动挂载的移动设备)
iii. 文件系统类型(Filesystem Type)
存储设备需使用特定格式(文件系统)组织数据,mount 需识别格式才能正确解析。常见类型:
- Linux原生:
ext4(传统稳定)、xfs(高性能,CentOS 7+默认)、btrfs(支持快照/raid); - 移动设备:
vfat(FAT32,U盘/SD卡常用)、exfat(大文件支持) - Windows兼容:
ntfs(需安装ntfs-3g工具支持读写) - 光学介质:
iso9660(光盘/ISO镜像) - 网络文件系统:
nfs(NFS共享)、cifs(SMB/CIFS共享) - 虚拟文件系统:
tmpfs(内存临时文件系统)、proc(内核信息虚拟文件系统)
c. mount 命令:手动挂载的用法
i. 基本语法
mount [选项] <设备路径> <挂载点>
ii. 常用选项(核心参数)
| 选项 | 作用说明 |
|---|---|
-t <类型> | 指定文件系统类型(如 ext4、ntfs、nfs),不指定时系统会自动检测 |
-o <参数> | 挂载参数(多个参数用逗号分隔),如 rw(读写)、ro(只读)、noatime(不记录访问时间) |
-o loop | 将本地文件(如ISO)模拟为块设备挂载(用于镜像文件) |
-o user | 允许普通用户挂载(默认仅root可执行) |
-a | 挂载 /etc/fstab 中定义的所有未挂载设备(用于开机自动挂载) |
-l | 显示已挂载设备,并标注卷标(Label) |
-r | 等价于 -o ro,只读挂载 |
iii. 典型场景示例
- (1)挂载本地硬盘分区(ext4格式)
# 1. 创建挂载点(必须为空目录)
mkdir -p /data# 2. 挂载/dev/sdb1(ext4分区)到/data
mount -t ext4 /dev/sdb1 /data# 3. 验证:查看挂载状态
df -h /data # 显示该挂载点的空间使用情况
- (2)挂载U盘(FAT32格式)
U盘通常为vfat格式,插入后通过lsblk确认设备名(如/dev/sdc1):
lsblk # 列出所有块设备,找到U盘(通常标有SIZE和TYPE=part)
mkdir -p /mnt/usb
mount -t vfat /dev/sdc1 /mnt/usb # 挂载U盘(vfat支持FAT32)
- (3)挂载ISO镜像文件(离线访问镜像内容)
通过-o loop将ISO文件模拟为光驱设备:
mkdir -p /mnt/iso
mount -t iso9660 -o loop /root/CentOS-7.iso /mnt/iso # 挂载后可访问镜像内的Packages等目录
- (4)挂载NFS网络共享(访问远程服务器目录)
需先在远程NFS服务器配置共享(如/data),本地通过NFS协议挂载:
mkdir -p /mnt/nfs
mount -t nfs 192.168.1.100:/data /mnt/nfs # 远程IP:共享目录 本地挂载点
- (5)挂载Windows共享(CIFS/SMB协议)
需安装cifs-utils工具(离线环境可从镜像获取),然后挂载:
# 安装依赖(联网环境)
yum install cifs-utils -y # CentOS/Rocky
apt install cifs-utils -y # Ubuntu# 挂载Windows共享(需用户名和密码)
mount -t cifs //192.168.1.200/share /mnt/win \-o username=winuser,password=winpass # 用户名和密码为Windows共享的凭证
d. 自动挂载:/etc/fstab 配置
手动挂载的设备在系统重启后会失效,若需开机自动挂载,需将配置写入 /etc/fstab 文件(系统启动时自动读取)。
i. /etc/fstab 格式说明
每行定义一个自动挂载项,格式为:
<设备标识> <挂载点> <文件系统类型> <挂载选项> <dump> <pass>
| 字段 | 说明 |
|---|---|
| 设备标识 | 推荐用 UUID(设备唯一标识,避免设备名变动),可通过 blkid 命令获取;也可用设备路径(如 /dev/sdb1) |
| 挂载点 | 如 /data、/mnt/usb(必须预先创建) |
| 文件系统类型 | 如 ext4、xfs、nfs |
| 挂载选项 | 常用 defaults(等价于 rw, suid, dev, exec, auto, nouser, async);特殊需求可加 noatime(提升性能)、ro(只读)等 |
| dump | 0(不备份)或1(使用dump工具备份,几乎不用) |
| pass | 0(不检查)、1(优先检查,仅根分区 / 用)、2(次优先检查,其他分区用) |
ii. 配置示例(以挂载ext4分区为例)
# 1. 获取设备UUID(推荐用UUID,避免设备名变化导致挂载失败)
blkid /dev/sdb1 # 输出:/dev/sdb1: UUID="a1b2c3d4-1234-5678-90ef-abcdef123456" TYPE="ext4"# 2. 编辑/etc/fstab,添加如下行
vi /etc/fstab
# 添加内容:
UUID=a1b2c3d4-1234-5678-90ef-abcdef123456 /data ext4 defaults 0 2# 3. 验证配置(立即挂载,无需重启)
mount -a # 加载/etc/fstab中所有未挂载的设备,若报错需检查配置
e. 卸载:umount 命令
挂载的设备不再使用时,需用 umount 卸载(避免数据丢失),语法:
umount <挂载点> # 推荐:通过挂载点卸载(更直观)
# 或
umount <设备路径> # 也可通过设备路径卸载
i. 常见问题:“设备忙”(device is busy)
若卸载时提示“设备忙”,说明有进程正在访问该挂载点(如当前目录在挂载点内、有文件被打开),解决方法:
- 退出挂载点目录:
cd ~ - 关闭访问该挂载点的进程:
fuser -m /mnt/usb # 查看占用/mnt/usb的进程ID(PID) kill -9 <PID> # 终止进程(谨慎操作) - 强制卸载(不推荐,可能导致数据损坏):
umount -l /mnt/usb # -l:延迟卸载,待进程释放后自动完成
f. 高级挂载场景
i. 临时文件系统(tmpfs)
将内存的一部分模拟为磁盘(速度极快,重启后数据丢失),适合临时文件存储:
mount -t tmpfs -o size=1G tmpfs /tmp/ramdisk # 挂载1GB内存到/tmp/ramdisk
ii. 绑定挂载(bind)
将一个目录“映射”到另一个目录(类似快捷方式,但内核级关联):
mount --bind /home/user/data /var/www/data # 访问/var/www/data等同于访问/home/user/data
iii. 加密分区挂载(LUKS)
若分区已加密(如LUKS加密),需先解密再挂载:
cryptsetup luksOpen /dev/sdb1 encrypted_data # 解密分区,映射为/dev/mapper/encrypted_data
mount /dev/mapper/encrypted_data /data # 挂载解密后的设备
7. 分区维护与检查
用于检查和修复文件系统错误(需卸载分区后操作)。
a. e2fsck(检查修复 ext 系列文件系统)
sudo umount /dev/sdb1 # 先卸载
sudo e2fsck -f /dev/sdb1 # -f:强制检查(即使文件系统看似正常)
b. xfs_repair(检查修复 xfs 文件系统)
sudo umount /dev/sdb1
sudo xfs_repair /dev/sdb1
8. 文件系统管理
a. 分区/文件系统属性查看
i. findmnt(查看挂载信息,替代 mount 命令的复杂输出)
功能:以更清晰的结构显示系统的挂载点、设备、文件系统类型等,支持过滤和查询。
常用用法:
findmnt # 列出所有挂载信息(类似lsblk的挂载部分,但更详细)
findmnt /mnt/data # 查看指定挂载点的详细信息
findmnt -t ext4 # 只显示ext4类型的文件系统
b. 文件系统属性与管理
i. lsattr / chattr(查看/修改文件系统属性)
功能:针对 ext 系列文件系统(ext2/3/4),设置特殊属性(如防删除、只读),比 chmod 权限更底层。
常用用法:
lsattr /etc/passwd # 查看文件的特殊属性
chattr +i /etc/passwd # 给文件添加i属性(不可修改、删除,root也受限制)
chattr -i /etc/passwd # 移除i属性
- 常用属性:
i(不可变)、a(只能追加内容)、s(删除后数据清零)等。
ii. tune2fs(调整 ext 系列文件系统参数)
功能:修改 ext4/ext3 文件系统的默认参数(如预留空间、挂载次数、检查间隔等)。
常用用法:
tune2fs -l /dev/sda1 # 查看ext分区的详细参数(如块大小、预留空间)
tune2fs -m 1 /dev/sda1 # 调整根分区预留空间为1%(默认5%,节省空间)
tune2fs -c 50 /dev/sda1 # 每挂载50次后强制fsck检查
c. 文件系统扩容/缩容
i. resize2fs(调整 ext 系列文件系统大小)
功能:在分区大小调整后(需先通过 parted 等工具扩大分区),同步扩大 ext4/ext3 文件系统(支持在线扩容,不支持缩容ext4)。
操作流程(假设已用 parted 扩大 /dev/sdb1 分区):
e2fsck -f /dev/sdb1 # 先检查文件系统(必须步骤)
resize2fs /dev/sdb1 # 扩大文件系统到分区最大容量
ii. xfs_growfs(调整 xfs 文件系统大小)
功能:xfs 文件系统不支持缩容,仅支持扩容,需先扩大分区,再在线扩容。
操作流程(假设 /dev/sdb1 已扩容并挂载到 /mnt/data):
xfs_growfs /mnt/data # 基于挂载点扩容(xfs需通过挂载点操作)
9. swap 分区/文件管理
swap 是Linux的虚拟内存,当物理内存不足时使用,以下是相关命令:
a. mkswap(格式化swap分区/文件)
功能:将分区或文件初始化为swap格式
示例:
mkswap /dev/sdb2 # 将分区sdb2格式化为swap
b. swapon / swapoff(启用/关闭swap)
功能:临时启用或关闭swap分区/文件
常用用法:
swapon /dev/sdb2 # 启用swap分区
swapon -a # 启用/etc/fstab中所有配置的swap
swapoff /dev/sdb2 # 关闭指定swap分区
free -h # 查看swap使用情况(配合验证)
c. 永久启用swap
需在 /etc/fstab 中添加配置(类似分区挂载):
# 先获取swap分区的UUID
blkid /dev/sdb2
# 编辑/etc/fstab,添加:
UUID=xxx none swap defaults 0 0
10. 其他实用工具
a. lsfuse(查看FUSE文件系统挂载)
功能:显示通过FUSE(用户态文件系统)挂载的设备(如NTFS、SSHFS等)。
示例:
lsfuse # 列出所有FUSE挂载点
b. filefrag(查看文件的碎片情况)
功能:检查文件是否碎片化,评估文件系统性能(碎片越多,读写越慢)。
示例:
filefrag /var/log/syslog # 查看syslog文件的碎片数
