系统管理体系-磁盘管理体系

1.磁盘分区

  • 磁盘分区概念:主分区,扩展分区,逻辑分区,MBR,GPT
  • 磁盘命名及磁盘分区命名
  • 实战操作

1.1.预备姿势

  • MBR: 每一块硬盘上存放磁盘引导程序,引导程序在磁盘开头部分,用于引导系统启动。我们一般不用太关注,我们安装系统的时候自动安装。

  • 位置:磁盘分区表 磁盘的开始部分:0磁头,0磁道,1扇区(512字节)

  • 这512字节存放了

    • 引导程序446字节(MBR)
    • 磁盘分区表(64字节) 4个分区表
    • 结束标记 55AA,2字节

image

  • 分区表64字节,每个分区占用16字节,最多只有4个分区,

    • 这4个分区叫做主分区

      • 如果只划分1分区使用所有空间,将无法继续划分分区。
      • 如果划分了4个分区,但是磁盘空间还有剩余,剩余空间将无法继续使用。
    • 扩展分区是用于解决主分区数量主分区只能有4个问题,扩展分区无法直接使用,需要在扩展分区下面创

      建逻辑分区,存放数据

    • 逻辑分区在扩展分区中,用于存放数据.

  • 主分区-扩展分区-逻辑分区关系

image

  • 小结

    • 这些分区概念,分区使用MBR形式,主分区+扩展分区最多4个(扩展分区只能1个),扩展分区用于创

      建逻辑分区。

    • 未来使用基本就是创建主分区就够了,安装系统的时候自动创建主分区,创建扩展分区,创建逻辑分区

      即可。

1.2.磁盘及分区命名

  • 磁盘文件或分区文件放在/dev/下面
  • 命名方式如下

硬盘命名

#磁盘接口:
   sas/sata/scsi接口的硬盘,硬盘名字是以sd开头
   虚拟机(kvm)/公有云:     硬盘名字是以vd开头
   
#第几块硬盘:通过字母表示从字母a开始一次类推。
/dev/sda

#第1块硬盘(SAS)接口
/dev/sda


分区命名

分区命名是根据分区类型进行命名的。
如果是主分区或者扩展分区则分区号从1-4范围。
如果是逻辑分区,逻辑分区的分区号从5开始。

#案例01 硬盘及分区命名
第2块SATA硬盘的第1个主分区   /dev/sdb1      
第3块SAS硬盘的第2个逻辑分区   /dev/sdc6
第5块公有云的云盘的第3个主分区 /dev/vde3

2.磁盘分区实战

2.1概述

  • 一块硬盘,磁盘分区三部曲
    • 打隔断:分区操作
    • 装修,格式化:创建文件系统
    • 安装门窗:挂载(命令,配置文件)

温馨提示:

挂载:给设备设置个入口,如果不挂载,这个设备无法访问,类似于没有门窗的监狱

  • 环境准备
  • 添加2块硬盘
  • 2个1g硬盘即可
  • 检查
[root@myvps ~]# fdisk -l |grep '/dev/sd'
磁盘 /dev/sdc:1073 MB, 1073741824 字节,2097152 个扇区
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    83886079    40893440   8e  Linux LVM

2.2.磁盘分区

# 案例02 sdb硬盘创建20MB的分区

fdisk /dev/sdb
案例03 创建一个分区使用硬盘所有容量
  • 案例02 创建20MB的分区
#1 操作硬盘
fdisk /dev/sdb

#2. 对硬盘分区进行增删改查
p print 输出磁盘分区信息
n new   创建分区
d delete 删除分区
w write 保存并退出
q quit 退出不保存

#3. 创建20MB分区
命令(输入 m 获取帮助):n  #创建分区
Partition type:        #提示选择 类型
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 回车即可  #输入p	或回车默认使用主分区
Using default response p
分区号 (1-4,默认 1):回车即可  #分区号回车使用默认的1号
起始 扇区 (2048-208895,默认为 2048):回车即可 #回车,使用默认的起点
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-208895,默认为 208895):+20M      #+20M分区20MB    
分区 1 已设置为 Linux 类型,大小设为 20 MiB

#4. 通过p查看
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos
磁盘标识符:0x2af54b05
   设备 Boot     Start         End     Blocks   Id System
/dev/sdb1            2048 43007 20480 83 Linux #这里有sdb1即可。
#5. 通过w保存退出
#6. 查看/dev/sdb*

温馨提示:fdisk操作的时候,按删除键会出现无法删除现象,使用 ctrl+u 或 ctrl+删除键 即可删除

  • 案例03 创建一个分区使用硬盘所有容量
令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-208895,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-208895,默认为 208895):
将使用默认值 208895
分区 1 已设置为 Linux 类型,大小设为 101 MiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

2.3.格式化(创建文件系统) ⭐️⭐️⭐️⭐️⭐

  • 创建 make 文件系统 filesystem,表示给磁盘分区进行装修,给磁盘分区创建规则,一定量的inode,block。

  • mkfs(make filesystem) 创建文件系统(格式化)

mkfs 磁盘或分区
mkfs.xfs /dev/sdb1

xfs是文件系统类型,CentOS 7默认的文件系统类型。
mkfs.ext4 文件系统类型,用于CentOS 6.x 或公有云使用。

image

重复格式化错误提示

mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs). 磁盘分区已经格式化。
mkfs.xfs: Use the -f option to force overwrite. 强制格式化mkfs.xxxx   -f 即可

2.4.挂载⭐️⭐️⭐️⭐️⭐

  • Linux中的设备,需要通过挂载命令,给设备指定入口(已经存在的空目录),否则将无法使用.

  • 通过mount命令指定 设备 ,指定 入口(目录) mount 设备 目录

  • 入口: 挂载点,一般是个空目录就行. /mnt linux临时挂载点

#临时挂载(重启Linux系统后挂载失效)
mount /dev/sdb1 /mnt/

[root@myvps ~]# mount /dev/sdb1 /mntt/
[root@myvps ~]# df -h 
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 979M     0  979M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M  9.6M  981M    1% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root   37G  4.6G   33G   13% /
/dev/sda1               1014M  168M  847M   17% /boot
tmpfs                    199M     0  199M    0% /run/user/0
/dev/sdb1               1020M   33M  988M    4% /mntt

[root@myvps ~]# #给/dev/sdb1 设置入口,入口叫/mnt/
[root@myvps ~]# mount /dev/sdb1 /mnt/
[root@myvps ~]# df -h |grep mnt
/dev/sdb1               1020M   33M  988M    4% /mnt

  • 卸载
umount /mnt

umount + 挂载点,表示卸载。

挂载光盘到/media目录

mount /dev/cdrom /media/

目前挂载整个流程:

1.磁盘分区

2.磁盘格式化

3.磁盘挂载

2.5.永久挂载⭐️⭐️⭐️⭐️⭐

我们在Linux下面的操作一般都分为临时和永久,对于挂载来说,我们希望永久生效(临时+永久)。

实现永久挂载的方案:

  • 方案1️⃣使用rc.local ,把挂载命令 mount /dev/sdb1 /data/ 写入到/etc/rc.local,注意命令最好写为绝对路

  • 方案2️⃣专业的开机自动挂载的配置文件/etc/fstab ,根据配置文件的要求把mount命令改为配置文件形式即可。

  • /etc/fstab每一列含义

1列 2列 3列 4列 第5列 6列
设备名字/dev/sdb1或UUID形式 挂载点 文件系统类型:xfs,ext4,swap 一般是defaults,挂载选项 是否备份 是否检查
设备名字方式:/dev/sdb1 /data/ xfs defaults 0 0
UUID形式:UUID="048c0c5e-332a-44b6-bf70-99ff0c3fb2ff"
配置文件形式的mount命令
mount /dev/sdb1 /data/

#/etc/fstab配置中的样子
/dev/sdb1   /data/   xfs   defaults   0 0

如何知晓设备的UUID,UUID设备的ID号码,每个设备独一无二。(命令----> blkid)

image

2.6.挂载光盘

mount /dev/cdrom   /mnt/
ls -l /mnt/Packages/*.rpm |wc -l
  • 磁盘分区,格式化,挂载
    • 磁盘分区:fdisk命令
    • 格式化:创建文件系统, mkfs mkfs -t xfs === mkfs.xfs
    • 挂载: mount(临时), 永久:/etc/rc.local 或 /etc/fstab
  • fstab filesystem文件系统 table 表 文件系统开机自动挂载列表(清单)

3. mbr vs gpt

我们之前提到的Linux主分区,扩展分区合起来最多有4个.是MBR分区格式设置的.

分区表 特点 对应的命令
mbr 支持2tb以内的硬盘,大于2tb则只识别2tb. 区别主分区,扩展分区,逻辑分区 fdisk/parted
gpt 支持大容量硬盘,主分区无限使用(100多个). gdisk/parted
#案例04 创建gpt格式的分区大小10MB (/dev/sdc)

查看硬盘分区信息
parted /dev/sdb print

#编辑/dev/sdc 
parted /dev/sdc

#创建分区表gpt
mktable gpt 或者mklabel gpt 一样   #注意mbr叫做msdos类型 mktable msdos

#创建分区10mb
mkpart primary  0 10
mkpart primary  10 20

#删除分区
rm 1

#退出编辑
q 或quit
  • 核心掌握MBR和GPT区别.
  • 熟练使用parted进行分区即可,parted分区是实时生效

4.创建swap

  • swap交换分区:内存不足的时候临时充当内存,swap占用的磁盘空间
  • 所以未来应用建议:如果内存充足并且服务对性能要求较高,可以关闭swap.
案例05 服务器运行java程序,大量占用内存,以至于开始占用swap如何解决?

- 一步保证网站正常,增加swap空间.
- 联合开发一起排查.

增加1g的swap.
1.创建指定大小的文件1g的文件.
2.把文件转换为swap.
3.激活这个swap,把它加入到linux中.
4.记得配置永久挂载.
  • 操作过程
#1.创建指定大小的文件1g的文件.
dd if=/dev/zero of=/tmp/1g  bs=1M count=1000

if === input file 数据从哪里来,输入文件,一般使用/dev/zero,不断输出空字符.
of === ouput file 创建的文件,存放数据,输出文件
bs === block size 每次读取多少,一般1MB大小.
count === 读取次数

2.把文件转换为swap(格式化).
mkswap /tmp/1g
-----------------------
root@oldboy-king-v2 ~]# file /tmp/1g
/tmp/1g: data           #刚刚创建的文件data普通数据文件
[root@oldboy-king-v2 ~]# mkswap /tmp/1g
正在设置交换空间版本 1,大小 = 1023996 KiB
无标签,UUID=0c072a5f-5ec2-4590-acd3-cae1e1926029
[root@oldboy-king-v2 ~]# file /tmp/1g       #成为了swap 文件
/tmp/1g: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label,
UUID=0c072a5f-5ec2-4590-acd3-cae1e1926029

-----------------------

3.激活这个swap,把它加入到linux中.
[root@oldboy-king-v2 ~]# free -h
             total       used       free     shared buff/cache   available
Mem:           1.9G       201M       596M        9.6M        1.2G        1.6G
Swap:          2.0G         0B        2.0G
# chmod 600 /tmp/1g
# swapon /tmp/1g
# free -h
             total       used       free     shared buff/cache   available
Mem:           1.9G       202M       595M        9.6M        1.2G        1.6G
Swap:          3.0G         0B        3.0G

4.记得配置永久挂载.
方法01 : swapon /tmp/1g写入到rc.local

方法02: 写入/etc/fstab
/tmp/1g       swap     swap   defaults        0 0

5. 企业分区方案

如何设置/,/boot/,swap大小建议.

  • 公有云

  • 物理机/虚拟机(私有云)

  • 服务器存放的数据,不重要

分区 作用与大小
/boot/ 引导分区 引导系统启动与存放引导文件,存放系统内核镜像. 推荐1G即 可.
swap 根据实际内存配置,大于8G,swap配置8G即可. 低于实际内存低于8G, 1.5倍或2倍 ,最大8G. 补充:公有云可以不配置, 如果是java建议配置一 些
/根分区 所有剩余空间给根
  • 服务器存放重要的数据.
分区 作用与大小
/boot/ 引导分 区 引导系统启动与存放引导文件,存放系统内核镜像. 推荐1G即 可.
swap 根据实际内存配置,大于8G,swap配置8G即可. 低于实际内存低于8G, 1.5倍或2倍 ,最大8G. 补充:公有云可以不配置, 如果是java建议配置一 些.
/根分区 给40G-200G,主要安装一些软件.重要数据单独存放
/data/ 剩余所有空间 分区名字自己可以指定.
  • 不知道是否重要.
分区 作用与大小
/boot/ 引导分 区 引导系统启动与存放引导文件,存放系统内核镜像. 推荐1G即 可
swap 根据实际内存配置,大于8G,swap配置8G即可. 低于实际内存低于8G, 1.5倍或2倍 ,最大8G. 补充:公有云可以不配置, 如果是java建议配置一 些.
/根分区 给40G-200G,主要安装一些软件.重要数据单独存放
剩余空间不划分 未来谁使用谁划分.
  • lvm的使用建议
    • 配合着raid+lvm使用,课后任务研究lvm.完成磁盘扩容即可.
逻辑卷.
优点: 可以动态调整分区大小.
缺点: 软件实现,效率较低.

未来可以搭配raid+lvm使用.
者直接raid部署系统,不使用lvm.

预测:未来3-5年的增长情况.
  • 有个重装系统

    没有IP地址:

image

nmtui >>> 选第一个

image

image

image

image

image

最后一个选项是改主机名的

image

image

image

image

没有自动挂载重新挂载就行

image

image

这里我没创建指定的/data分区文件所以没有data这个分区

系统管理-磁盘管理之故障案例

  • 这部分我们掌握Linux常见磁盘空间不足故障案例:模拟,排查,原因,解决流程

1.1 磁盘空间不足-经典版本

  • 错误提示: no space left on device
  • 现象: df -h某个磁盘分区使用率达到100%,如何排查,如何处理?
  • 模拟: 创建1个大文件(小伙伴完成)
dd if=/dev/zero  of=/var/log/nginx.log    bs=1M count=2000
  • 排查 : df , du
#1. df -h 查看哪里空间不足,哪个分区

#2. du -sh详细查看目录所占空间
du -sh /* 排查占用空间大的目录
du -sh /var/*
du -sh /var/log/*  

#3. 最终通过du -sh 排查到具体的大文件或大的目录

#4. 找出后确认是否可以删除.
  • 解决: 通过du -sh 排查到具体的大文件或目录,找出后确认是否可以删除.

⚠ 温馨提示: /sys/ /proc/ 等目录是虚拟目录,不要在里面创建文件,/dev/是设备目录,也不要在里面创建.

  • 这个磁盘空间不足案例是最常见的.
  • 算是block占用导致的磁盘空间不足

1.2 磁盘空间不足-inode

inode存放文件属性信息,block存放文件内容.

inode在磁盘格式化后,数量是固定的

未来工作中可能出现大量小文件,导致占用inode速度快于block,inode不足了,也会导致磁盘空间不足

  • 现象: 操作的时候,提示 no space left on device ,df -h查看发现磁盘空间没有满,问什么原因导致的?

  • 原因: 磁盘空间不足,不是block导致的,还有一种情况是inode数量不足.

  • 排查:

    • 1️⃣ df -h查看磁盘空间没有满,df -i查看inode使用情况.
    • 2️⃣找出这个分区中,大目录(目录本身大小大于1MB,du -sh目录所占空间)就行
    • 3️⃣找出有大量小文件的目录
  • 解决: 确认是否可以删除或处理.

具体查找: find /oldboy/ -type d -size +1M

  • 找个目录模拟与分析
mkdir -p /oldboy/test-inode
cd /oldboy/test-inode
touch {1..100000}

ls -l 查看的目录大小表示目录下面1层,文件名字大小

目录占的磁盘空间: du -sh 查看 目录下面所有文件block大小只和

  • ✔ 模拟inode满了,创建小文件1g
#创建指定大小文件(用于称为磁盘分区)
dd if=/dev/zero  of=/tmp/1g-new   bs=1M  count=1000

#磁盘格式化
mkfs.xfs /tmp/1g-new

#创建挂载点
mkdir  -p /oldboy/inode-error/

#进行挂载
mount /tmp/1g-new   /oldboy/inode-error/

#创建测试文件
cd /oldboy/inode-error/
echo lidao{01..511111}.txt|xargs touch

提示磁盘空间不足的时候,检查df -h 与df -i . 

[root@myvps inode-error]# ls |xargs rm -f #删除

image

  • 核心掌握:inode使用也会导致磁盘空间不足
  • 现象: df -h查看磁盘空间没有满,df -i查看不足
  • 排查: find命令找出指定分区中大目录(大于1M目录
  • 未来具体的情况,服务生成大量小文件.

补充排查某个目录下是否有大量小文件的方法第2个:

find /oldboy/inode-error/  -type f   |xargs dirname |sort|uniq -c

1.3 磁盘空间不足-未彻底删除导致故障

1.3.1 预备姿势-文件删除原理

1个文件被彻底删除的条件:

  • 条件1:删除文件,硬连接数为0,文件相当于被删除了. 使用rm命令

  • 条件2:文件调用数为0,文件是否被使用中(命令,服务)

image

  • 排查
    • 如何知道硬连接数是否为0,一般rm后通过ls,find查看,没有则为0
    • 如何知道进程调用数是否为0, lsof(list open files显示打开的文件), lsof |grep 文件名
[root@myvps ~]# lsof |grep passwd
tail      14086         root   3r     REG              253,0       938   34237162 /etc/passwd
#显示出系统中所有被打开的文件(被调用的文件)
[root@myvps ~]# ps -ef |grep tail
root      14086   1735  0 15:30 pts/1    00:00:00 tail -f /etc/passwd
root      14174   1607  0 15:32 pts/0    00:00:00 grep --color=auto tail
lsof每一列 说明
第1列 命令或服务名字
第2列 pid
第3列 用户
第7列 文件大小(字节
第8列 文件inode号码
最后一列 文件名

1.3.2 故障模拟

  • 现象:

    • 提示磁盘空间不足,df -h提示磁盘空间满了.
    • 继续排查du -sh排查,统计总大小,发现没有满
    • 怀疑可能是文件未彻底删除导致的
  • 模拟与排查

#1. 模拟故障(文件被调用中,但是没有入口)
seq 500000000 >big.log
通过tail -f 调用
rm -f big.log

#2.
排查
df -h
[root@oldboy-aliyun-servers ~]# df -h
Filesystem     Size Used Avail Use% Mounted on
devtmpfs       461M     0 461M   0% /dev
tmpfs           471M     0 471M   0% /dev/shm
tmpfs           471M 728K 471M   1% /run
tmpfs           471M     0 471M   0% /sys/fs/cgroup
/dev/vda1       40G   24G   15G  63% /
tmpfs           95M     0   95M   0% /run/user/0
tmpfs           95M     0   95M   0% /run/user/1001
[root@oldboy-aliyun-servers ~]# du -sh /
3.9G /

#3. 发现问题
通过du -sh 分析发现实际占用的才3.9GB

#4. 继续排查
需要使用lsof
lsof |grep delete
在lsof中delete标记表示这个文件没有入口(硬连接数为0),但是还有进程调用.

lsof |grep nginx
tail      15974         root   3r     REG              253,1 20971520000     792978 /var/log/nginx.log
(deleted)

#5. 解决问题
结束这个进程(服务),重启服务

文件硬链接数为0了,但是进程调用数不为0导致的问题.

现象:df -h查看磁盘满了,实际使用du -sh查看发现没有满

总结:

磁盘空间不足故障 分类 现象 排查 解决
block df -h磁盘空间不足 df -h,du -sh一层一层找,直到找出对应的文件或目录 确认后再删除
inode df -h磁盘空间有剩余,创建文件,操作服务提示磁盘空间不足. df -h,df -i,找出系统中的大目录 确认后再删除
block 文件未彻底删除 df -h查看磁盘空间不足,du -sh 查看磁盘空间还有剩余 lsof | grep delete 找出进程或服务 重启服务

posted @   殇ベ墨~  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示