当前位置: 首页 > java >正文

解决linux中磁盘爆满(准确说是文件系统爆满)导致mysql启动失败的问题——对文件系统进行扩容

今天在rk3568开发板上跑程序的时候发现mysql数据库的数据没读取出来,检查后发现是mysql没有运行,尝试启动mysql服务提示启动失败:job for mysql.service failed...

排查过程

查看mysql错误日志:cat /var/log/mysql/error.log

提示:Error number 28 means 'No space left on device'

查找相关资料后觉得有可能是磁盘空间爆满导致mysql启动失败,于是df -h查看磁盘使用情况,发现挂载在根目录下的磁盘确实是爆满了

疑问:为什么挂载在根目录下的磁盘爆满会导致mysql启动失败?
MySQL 需要写入数据文件、日志、临时文件(如 tmpdir)等。如果根目录(特别是 MySQL 的数据目录,通常是 /var/lib/mysql)所在的分区没有足够空间,写入操作会失败,进而导致服务无法启动。

网上的方法大多是清理根目录下没用的资源来释放内存。通过du -sh /* 发现根目录满的原因主要是因为太多的第三方库so文件在/usr/lib目录下了,想清理无从下手,不知道哪些是没用的资源

首先理清一下磁盘分区和文件系统的关系

磁盘分区是将物理磁盘划分为多个逻辑部分,而文件系统是在每个分区上创建的逻辑结构,用于组织和管理文件和目录。磁盘分区提供了逻辑隔离和独立管理的功能,而文件系统则负责管理文件的存储和访问。

挂载实际上挂的是文件系统

https://blog.csdn.net/m0_65690223/article/details/131408110

所以上面的df -h显示的问题准确点来说是文件系统可使用空间不足导致的mysql启动失败

解决思路:
(1)能否给挂载在根目录下的文件系统扩容?
(2)根目录下占用内存较大的主要是/usr目录,能否把空闲的磁盘挂载在/usr/lib下?
(3)重新烧录镜像,对比根目录下哪些东西是后来添加的,把没用的清理

这里打算尝试方法一:对文件系统/dev/root进行扩容(此方法到后面会有问题,谨慎使用)

1、通过fdisk -l命令查看是否还有可用的磁盘空间,如果有可以磁盘空间可参照以下对文件系统进行扩容

linux对根目录扩容(命令行) - EastWood001 - 博客园

2、因为我的是开发板不是虚拟机,并且通过fdisk -l后发现没有多余磁盘空间,要想扩容磁盘只能更换更大的emmc/sd卡/硬盘,这显然是不现实的,因此需要先缩容再扩容
(对文件系统/dev/mmcblk0p8先缩容,再对/dev/root扩容)

(1)查看磁盘分区情况

root@TQ3568:fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 14.59 GiB, 15655239680 bytes, 30576640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D9700000-0000-4F75-8000-3B6C00005773Device            Start      End  Sectors  Size Type
/dev/mmcblk0p1    16384    24575     8192    4M unknown
/dev/mmcblk0p2    24576    32767     8192    4M unknown
/dev/mmcblk0p3    32768   163839   131072   64M unknown
/dev/mmcblk0p4   163840   425983   262144  128M unknown
/dev/mmcblk0p5   425984   491519    65536   32M unknown
/dev/mmcblk0p6   491520 13074431 12582912    6G unknown
/dev/mmcblk0p7 13074432 13336575   262144  128M unknown
/dev/mmcblk0p8 13336576 30576575 17240000  8.2G unknown ##注意起始扇区13336576,后面会用到

(2)缩小/dev/mmcblk0p8 分区上的文件系统(/userdata)

root@TQ3568:umount /dev/mmcblk0p8  ##卸载分区
root@TQ3568:
root@TQ3568:
root@TQ3568:e2fsck -f /dev/mmcblk0p8  ##强制检查并修复 ext 系列文件系统
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
userdata: 16/1145664 files (6.3% non-contiguous), 290436/8620000 blocks
root@TQ3568:resize2fs /dev/mmcblk0p8 6144M   ##改/dev/mmcblk0p8分区文件系统的大小为6G
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/mmcblk0p8 to 6291456 (1k) blocks.
The filesystem on /dev/mmcblk0p8 is now 6291456 (1k) blocks long.root@TQ3568:
root@TQ3568:lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0      179:0    0 14.6G  0 disk
├─mmcblk0p1  179:1    0    4M  0 part
├─mmcblk0p2  179:2    0    4M  0 part
├─mmcblk0p3  179:3    0   64M  0 part
├─mmcblk0p4  179:4    0  128M  0 part
├─mmcblk0p5  179:5    0   32M  0 part
├─mmcblk0p6  179:6    0    6G  0 part /
├─mmcblk0p7  179:7    0  128M  0 part /oem
└─mmcblk0p8  179:8    0  8.2G  0 part        ##分区大小没变,但文件系统缩小为6G
mmcblk0boot0 179:32   0    4M  1 disk
mmcblk0boot1 179:64   0    4M  1 disk
mmcblk3      179:96   0  7.2G  0 disk
└─mmcblk3p1  179:97   0  7.2G  0 part /mnt/sdnand

(3)缩小/dev/mmcblk0p8 分区(这里采用parted方法,也可以采用fdisk,具体见参考链接)

root@TQ3568:parted /dev/mmcblk0
GNU Parted 3.3
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resizepart 8 25919487s  ##第8分区即/dev/mmcblk0p8
Warning: Shrinking a partition can cause data loss, are you sure you want to
continue?
Yes/No? yes
(parted) quit
Information: You may need to update /etc/fstab.##(parted) resizepart 8 <新的结束位置>
##新的结束位置 = 起始位置 + 文件系统大小
##计算新的分区结束位置
##/dev/mmcblk0p8 起始扇区:13336576
##文件系统大小:6144M = 6 × 1024 × 1024 KB = 6291456 KB
##parted 的默认单位是 MB 或 GB,也可以用扇区 (s)
##可以用下面公式算结束扇区:
##结束扇区 = 起始扇区 + 文件系统大小(扇区数) - 1##文件系统 6GB = 6 × 1024 × 1024 KB = 6291456 KB
##每个扇区 512B = 0.5 KB
##所以扇区数 = 6291456 KB ÷ 0.5 KB/扇区 = 12582912 扇区
##结束扇区 = 13336576 + 12582912 - 1 ≈ 25919487

(4)验证新文件系统

root@TQ3568:e2fsck -f /dev/mmcblk0p8
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
userdata: 16/835584 files (6.3% non-contiguous), 212293/6291456 blocks
root@TQ3568:
root@TQ3568:mount /dev/mmcblk0p8 /userdata   ##重新挂载到/userdata
root@TQ3568:
root@TQ3568:df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       5.9G  5.6G  2.1M 100% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           391M  1.5M  389M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           2.0G   16K  2.0G   1% /tmp
/dev/mmcblk0p7  119M   16M   96M  15% /oem
/dev/mmcblk3p1  7.3G   64K  7.3G   1% /mnt/sdnand
tmpfs           391M     0  391M   0% /run/user/0
tmpfs           391M   12K  391M   1% /run/user/1000
/dev/mmcblk0p8  5.8G  327K  5.7G   1% /userdata    ##缩容后文件系统的大小

(5)查看/dev/mmcblk0下未分配空间,可以看到刚才缩容的空间

root@TQ3568:parted /dev/mmcblk0 print free
Model: MMC 58A43A (sd/mmc)
Disk /dev/mmcblk0: 15.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number  Start   End     Size    File system  Name      Flags17.4kB  8389kB  8371kB  Free Space1      8389kB  12.6MB  4194kB               uboot2      12.6MB  16.8MB  4194kB               misc3      16.8MB  83.9MB  67.1MB               boot4      83.9MB  218MB   134MB                recovery5      218MB   252MB   33.6MB               backup6      252MB   6694MB  6442MB  ext4         rootfs7      6694MB  6828MB  134MB   ext4         oem8      6828MB  13.3GB  6442MB  ext4         userdata13.3GB  15.7GB  2384MB  Free Space    ##未使用空间2348M

(6)扩容/dev/mmcblk0p6分区

这里遇到一个问题:空闲空间的start从13.3GB开始,如果扩容mmcblk0p6会和mmcblk0p7/8的分区重叠,导致扩容失败

(parted) resizepart 6 15.7GB
Error: Can't have overlapping partitions.  ##扩容失败

到这里打算先把oem和userdata中的内容先复制到/dev/mmcblk0p6分区当中(这里删除了一些日志文件还能有一些空余的空间),然后把mmcblk0p7/8分区先删除,等把mmcblk0p6扩容后再重新建立分区

##把/oem中的数据复制到/opt/tempdir/oem/oem
root@TQ3568:/opt/tempdir/oem/oem:ls -l
total 11976
-rw-r--r-- 1 root root   87402 Aug 19 14:21 200frames_count.h264
-rw-r--r-- 1 root root  512017 Aug 19 14:21 SampleJPGImage_500kbmb.jpg
-rw-r--r-- 1 root root 5253880 Aug 19 14:21 SampleVideo_1280x720_5mb.mp4
-rw-r--r-- 1 root root   81582 Aug 19 14:21 belle-nuit-testchart-1080p.png
drwxr-xr-x 3 root root    4096 Aug 19 14:21 dts
-rw-r--r-- 1 root root 7114880 Aug 19 14:21 game_test.gba
-rw-r--r-- 1 root root   12936 Aug 19 14:21 logo.bmp
-rw-r--r-- 1 root root   22364 Aug 19 14:21 logo_kernel.bmp
drwx------ 2 root root    4096 Aug 19 14:21 lost+found
-rw-r--r-- 1 root root  101760 Aug 19 14:21 piano2-CoolEdit.mp3
-rw-r--r-- 1 root root   96092 Aug 19 14:21 retroarch.cfg##/userdata中的数据复制到/opt/tempdir/userdata
root@TQ3568:/opt/tempdir/userdata:ls -l
total 240
-rw-r--r-- 1 root root  87402 Aug 19 14:24 belle-nuit-testchart-1080p.png
drwx------ 2 root root   4096 Aug 19 14:24 lost+found
-rw-r--r-- 1 root root 101760 Aug 19 14:24 piano2-CoolEdit.mp3
-rwxr-xr-x 1 root root  48792 Aug 19 14:24 rtmpPush

取消mmcblk0p7/8分区的挂载

root@TQ3568:umount /dev/mmcblk0p7
root@TQ3568:umount /dev/mmcblk0p8
root@TQ3568:lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0      179:0    0 14.6G  0 disk
├─mmcblk0p1  179:1    0    4M  0 part
├─mmcblk0p2  179:2    0    4M  0 part
├─mmcblk0p3  179:3    0   64M  0 part
├─mmcblk0p4  179:4    0  128M  0 part
├─mmcblk0p5  179:5    0   32M  0 part
├─mmcblk0p6  179:6    0    6G  0 part /
├─mmcblk0p7  179:7    0  128M  0 part   ##取消挂载
└─mmcblk0p8  179:8    0    6G  0 part   ##取消挂载
mmcblk0boot0 179:32   0    4M  1 disk
mmcblk0boot1 179:64   0    4M  1 disk
mmcblk3      179:96   0  7.2G  0 disk
└─mmcblk3p1  179:97   0  7.2G  0 part /mnt/sdnand
root@TQ3568:

删除mmcblk0p7/8分区,并把mmcblk0p6分区扩容到末尾

(parted) print free
Model: MMC 58A43A (sd/mmc)
Disk /dev/mmcblk0: 15.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number  Start   End     Size    File system  Name      Flags17.4kB  8389kB  8371kB  Free Space1      8389kB  12.6MB  4194kB               uboot2      12.6MB  16.8MB  4194kB               misc3      16.8MB  83.9MB  67.1MB               boot4      83.9MB  218MB   134MB                recovery5      218MB   252MB   33.6MB               backup6      252MB   6694MB  6442MB  ext4         rootfs7      6694MB  6828MB  134MB   ext4         oem8      6828MB  13.3GB  6442MB  ext4         userdata13.3GB  15.7GB  2384MB  Free Space(parted)
(parted)
(parted)
(parted) rm 8   ##删除分区7/8
(parted) rm 7
(parted)
(parted) print free
Model: MMC 58A43A (sd/mmc)
Disk /dev/mmcblk0: 15.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number  Start   End     Size    File system  Name      Flags17.4kB  8389kB  8371kB  Free Space1      8389kB  12.6MB  4194kB               uboot2      12.6MB  16.8MB  4194kB               misc3      16.8MB  83.9MB  67.1MB               boot4      83.9MB  218MB   134MB                recovery5      218MB   252MB   33.6MB               backup6      252MB   6694MB  6442MB  ext4         rootfs6694MB  15.7GB  8961MB  Free Space(parted)
(parted) resizepart 6 100%   ##扩容到末尾
(parted)
(parted) print free
Model: MMC 58A43A (sd/mmc)
Disk /dev/mmcblk0: 15.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number  Start   End     Size    File system  Name      Flags17.4kB  8389kB  8371kB  Free Space1      8389kB  12.6MB  4194kB               uboot2      12.6MB  16.8MB  4194kB               misc3      16.8MB  83.9MB  67.1MB               boot4      83.9MB  218MB   134MB                recovery5      218MB   252MB   33.6MB               backup6      252MB   15.7GB  15.4GB  ext4         rootfs   ##成功扩容mmcblk0p6分区(parted)

(7)扩容mmcblk0p6上的文件系统/dev/root(这里偷个懒,不重新建mmcblk0p7/8分区了,里面的文件也不是很重要)

root@TQ3568:resize2fs /dev/mmcblk0p6  ##扩容文件系统
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mmcblk0p6 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p6 is now 3760635 (4k) blocks long.root@TQ3568:
root@TQ3568:df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  5.5G  8.0G  41% /               ##扩容成功
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           391M  1.5M  389M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           2.0G   16K  2.0G   1% /tmp
/dev/mmcblk3p1  7.3G   64K  7.3G   1% /mnt/sdnand
tmpfs           391M   12K  391M   1% /run/user/1000
tmpfs           391M     0  391M   0% /run/user/0
root@TQ3568:

以上有参考文章缩小或扩大linux ext4文件系统(文末附上在线扩容根文件系统步骤) - 进取有乐 - 博客园

到此也解决了因根目录磁盘空间不足导致mysql启动失败的问题了。

root@TQ3568:systemctl start mysql
root@TQ3568:systemctl status mysql
● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:
enabled)Active: active (running) since Tue 2025-08-19 14:45:16 CST; 10mi
n agoProcess: 721 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exi
ted, status=0/SUCCESS)Main PID: 856 (mysqld)Status: "Server is operational"CGroup: /system.slice/mysql.service└─856 /usr/sbin/mysqld
root@TQ3568:

经过这次排查对Linux下的磁盘分区和文件系统有了一个新的认识。特别是学习如何对磁盘分区/文件系统的空间大小进行管理

http://www.xdnf.cn/news/18181.html

相关文章:

  • 微信小程序实现蓝牙开启自动播放BGM
  • Git#revert
  • Ansible 角色管理指南
  • UART串口通信编程自学笔记30000字,嵌入式编程,STM32,C语言
  • 【Linux仓库】进程创建与进程终止【进程·柒】
  • 第八十三章:实战篇:文 → 图:Prompt 控制图像生成系统构建——从“咒语”到“神作”的炼成!
  • 数据结构——单链表
  • STL库——string(类模拟实现)
  • 【PHP】模拟斗地主后端编写
  • Redis--day8--黑马点评--分布式锁(一)
  • electron 开发笔记
  • 拓扑排序详解:从力扣 207 题看有向图环检测
  • 第一阶段C#-14:委托,事件
  • 【牛客刷题】最大公约数与最小公倍数:算法详解与实现
  • 一个基于纯前端技术实现的五子棋游戏,无需后端服务,直接在浏览器中运行。
  • Leetcode 3649. Number of Perfect Pairs
  • 面向R语言用户的Highcharts
  • 浅谈 Python 正则表达式中的 groups()
  • SpringBoot3整合OpenAPI3(Swagger3)完整指南
  • 【Python】Python 多进程与多线程:从原理到实践
  • Nodejs学习
  • CPTS---Active 复现
  • 【matlab】考虑源荷不平衡的微电网鲁棒定价研究
  • 【每日一题】Day 7
  • C 语言数据结构与算法的复杂度分析:从理论到实战的效率衡量指南
  • Vue2篇——第五章 Vue.js 自定义指令与插槽核心
  • 【JavaEE】(16) Spring Boot 日志
  • Unity作为库导入Android原生工程
  • 【github-action 如何为github action设置secrets/environment】
  • SpringAI集成MCP