day018-磁盘管理-案例
文章目录
- 1. 磁盘分区
- 1.1 手动磁盘分区
- 1.2 重装系统,保留分区
- 1.2.1 选择从光盘启动
- 1.2.2 保留系统盘分区
- 1.2.3 挂载数据盘
- 2. 物理服务器使用流程
- 3. swap
- 3.1 增加swap
- 3.2 关闭swap
- 4. 故障案例(红帽类系统)
- 4.1 root密码忘记,重新设置密码
- 4.1.1 进入编辑模式
- 4.1.2 编辑配置
- 4.1.3 取消root密码
- 4.2 从U盘/光盘启动进入救援模式
- 4.2.1 用光盘进入救援模式
- 4.2.2 补充:制作系统启动U盘
- 4.2.3 用U盘进入救援模式
- 5. no space left on device 磁盘空间不足
- 5.1 inode耗尽
- 5.1.1 故障复现
- 5.1.2 排查(找出系统中大目录)
- 5.1.3 xargs参数转换
- 5.2 文件未彻底删除
- 5.2.1 故障复现
- 5.2.2 排查
- 6. 踩坑记录
- **1. dd 创建的文件为什么能当作分区?**
- 7. 思维导图
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. 物理服务器使用流程
- 拆开包装,上电,进行配置;机架式服务器
- 配置远程控制卡:物理设备卡,不用去机房现场操作
- 配置raid:8块硬盘,2个raid1,6个raid5
- 安装系统:自定义分区,/boot、/、swap、/data
- 连接,基础优化配置:命令行配置、下载软件包、sshd等
- 配置/部署服务(可选):根据需求部署服务、配置
- 服务器上架:服务器放在机柜中。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 5月 20 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 -htotal 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 -htotal 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 5月 20 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 排查
- df -h显示分区满了
- du -sh显示目录没有满
- 怀疑是文件未彻底删除导致的
- 通过
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