第一章:Linux 设备识别机制

在 Linux 中,一切皆文件。对存储设备的访问通过块设备文件实现,这些文件通常位于 /dev/ 目录下,由操作系统自动创建。

1.1 常见块设备命名规范

在挂载(格式化)之前,系统通过不同的接口类型识别设备,命名规则如下:

接口类型 设备名称格式 常见场景
SATA / SAS / USB / SCSI /dev/sda, /dev/sdb 物理机硬盘、U盘
virtio-blk (虚拟磁盘) /dev/vda, /dev/vdb KVM/Xen 虚拟机默认磁盘
NVMe (固态硬盘) /dev/nvme0n1, /dev/nvme1n1 高性能 SSD
SD / MMC / eMMC /dev/mmcblk0, /dev/mmcblk1 嵌入式设备、SD卡

分区表示法

  • SATA/SAS 磁盘:第一个分区为 /dev/sda1,第二个为 /dev/sda2
  • NVMe 磁盘:第一个分区为 /dev/nvme0n1p1(多了一个 p 以示区分)。

1.2 为什么要分区?

  • 数据安全隔离:系统分区损坏不影响数据分区。
  • 性能优化:可根据分区用途(如 /home 大量小文件)定制不同的文件系统参数。
  • 空间限制:通过配额限制用户或服务的使用空间。
  • 便于备份:可以只备份关键数据分区。

第二章:Linux 文件系统概述

文件系统是操作系统在存储设备上组织文件的方法。Linux 默认采用 文件系统层次结构标准(FHS),所有文件从根目录 / 开始。

2.1 常用文件系统类型

  • xfs:CentOS/RHEL 7+ 默认,支持超大文件,日志型,性能优秀。
  • ext4:传统 Linux 标准,向下兼容 ext2/3。
  • swap:交换分区(虚拟内存)。
  • iso9660:光盘/镜像文件系统。
  • ntfs / exfat:Windows 常用格式(Linux 需额外驱动)。

第三章:查看设备与文件系统状态

3.1 lsblk —— 查看块设备树状结构

bash

lsblk
# NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
# sda           8:0    0    20G  0 disk 
# nvme0n1     259:0    0   200G  0 disk 
# ├─nvme0n1p1 259:1    0     1G  0 part /boot
# └─nvme0n1p2 259:2    0   199G  0 part 
#   ├─rl-root 253:0    0    70G  0 lvm  /
  • TYPE 列显示是 disk(磁盘)、part(分区)还是 lvm(逻辑卷)。
  • MOUNTPOINT 为空表示尚未挂载。

3.2 df —— 查看文件系统磁盘空间使用情况

bash

# -h 人类易读 (1024进制) ; -T 显示文件系统类型 ; -H 1000进制
df -hT
# Filesystem            类型  容量  已用  可用 已用% 挂载点
# /dev/mapper/rl-root   xfs    70G  6.5G   64G   10% /

Tipsdf -h /boot 只查看指定挂载点;df /tmp 可以查看某目录所在设备的剩余空间。

3.3 du —— 统计目录和文件占用空间

bash

# -s 仅显示总计, -h 人类易读
du -sh /boot          # 查看 /boot 总大小
du -sk /usr/* | sort -n  # 找出 /usr 下哪个子目录最大(经典排查手法)

实战案例:查找根目录下的大文件

bash

# 方法1:逐层 du + sort 定位
du -sk /* | sort -n

# 方法2:直接 find 查找超过 100M 的文件
find / -size +100M 2>/dev/null

第四章:挂载与卸载文件系统

必须将设备挂载到一个空目录(挂载点)上,该目录下的原有文件将被隐藏。

4.1 mount 挂载

bash

# 基本语法:mount [-t 类型] [-o 选项] 设备 挂载点
mount /dev/sdb /data

# 通过 UUID 挂载(推荐,设备名可能变化)
blkid /dev/sdb        # 获取 UUID
mount UUID="f20547b2..." /data

# 查看当前所有挂载信息
mount | grep ^/dev

4.2 umount 卸载

bash

umount /dev/sdb   # 或 umount /data

4.3 卸载失败(Target is busy)解决方法

当有进程正在使用挂载点时,无法卸载。

  • 方法1:使用 lsof 查看占用进程

    bash

    lsof /data
    # COMMAND  PID USER   FD   TYPE DEVICE NODE NAME
    # bash    1508 root  cwd    DIR   8,17  64 /data
    
  • 方法2:使用 fuser 查看并强制终止

    bash

    fuser -m /data       # 查看
    fuser -km /data      # 强制杀死占用进程 (发送 SIGKILL)
    cd ~ && umount /data # 切换目录后卸载
    

4.4 开机自动挂载(/etc/fstab)

手动挂载重启后失效。若需永久挂载,需修改 /etc/fstab 配置文件。

bash

# 格式: UUID 挂载点 文件系统类型 挂载选项 dump备份 开机自检
UUID=f20547b2...  /data  xfs  defaults  0 0
  • 修改后,使用 mount -a 测试配置文件是否有语法错误,无需重启。

第五章:特殊文件系统挂载实战

5.1 挂载 NTFS 格式(Windows U盘)

Linux 默认不支持,需安装 ntfs-3g 驱动(通常由 EPEL 仓库提供)。

bash

yum install -y ntfs-3g
mount.ntfs /dev/sdb1 /mnt/windows

5.2 挂载 exFAT 格式

需编译安装 fuse-exfat 模块(需依赖 gcc、fuse-devel)。

bash

# 编译安装后
mount.exfat /dev/sdb1 /mnt/exfat

5.3 挂载 ISO 镜像文件(构建本地 YUM 仓库)

bash

# 创建挂载点,并将光盘挂载到 Web 目录供内网使用
mkdir /usr/share/nginx/html/dvd
mount /dev/sr0 /usr/share/nginx/html/dvd

# 客户端配置仓库
cat > /etc/yum.repos.d/dvd.repo << EOF
[dvd]
name=Local DVD Server
baseurl=http://server_ip/dvd
gpgcheck=0
EOF
yum clean all && yum grouplist

第六章:文件查找利器(locate vs find)

6.1 locate —— 基于数据库快速查找

利用 /var/lib/mlocate/mlocate.db 数据库极速检索,需要先用 updatedb 更新数据库。

bash

locate httpd.conf          # 精准匹配
locate -i passwd           # -i 忽略大小写
locate -c passwd           # -c 只计数
locate -r 'http.*conf'     # -r 正则表达式

6.2 find —— 实时硬盘查找(功能强大)

基本语法:find [路径] [条件] [动作]

分类 参数示例 说明
文件名 -name "passwd" -iname "passwd" 精确/忽略大小写匹配
文件类型 -type f (文件) -type d (目录) -type l (链接)
文件大小 -size +10M (大于10M) -size -1k (小于1k) -size 1024k 注意-size 1M 会匹配小于1M的文件(取整),建议用 1024k
权限 -perm 764 (精准匹配) -perm -764 (权限至少包含764) -perm /764 (ugo任一满足) 查找 SUID: find / -perm -4000
时间 -mtime +10 (10天前修改) -amin -5 (5分钟内访问)
用户/组 -user root -nouser (删除的用户遗留文件)

多条件组合

  • 逻辑与(默认):find . -name "*.txt" -size +1M
  • 逻辑或:-o,例如 find / -nouser -o -nogroup
  • 逻辑非:!,例如 find / ! -size -200M

常用动作(action)

bash

# 1. 查找并删除
find / -name PASSWD -delete

# 2. 查找并执行命令(经典用法,注意 {} 和 \; 的组合)
find /var/log -name "*.log" -exec cp -a {} /backup/ \;

# 3. 查找并查看详细信息(相当于 ls -l)
find /etc -name passwd -ls

第七章:硬盘分区管理(MBR 与 GPT)

7.1 分区方案对比

特性 MBR (传统) GPT (新标准)
分区数量 最多4个主分区,或 3主+1扩展(含N逻辑) 理论上无限 (通常128个)
单分区容量 最大 2 TiB 最大 9.4 ZB
固件支持 BIOS UEFI
工具 fdisk gdiskfdisk (新版本也支持)

MBR 补知识:扩展分区不能格式化,只能用来容纳逻辑分区;只有逻辑分区可以挂载使用。

7.2 使用 fdisk 管理 MBR 分区

交互式命令内部常用按键:

  • p:打印分区表
  • n:新建分区
  • d:删除分区
  • t:修改分区类型(如 82=Swap, 83=Linux, 8e=LVM)
  • w:保存并退出
  • q:不保存退出

新建分区步骤示例(创建一个 2G 主分区):

bash

fdisk /dev/sdb
> n          # 新建
> p          # 主分区
> 1          # 分区号
> 回车       # 起始扇区(默认)
> +2G        # 结束扇区(指定大小)
> w          # 保存

执行完后,建议运行 partprobe 通知内核更新分区表。

非交互式(脚本化)操作
将命令写入文件,通过重定向执行:

bash

echo -e "n\np\n1\n\n+2G\nw" | fdisk /dev/sdb

7.3 分区布局示例(扩展分区)

如果超过4个分区,需将第4个设为扩展分区,再在其上创建逻辑分区(从 sdb5 开始):

text

/dev/sdb1 (主, 2G)
/dev/sdb2 (主, 3G)
/dev/sdb3 (主, 4G)
/dev/sdb4 (扩展, 剩余全部)
/dev/sdb5 (逻辑, 5G)
/dev/sdb6 (逻辑, 剩余)

附录:核心工具速查表

需求 命令 说明
查看所有磁盘 lsblk 最直观看结构
查看磁盘容量 df -hT 看已挂载的分区
查看目录大小 du -sh * 看文件夹实际占用
查看磁盘分区 fdisk -l /dev/sdb 未挂载也能看
格式化分区 mkfs.xfs /dev/sdb1 mkfs.ext4
挂载设备 mount /dev/sdb1 /mnt -
卸载设备 umount /mnt 记得退出挂载目录
查看占用进程 lsof /mnt 卸载时若报 busy 使用
查找大文件 find / -size +1G 2>/dev/null 忽略权限报错
批量复制查找结果 find . -name "*.conf" -exec cp {} /tmp/ \; 注意 {}\;

总结:Linux 存储管理遵循“设备文件 → 格式化(文件系统)→ 挂载(目录)”的链路。熟练使用 lsblkdfdu 排查空间问题,掌握 find 的灵活查找,以及 fdisk 的分区操作,是 Linux 运维的核心基本功。对于生产环境,建议优先使用 GPT 分区方案和 UUID 挂载方式(写入 /etc/fstab)以确保稳定性。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐