Linux文件系统与硬盘分区管理详解
Linux 文件系统与硬盘分区管理详解摘要本文整理了 Linux 文件系统基本管理设备识别、挂载卸载、文件查找与硬盘分区管理MBR/GPT、fdisk/gdisk/parted的核心知识点包含大量实操命令与案例分析适合运维新手系统学习。目录一、复习与预习二、Linux 文件系统基本管理2.1 识别文件系统和设备2.2 查看设备和文件系统2.3 挂载和卸载文件系统2.4 查找系统中的文件三、Linux 硬盘分区管理3.1 硬盘为什么要分区3.2 MBR 分区方案与 fdisk3.3 GPT 分区方案与 gdisk3.4 wipefs 工具3.5 parted 工具3.6 文件系统持久化挂载3.7 综合案例文件系统空间不足四、总结一、复习与预习昨天课堂内容源码安装应用自建仓库计划任务进程调度二、Linux 文件系统基本管理2.1 识别文件系统和设备Linux 中的设备在 Linux 中对存储设备的访问由特殊类型文件——**块设备block**提供。挂载块设备前必须先使用文件系统对其进行格式化。块设备文件与其他设备文件一起存储在/dev目录中由操作系统自动创建。接口类型设备名称示例说明SATA/SAS/USB/SCSI/dev/sda、/dev/sdb传统机械/固态硬盘virtio-blk/dev/vda、/dev/vdb虚拟机磁盘NVMe SSD/dev/nvme0n1、/dev/nvme1n1NVMe 固态硬盘SD/MMC/eMMC/dev/mmcblk0、/dev/mmcblk1嵌入式存储通常不会将整个存储设备格式化为一个文件系统而是将硬盘划分为多个分区/dev/sda第一个分区为/dev/sda1第二个为/dev/sda2以此类推/dev/vda1、/dev/vda2/dev/nvme0n1p1、/dev/nvme0n1p2Linux 文件系统文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构即在存储设备上组织文件的方法。要让文件系统的内容在文件系统层次结构中可用必须将它挂载到一个空目录上该目录被称为挂载点。Linux 思想尽可能使用各种小工具完成一个复杂任务。每个小工具专注于特定的功能KISS 原则Keep It Simple, Stupid。2.2 查看设备和文件系统2.2.1 lsblk 命令查看块设备使用情况[rootcentos7 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:0020G0disk sr011:0113.2G0rom nvme0n1259:00200G0disk ├─nvme0n1p1259:101G0part /boot └─nvme0n1p2259:20199G0part ├─rl-root253:0070G0lvm / ├─rl-swap253:103.9G0lvm[SWAP]└─rl-home253:20125.1G0lvm /home字段说明NAME块设备名MAJ:MIN主要和次要设备号RM是否为可移动设备1 表示可移动SIZE设备容量RO是否为只读TYPE磁盘disk、分区part、LVMlvm、ROMromMOUNTPOINT挂载点2.2.2 df 命令查看文件系统使用情况# 基础查看[rootcentos7 ~]# df# -h 友好显示单位1024进制# -T 显示文件系统类型[rootcentos7 ~]# df -hT# -H 单位进制是1000[rootcentos7 ~]# df -H# 查看单个文件系统[rootcentos7 ~]# df -hT /boot# 查看文件或目录存储在哪个设备[rootcentos7 ~]# df /tmp2.2.3 du 命令查看目录和文件占用磁盘空间大小# 查看/boot目录及其子目录占用空间[rootcentos7 ~]# du /boot# 只查看/boot目录本身占用空间[rootcentos7 ~]# du -s /boot# -h 人性化显示[rootcentos7 ~]# du -sh /boot140M /boot案例查找根文件系统中哪个文件占用了大量空间# 环境准备创建一个大小为4GB的文件[rootcentos7 ~]# dd if/dev/zero of/usr/share/doc/dhclient-4.2.5/bigfile-4G bs1M count4096# 逐层排查[rootcentos7 ~]# du -sk /* | sort -n[rootcentos7 ~]# du -sk /usr/* | sort -n[rootcentos7 ~]# du -sk /usr/share/doc/* | sort -n[rootcentos7 ~]# du -sk /usr/share/doc/dhclient-4.2.5/* | sort -n# 方法二直接查找大于100M的文件[rootcentos7 ~]# find / -size 100M 2/dev/null2.3 挂载和卸载文件系统2.3.1 环境准备# 虚拟机添加一块硬盘 /dev/sdb[rootcentos7 ~]# lsblk /dev/sdbNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk# 格式化文件系统为 xfs[rootcentos7 ~]# mkfs.xfs /dev/sdb2.3.2 挂载文件系统mount命令语法mount[-fnrsvw][-t vfstype][-o options]device mountpoint常用选项-t vfstype指明文件系统类型-o options指明挂载选项device要挂载的设备支持 UUID、LABEL、PARTLABEL、PARTUUID 等方式指定mountpoint挂载点位置示例# 创建挂载点[rootcentos7 ~]# mkdir /data# 查看设备 UUID[rootcentos7 ~]# blkid /dev/sdb/dev/sdb:UUIDf20547b2-df53-46e5-b526-a8744be26231TYPExfs# 挂载设备[rootcentos7 ~]# mount /dev/sdb /data# 或者使用 UUID[rootcentos7 ~]# mount UUIDf20547b2-df53-46e5-b526-a8744be26231 /data# 验证[rootcentos7 ~]# df -h /dataFilesystem Size Used Avail Use% Mounted on /dev/sdb 20G 33M 20G1% /data# 查看当前所有挂载详情[rootcentos7 ~]# mount | grep ^/dev2.3.3 卸载文件系统umountdevice|dir示例[rootcentos7 ~]# umount /dev/sdb# 或者[rootcentos7 ~]# umount /data2.3.4 卸载失败处理当提示target is busy时说明有进程正在使用该挂载点。使用 lsof 命令# 查看哪个进程在使用挂载点[rootcentos7 ~]# lsof /dataCOMMAND PIDUSERFD TYPE DEVICE SIZE/OFF NODE NAMEbash1508root cwd DIR8,1715664/data使用 fuser 命令# 查看文件系统被哪些程序使用[rootcentos7 ~]# fuser -m /data/data: 1508c# 终止进程后再次卸载[rootcentos7 ~]# cd[rootcentos7 ~]# umount /data注意fuser和lsof查看系统进程通常需要root 权限普通用户可能无输出。2.3.5 案例1Linux 挂载 NTFS 格式 U 盘# 安装 ntfs-3g由 epel 仓库提供[rootcentos7 ~]# yum install -y ntfs-3g[rootcentos7 ~]# mount.ntfs /dev/sdb1 /mnt2.3.6 案例2Linux 挂载 exFAT 格式 U 盘# 安装依赖[rootcentos7 ~]# yum install -y gcc fuse-devel make pkg-config# 下载并编译 fuse-exfat[rootcentos7 ~]# wget http://192.168.50.200/class/course-materials/softwares/stage01/fuse-exfat-1.2.0.tar.gz[rootcentos7 ~]# tar -xf fuse-exfat-1.2.0.tar.gz[rootcentos7 ~]# cd fuse-exfat-1.2.0[rootcentos7 ~]# ./configure[rootcentos7 ~]# make make install# 挂载 exFAT 格式的 U 盘[rootcentos7 ~]# mount.exfat /dev/sdb1 /mnt2.3.7 案例3构建基于 ISO 文件的 YUM 仓库场景Client 想安装图形化但仓库来源于 Internet希望使用本地仓库提高速度。思路Server 上部署并配置 Nginx 服务Server 上挂载 ISO 文件到 Nginx 服务网站目录Client 创建指向 Server 上 Web 站点仓库测试Server 端操作# 安装 Nginx[rootserver ~]# yum install -y nginx# 配置允许查看目录清单[rootserver ~]# vim /etc/nginx/nginx.conf# 在 http {} 块中添加autoindex on;[rootserver ~]# systemctl enable nginx.service --now# 准备测试文件[rootserver ~]# mv /usr/share/nginx/html/index.html{,.ori}[rootserver ~]# echo welcome to Nginx website. /usr/share/nginx/html/index.html# 创建 dvd 目录并挂载 ISO[rootserver ~]# mkdir /usr/share/nginx/html/dvd[rootserver ~]# mount /dev/sr0 /usr/share/nginx/html/dvdmount: /dev/sr0 is write-protected, mounting read-only注意确保虚拟机光驱已正确关联 ISO 镜像并连接。Client 端操作# 备份原有仓库[rootclient ~]# mkdir /etc/yum.repos.d/old[rootclient ~]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old# 创建新仓库配置[rootclient ~]# vim /etc/yum.repos.d/dvd.repo[dvd]namedvd fromlocalserverbaseurlhttp://10.1.8.10/dvdgpgcheck0# 清理缓存并测试[rootclient ~]# yum clean all[rootclient ~]# yum grouplist[rootclient ~]# yum groupinstall -y Server with GUI# 启动图形化 / 切换字符界面[rootclient ~]# init 5[rootclient ~]# init 3排错提示如果 Client 报 404检查 Server 的 Nginx 是否已 reload、防火墙是否放行 80 端口、SELinux 是否允许 Nginx 访问挂载点。2.4 查找系统中的文件2.4.1 locate 命令locate根据文件名及其路径在mlocate 数据库中查找文件。查找前需要 root 用户执行updatedb更新数据库。# 安装并更新数据库[rootcentos7 ~]# yum install -y mlocate[rootcentos7 ~]# updatedb常用选项-b仅匹配文件名basename-i忽略大小写-c返回找到的数量-r正则表达式匹配[rootcentos7 ~]# locate httpd.conf[rootcentos7 ~]# locate -b httpd[rootcentos7 ~]# locate -i PASSWD[rootcentos7 ~]# locate -b -c PASSWD[rootcentos7 ~]# locate -r http.*conf2.4.2 find 命令find在本地文件系统中执行实时查找。用户对文件夹必须有读取和执行权限。语法find[path][expression][action]根据文件名查找[rootcentos7 ~]# find /etc/ -name passwd[rootcentos7 ~]# find /etc/ -name *passwd*[rootcentos7 ~]# find /etc/ -iname passwd # 忽略大小写根据文件类型查找类型含义b块设备c字符设备d目录p命名管道f普通文件l符号链接s套接字[rootcentos7 ~]# find /etc/ -name passwd -type d根据文件所有者查找# 属于特定用户/UID[rootcentos7 ~]# find / -user laoma[rootcentos7 ~]# find / -uid 1000# 属于特定组/GID[rootcentos7 ~]# find / -group wheel[rootcentos7 ~]# find / -gid 10# 不属于任何用户或组孤儿文件[rootcentos7 ~]# find / -nouser -o -nogroup根据文件权限查找# -perm mode精确匹配权限[rootcentos7 ~]# find -perm 764# -perm -modeUGO 必须同时满足的最小权限# 例mode 为 764则 user7, group6, other4[rootcentos7 ~]# find . -perm -764# 查找具有 SUID 权限的文件[rootcentos7 ~]# find / -perm -4000# -perm /modeUGO 只要有一个满足即可[rootcentos7 ~]# find / -perm /7000 # suid/sgid/sticky 任意一个[rootcentos7 ~]# find / -perm /6000 # suid 或 sgid根据文件大小查找# 单位c(字节)、k(KiB)、M(MiB)、G(GiB)[rootcentos7 ~]# find -size 10M # 等于 10M[rootcentos7 ~]# find -size 10G # 大于 10G[rootcentos7 ~]# find -size -10k # 小于 10k注意find -size 1M会取整为 1 个单位结果可能包含小于 1M 的文件。精确查找建议使用1024k。根据时间查找# amin/cmin/mmin单位分钟# atime/ctime/mtime单位24小时[rootcentos7 ~]# find -amin 10 # 正好10分钟前[rootcentos7 ~]# find -amin 10 # 10分钟以前[rootcentos7 ~]# find -amin -10 # 10分钟以内[rootcentos7 ~]# find -newer file # 比 file 新的文件根据硬链接数和 inode 查找[rootcentos7 ~]# find -links 3[rootcentos7 ~]# find / -inum 67160130多条件表达式# 逻辑与默认[rootcentos7 ~]# find . -name file-* -perm /764# 逻辑或[rootcentos7 ~]# find / -nouser -o -nogroup# 逻辑非[rootcentos7 ~]# find / ! -size -200M 2/dev/nullAction对找到的文件执行操作# -delete删除找到的文件[rootcentos7 ~]# find / -name PASSWD -delete# -ls查看找到的文件相当于 ls -dils[rootcentos7 ~]# find /etc/ -name passwd -ls# -exec command \;执行命令[rootcentos7 ~]# find /etc/ -name passwd -exec echo haha \;# -exec command {} \;对找到的文件进行操作[rootcentos7 ~]# find / -inum 67160130 -exec cp -a {} ./findfiles \;三、Linux 硬盘分区管理3.1 硬盘为什么要分区将操作系统文件与用户文件分隔开避免应用数据撑满系统盘限制应用或用户的可用空间一个分区出现逻辑损坏不影响其他分区用于创建交换分区swap限制磁盘空间使用提高诊断工具和备份镜像的性能便于定制文件系统小文件/大文件场景3.2 MBR 分区方案与 fdisk自 1982 年以来**主启动记录MBR**分区方案指定了在运行BIOS 固件的系统上如何对磁盘进行分区。MBR 特点支持最多4 个主分区使用扩展分区和逻辑分区最多可创建15 个分区每个分区最大不能超过2 TiB主引导扇区第 1 扇区包含引导程序446 字节 分区表64 字节 结束标志2 字节fdisk 工具fdisk用于管理采用 MBR 分区方案的磁盘。# 查看分区表[rootcentos7 ~]# fdisk -l /dev/sdb# 交互式管理[rootcentos7 ~]# fdisk /dev/sdb交互式常用命令命令作用m显示帮助菜单p打印分区表n新建分区d删除分区t更改分区类型w保存并退出q不保存退出创建分区示例Command(mforhelp): n# 新建分区Partition type: p(primary)/ e(extended)Partition number(1-4):1# 分区号First sector:2048# 起始扇区Last sector: 2G# 结束位置2G 表示 2GBCommand(mforhelp): w# 保存分区表未生效时[rootcentos7 ~]# partprobe # 通知内核重新读取分区表非交互式操作# 创建分区[rootcentos7 ~]# vim fdisk-create.txtn p120482G p w[rootcentos7 ~]# fdisk /dev/sdb fdisk-create.txt3.3 GPT 分区方案与 gdiskGPTGUID Partition Table是运行UEFI固件系统上硬盘分区表的标准。GPT 特点支持最大18 ZiB的分区和磁盘最多可提供128 个分区提供分区表信息的冗余备份LBA0 为保护性 MBRLBA1 为 GPT 表头LBA2-33 记录分区信息gdisk 工具gdisk用于管理 GPT 分区方案的磁盘。# 查看分区表[rootcentos7 ~]# gdisk -l /dev/sdb# 交互式管理[rootcentos7 ~]# gdisk /dev/sdb常用命令命令作用?帮助o创建新的空 GPT 分区表n新建分区d删除分区p打印分区表c更改分区名称i显示分区详细信息w保存并退出MBR 转 GPT 示例[rootcentos7 ~]# gdisk /dev/sdbCommand(?forhelp): o# 创建新的 GPT 分区表Proceed?(Y/N): Y Command(?forhelp): w创建分区示例Command(?forhelp): n Partition number:1First sector:2048Last sector: 2G Hex code:8300(Linux filesystem)Command(?forhelp): c Enter name: data01 Command(?forhelp): w3.4 wipefs 工具作用查看和清除磁盘管理信息。⚠️ 警告数据无价操作需谨慎最好提前备份# 查看磁盘管理信息[rootcentos7 ~]# wipefs /dev/sdb# 清除未挂载磁盘的分区表[rootcentos7 ~]# wipefs -a /dev/sdb# 禁止强制清除-f 为强制[rootcentos7 ~]# wipefs -fa /dev/sdb3.5 parted 工具parted既可以管理 MBR 磁盘也可以管理 GPT 磁盘支持交互式和非交互式操作。交互式操作[rootcentos7 ~]# parted /dev/sdb(parted)help(parted)print# 查看分区表(parted)unit MiB# 设置单位为 MiB管理 MBR 磁盘# 设置分区方案为 msdosMBR(parted)mklabel msdos# 创建分区(parted)mkpart Partition type? primary/extended? primary File system type?[ext2]? xfs Start?1End?2049# 扩展分区(parted)resizepart14097# 删除分区(parted)rm1管理 GPT 磁盘# 设置分区方案为 gpt(parted)mklabel gpt# 创建分区GPT 需要指定分区名(parted)mkpart data01 xfs12049非交互式操作# 设置分区方案[rootcentos7 ~]# parted /dev/sdb mklabel msdos# 创建分区[rootcentos7 ~]# parted /dev/sdb unit MiB mkpart primary xfs 1 2049# 查看分区[rootcentos7 ~]# parted /dev/sdb unit MiB print# 扩展分区[rootcentos7 ~]# parted /dev/sdb unit MiB resizepart 1 5121# 删除分区[rootcentos7 ~]# parted /dev/sdb rm 1注意parted命令所做的更改立刻生效没有w确认步骤操作需谨慎3.6 文件系统持久化挂载当服务器重启时系统不会自动重新挂载文件系统。为了确保启动时自动挂载需要在/etc/fstab文件中添加条目。/etc/fstab格式6 个字段设备 挂载点 文件系统类型 挂载选项 dump fsck UUIDxxx /data01 xfs defaults 0 0字段说明1设备可用 UUID、device、LABEL 等2挂载点目录必须存在3文件系统类型xfs、ext4 等4挂载选项defaults为常用选项5dump 备份标记0 不备份6fsck 检查顺序XFS 设为 0ext4 根分区设 1其他设 2示例# 查看 UUID[rootcentos7 ~]# blkid /dev/sdb1/dev/sdb1:UUIDf5c35f10-0274-45af-b044-73694989fe01TYPExfs# 创建挂载点并编辑 fstab[rootcentos7 ~]# mkdir /data01[rootcentos7 ~]# vim /etc/fstabUUIDf5c35f10-0274-45af-b044-73694989fe01/data01 xfs defaults00# 立即挂载无需重启[rootcentos7 ~]# mount /data01# 或[rootcentos7 ~]# mount /dev/sdb1# 验证[rootcentos7 ~]# df -h /data01取消持久化挂载删除/etc/fstab中对应条目即可。3.7 综合案例文件系统空间不足情况1大量的大文件占用空间现象磁盘空间使用率 100%。解决找到大文件后删除。# 方法1find 查找[rootcentos7 ~]# find /myapp-1/ -size 100M# 方法2du 逐层排查[rootcentos7 ~]# du -s /myapp-1/* | sort -n | tail -5# 删除[rootcentos7 ~]# rm -f /myapp-1/etc/bigfile情况2删除文件后空间没有释放现象rm删除文件后df显示空间未释放。原因被删除的文件仍有进程在使用文件句柄未释放。解决找到占用进程并终止。[rootcentos7 ~]# lsof | grep delete | grep /myapp-1tail1654root 3r REG8,172061565952444/myapp-1/etc/bigfile(deleted)[rootcentos7 ~]# kill 1654 建议清理大文件时先使用重定向清空文件内容再删除文件避免此类问题。/myapp-1/etc/bigfile# 清空内容rm-f/myapp-1/etc/bigfile情况3大量的小文件占用空间现象磁盘空间使用率很低如 1%但无法创建新文件提示 “设备上没有空间”。原因inode 耗尽。文件系统中每个文件占用一个 inode大量小文件会耗尽 inode。# 查看 inode 使用情况[rootcentos7 ~]# df -i /myapp-2Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb265536655360100% /myapp-2解决# 思路1删除大量小文件[rootcentos7 ~]# rm -f /myapp-2/file-0*# 思路2合并大量小文件为单个文件[rootcentos7 ~]# cat /myapp-2/file-{00001..10000} file-00001四、总结知识点核心命令/工具关键要点查看设备lsblk、blkid识别块设备、UUID查看空间df、dudf看文件系统du看目录挂载卸载mount、umount挂载点必须为空目录卸载排错lsof、fuser查找占用进程文件查找locate、findlocate查数据库find实时查找MBR 分区fdisk最多 4 主分区单分区 2TiBGPT 分区gdisk支持 128 分区超大容量万能分区parted支持 MBR/GPT支持非交互式持久挂载/etc/fstab6 个字段开机自动挂载空间不足find、du、lsof大文件/小文件/句柄未释放版权声明本文为课堂学习笔记整理仅供学习交流使用。

相关新闻