当前位置: 首页 > news >正文

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 gdiskyum 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(逻辑卷设备)。
  • 移动设备
    • U盘/SD卡:通常为 sdc1sdd1 等(可通过 lsblkfdisk -l 查看);
  • 光学介质
    • 光盘:/dev/cdrom/dev/sr0(光驱设备)
    • ISO镜像文件:/root/centos.iso(本地文件,需通过 loop 模拟为块设备)
  • 网络存储
    • NFS共享:192.168.1.100:/data(远程服务器的共享目录)
    • CIFS/SMB共享://192.168.1.200/share(Windows或Samba共享)

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 <类型>指定文件系统类型(如 ext4ntfsnfs),不指定时系统会自动检测
-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(必须预先创建)
文件系统类型ext4xfsnfs
挂载选项常用 defaults(等价于 rw, suid, dev, exec, auto, nouser, async);特殊需求可加 noatime(提升性能)、ro(只读)等
dump0(不备份)或1(使用dump工具备份,几乎不用)
pass0(不检查)、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)

若卸载时提示“设备忙”,说明有进程正在访问该挂载点(如当前目录在挂载点内、有文件被打开),解决方法:

  1. 退出挂载点目录:cd ~
  2. 关闭访问该挂载点的进程:
    fuser -m /mnt/usb  # 查看占用/mnt/usb的进程ID(PID)
    kill -9 <PID>      # 终止进程(谨慎操作)
    
  3. 强制卸载(不推荐,可能导致数据损坏):
    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文件的碎片数
http://www.dtcms.com/a/601048.html

相关文章:

  • nvm与node.js的安装指南
  • python+django/flask+vue的书城图书阅读器系统,亮点含目录章节pycharm
  • 外贸cms什么意思seo海外推广
  • C++网络开发---CURL与CURLcode数据类型
  • 【Python数据分析】数据分析与可视化
  • MyBatis概述
  • Hadoop集群搭建(下):centos 7为例(已将将安装所需压缩包统一放在了/opt/software目录下)
  • 美创网站建设优势开县网站制作
  • 北京市网站建设网站怎么盈利的
  • 2.6、安全大脑:AI驱动的安全编排与自动化响应实战
  • Linux 进程间通信怎么选?——场景化决策指南
  • 折800网站源码石家庄新闻发布会
  • ThreadLocal 中弱引用(WeakReference)设计:为什么要 “故意” 让 Key 被回收?
  • Java大厂面试真题:从Spring Boot到AI微服务的三轮技术拷问
  • es开源小工具 -- 分析器功能
  • MQTT 与双工通信
  • 【.NET10】正式发布!微软开启智能开发生态新纪元
  • Linux 魔法:多种空块填充技术详解与实践
  • 深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
  • 广东哪家网站建网站搜索不到公司网站
  • 做网站开发需要学什么app开发自学教程
  • 【Linux】网络编程入门:从一个小型回声服务器开始
  • 【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读)
  • linux 解析并生成一个platform_device设备具体过程
  • 编译器使用的开发语言 | 解析编译器的实现原理及其开发语言的选择
  • 佛山企业网站建设流程织梦营销型网站模板
  • 洛谷 P11965:[GESP202503 七级] 等价消除 ← 位运算(异或) + STL map
  • 智慧团建网登录入口移动网站如何优化排名
  • linux drm子系统专栏介绍
  • termux编译opencv给python用