day018-磁盘管理-案例

发布于:2025-05-21 ⋅ 阅读:(19) ⋅ 点赞:(0)

1. 磁盘分区

常见分区 说明 大小
/boot 引导分区,引导系统启动;存放Linux内核文件 1g/2g
/根分区 存放软件包、安装服务 20g起步
swap 交换分区(虚拟内存分区),特殊文件系统,没有挂载点。
特殊环境中数据库、存储服务、k8s环境;
推荐关闭swap,除非特殊需求(比如java)配置swap。
建议最多8g
/data 独立数据分区,名字和路径可以自己定义 剩余所有空间

1.1 手动磁盘分区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 安装系统后,在数据盘添加些文件。

在这里插入图片描述

1.2 重装系统,保留分区

  • 模拟系统故障后,无法进入系统,需要恢复之前的数据。
  • 需要从CD启动系统

1.2.1 选择从光盘启动

  • 挂载系统盘
  • 开机时摁下Esc键,进入系统启动选择菜单,选择光盘启动

在这里插入图片描述

  • 在系统log界面按Esc,多试几次
  • ctrl+alt+insert是虚拟机重启快捷键

在这里插入图片描述

  • 选择安装系统

在这里插入图片描述

1.2.2 保留系统盘分区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 数据盘不要变
  • 其他和重新安装系统一样

1.2.3 挂载数据盘

在这里插入图片描述

  • 数据盘是最后剩余容量的分区,所以是扩展分区,而使用扩展分区必须划分逻辑分区,所以编号从5开始
  • 而且从该分区的容量可以推断sda5是数据盘
  • 接下来直接挂载就行了

在这里插入图片描述

  • 最后查看下数据盘的文件,发现没有丢失。

2. 物理服务器使用流程

  1. 拆开包装,上电,进行配置;机架式服务器
  2. 配置远程控制卡:物理设备卡,不用去机房现场操作
  3. 配置raid:8块硬盘,2个raid1,6个raid5
  4. 安装系统:自定义分区,/boot、/、swap、/data
  5. 连接,基础优化配置:命令行配置、下载软件包、sshd等
  6. 配置/部署服务(可选):根据需求部署服务、配置
  7. 服务器上架:服务器放在机柜中。IDC数据中心机房

3. swap

  • swap是交换分区,也叫虚拟内存
  • 查看swap命令:free -h、top、htop

3.1 增加swap

# 创建1g的分区,用dd命令比较方便
[root@oldboy99-Kylin /data]# dd if=/dev/zero of=./1g bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,11.2178 s,95.7 MB/s
[root@oldboy99-Kylin /data]# ll
总用量 1048576
-rw-r--r-- 1 root root 1073741824  520 19:42 1g
# 将分区格式化成swap
[root@oldboy99-Kylin /data]# mkswap ./1g 
mkswap: ./1g:不安全的权限 0644,建议使用 0600。
正在设置交换空间版本 1,大小 = 1024 MiB (1073737728  个字节)
无标签,UUID=98ff0575-589a-43cf-9c5d-6043db9ccfb5
# 修改权限
[root@oldboy99-Kylin /data]# chmod 600 1g 
# 开启swap分区
[root@oldboy99-Kylin /data]# swapon 1g
# 查看虚拟内存
[root@oldboy99-Kylin /data]# free -h
              total        used        free      shared  buff/cache   available
Mem:          948Mi       203Mi       104Mi       2.0Mi       639Mi       598Mi
Swap:         3.1Gi       5.0Mi       3.1Gi
  • 上面是临时配置swap,永久配置需要修改fstab文件
/data/1g                none                    swap    defaults        0       0

3.2 关闭swap

  • 临时关闭:swapoff /data/1g
  • 临时关闭所有swap:swapoff -a
[root@oldboy99-Kylin ~]# swapoff -a
[root@oldboy99-Kylin ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          948Mi       206Mi       546Mi       7.0Mi       194Mi       592Mi
Swap:            0B          0B          0B
  • 永久关闭:注释掉/etc/fstab中有关swap的行

ubuntu系统中,除了上面两个步骤还要执行:

systemctl mask swap.target(永久禁用 swap)

4. 故障案例(红帽类系统)

4.1 root密码忘记,重新设置密码

  • 这个案例适用于Linux无法启动、误修改/etc配置导致的无法启动
  • Linux自带救援模式,系统故障不严重时进入该模式即可
  • 比较严重时使用U盘/关盘进入救援模式

4.1.1 进入编辑模式

  • 在系统选择界面按e进入编辑模式

在这里插入图片描述

  • 需要输出编辑模式的用户和密码,不是root的密码

在这里插入图片描述

4.1.2 编辑配置

  • 找到 linux的行,修改ro为rw,表示读写权限
  • 在该行最后添加:init=/bin/bash

在这里插入图片描述

  • ctrl+x,启动系统,进入救援模式

4.1.3 取消root密码

  • vim /etc/passwd
  • 将root用户的密码标志取消

在这里插入图片描述

  • 重启系统,无root密码也可以进入了

4.2 从U盘/光盘启动进入救援模式

  • 针对系统故障严重,无法进入grub菜单的情况

4.2.1 用光盘进入救援模式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 选择救援模式

在这里插入图片描述

  • 这些是光盘中的文件系统,需要挂载本地的root文件系统

在这里插入图片描述

在这里插入图片描述

  • 挂载root文件系统后,进入该目录下,可以修改原主机的配置文件了

4.2.2 补充:制作系统启动U盘

  • https://www.ventoy.net/cn/,下载软件
  • 选择一个U盘,确保里面没有需要的文件

在这里插入图片描述

  • 复制需要的镜像到U盘内

4.2.3 用U盘进入救援模式

  • 打开主机磁盘管理,查看U盘编号

    在这里插入图片描述

  • 将U盘连接到虚拟机

在这里插入图片描述

  • U盘编号是5,选择编号5的硬盘

在这里插入图片描述

在这里插入图片描述

  • 添加成功后的是硬盘4

在这里插入图片描述

  • 开启需要选择从硬盘4启动系统,所以需要调整BIOS中系统的启动顺序
  • 选择进入固件,直接进入BIOS

在这里插入图片描述

  • 将第四块硬盘移到最上面(+)

在这里插入图片描述

在这里插入图片描述

  • 保存配置,重启系统,选择硬盘启动系统

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5. no space left on device 磁盘空间不足

常见原因 排查 如何解决
经典原因:磁盘空间不足(block不足);有大文件 df/du 定位到目录或文件,确定之后操作
inode耗尽 找出系统中的大目录(1M) 清理这个目录
文件未彻底删除,日积月累导致磁盘空间不足 lsof命令检查delete标记 定位到具体进程,重启服务即可

5.1 inode耗尽

  • inode存放文件属性信息,inode数量格式化后就固定了
  • 正常使用情况下,block使用的多一些
  • 但是也有一些原因导致有大量小文件出现,占用inode

5.1.1 故障复现

# 创建小分区
[root@oldboy99-Kylin /data]# dd if=/dev/zero of=./20m bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB,20 MiB)已复制,0.00808378 s,2.6 GB/s
[root@oldboy99-Kylin /data]# ll 20m 
-rw-r--r-- 1 root root 20971520  520 21:32 20m
# 格式化分区
[root@oldboy99-Kylin /data]# mkfs.xfs 20m 
meta-data=20m                    isize=512    agcount=1, agsize=5120 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=5120, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# 挂载分区并查看
[root@oldboy99-Kylin /data]# mount ./20m /inode/
[root@oldboy99-Kylin /data]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 453M     0  453M    0% /dev
tmpfs                    475M     0  475M    0% /dev/shm
tmpfs                    475M  6.9M  468M    2% /run
tmpfs                    475M     0  475M    0% /sys/fs/cgroup
/dev/mapper/klas-root     66G  9.8G   56G   15% /
tmpfs                    475M     0  475M    0% /tmp
/dev/sda1               1014M  202M  813M   20% /boot
/dev/sdc1               1017M   40M  978M    4% /app/data
/dev/mapper/klas-backup   32G  260M   32G    1% /backup
tmpfs                     95M     0   95M    0% /run/user/0
/dev/loop0                15M  1.2M   14M    9% /inode
  • 查看测试分区的inode数量
[root@oldboy99-Kylin /data]# df -i
文件系统                  Inodes 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs                  115792     498   115294       1% /dev
tmpfs                     121353       1   121352       1% /dev/shm
tmpfs                     121353     757   120596       1% /run
tmpfs                     121353      18   121335       1% /sys/fs/cgroup
/dev/mapper/klas-root   34134016  130334 34003682       1% /
tmpfs                     121353      14   121339       1% /tmp
/dev/sda1                 524288     345   523943       1% /boot
/dev/sdc1                 523776       3   523773       1% /app/data
/dev/mapper/klas-backup 16664576      16 16664560       1% /backup
tmpfs                     121353       5   121348       1% /run/user/0
/dev/loop0                 10240       3    10237       1% /inode
  • 创建10237+的小文件

在这里插入图片描述

5.1.2 排查(找出系统中大目录)

  • ls -l显示的是目录的block值大小
  • 目录中文件越多该值越大
# 查找根目录下大小大于1M的目录
[root@oldboy99-Kylin ~]# find / -type d -size +1M

5.1.3 xargs参数转换

  • 创建/删除大量文件时需要该命令,与管道配合使用
  • touch {1…10000000},这样的命令会占用大量的内存,不适用
[root@oldboy99-Kylin ~/test]# echo {1..100000}.txt |xargs touch
[root@oldboy99-Kylin ~/test]# ll |wc -l
100001
  • xargs是将管道左侧命令的结果作为右侧命令的参数
  • 如果没有xargs命令,左侧的结果只是一堆字符,右侧命令不能识别
  • 删除也是同样的道理,ls |xargs rm -f

5.2 文件未彻底删除

  • 文件的硬链接数量为0时,文件被彻底删除了
  • 当有其他程序使用文件时,文件不会被彻底删除

5.2.1 故障复现

# 创建大文件
[root@oldboy99-Kylin ~/test]# dd if=/dev/zero of=./big bs=1M count=30000
记录了30000+0 的读入
记录了30000+0 的写出
31457280000字节(31 GB,29 GiB)已复制,414.527 s,75.9 MB/s
# 查看分区大小和目录大小
[root@oldboy99-Kylin ~/test]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 453M     0  453M    0% /dev
tmpfs                    475M     0  475M    0% /dev/shm
tmpfs                    475M  6.9M  468M    2% /run
tmpfs                    475M     0  475M    0% /sys/fs/cgroup
/dev/mapper/klas-root     66G   40G   27G   61% /
tmpfs                    475M     0  475M    0% /tmp
/dev/sda1               1014M  202M  813M   20% /boot
/dev/sdc1               1017M   40M  978M    4% /app/data
/dev/mapper/klas-backup   32G  260M   32G    1% /backup
tmpfs                     95M     0   95M    0% /run/user/0
/dev/loop0                15M  6.6M  8.1M   45% /inode
[root@oldboy99-Kylin ~/test]# du -sh ./
30G	./
  • 用其他程序读取该文件
[root@oldboy99-Kylin ~/test]# tail -f big 
  • 删除该文件,观察空间是否释放
[root@oldboy99-Kylin ~/test]# \rm -f big 
[root@oldboy99-Kylin ~/test]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 453M     0  453M    0% /dev
tmpfs                    475M     0  475M    0% /dev/shm
tmpfs                    475M  6.9M  468M    2% /run
tmpfs                    475M     0  475M    0% /sys/fs/cgroup
/dev/mapper/klas-root     66G   40G   27G   60% /
tmpfs                    475M     0  475M    0% /tmp
/dev/sda1               1014M  202M  813M   20% /boot
/dev/sdc1               1017M   40M  978M    4% /app/data
/dev/mapper/klas-backup   32G  260M   32G    1% /backup
tmpfs                     95M     0   95M    0% /run/user/0
/dev/loop0                15M  6.6M  8.1M   45% /inode
[root@oldboy99-Kylin ~/test]# du -sh ./
0	./
  • 文件系统分区显示空间没有释放
  • 当前目录空间已变成0

5.2.2 排查

  1. df -h显示分区满了
  2. du -sh显示目录没有满
  3. 怀疑是文件未彻底删除导致的
  4. 通过 lsof |grep deleted定位到具体的进程、服务
  • lsof(List Open Files)用于 列出当前系统打开的文件
  • lsof | grep deleted 用于查找 已被删除但仍被进程占用的文件

在这里插入图片描述

  • 停止或重启服务即可
[root@oldboy99-Kylin ~/test]# kill 1967
[root@oldboy99-Kylin ~/test]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 453M     0  453M    0% /dev
tmpfs                    475M     0  475M    0% /dev/shm
tmpfs                    475M  6.9M  468M    2% /run
tmpfs                    475M     0  475M    0% /sys/fs/cgroup
/dev/mapper/klas-root     66G  9.8G   56G   15% /
tmpfs                    475M     0  475M    0% /tmp
/dev/sda1               1014M  202M  813M   20% /boot
/dev/sdc1               1017M   40M  978M    4% /app/data
/dev/mapper/klas-backup   32G  260M   32G    1% /backup
tmpfs                     95M     0   95M    0% /run/user/0
/dev/loop0                15M  6.6M  8.1M   45% /inode
[root@oldboy99-Kylin ~/test]# du -sh ./
0	./

6. 踩坑记录

1. dd 创建的文件为什么能当作分区?

dd 命令可以生成一个 全零填充的二进制文件;

这个文件本质上是一个 未格式化的空白磁盘镜像,可以被操作系统识别为“虚拟磁盘”。

7. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX


网站公告

今日签到

点亮在社区的每一天
去签到