目录

1、基本现象

(1)现象1 

编辑(2)现象2

(3)现象3

2、解决思路与方法

(1)查看文件/目录磁盘使用的空间情况

1)du与df命令

 2)通过Ubuntu自带的软件进行查看使用情况

(2)现象分析与解决方法

1)现象1:GParted扩展根目录空间

2)现象2:清除缓存或扩展硬盘空间

3、VMware虚拟机占用空间过大

(1)整理碎片

 (2)清理Ubuntu系统内部的内存

1)删除Vmware tools 产生的缓冲文件

2)清除不使用的磁盘空间

 (3)windows下清理(慎用)


1、基本现象

        当长期在Ubuntu中进行开发,特别是涉及到相关系统内核源码的编译,会出现提示空间不足的情况,大体有如下几种情况:

(1)现象1 

The volume "Filesystem root" has only 0 bypes disk space remaining.

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu

(2)现象2

        在执行apt install给出了类似如下的提示

Need to get 2,478 MB of archives.
After this operation, 4,716 MB of additional disk space will be used.
E: You don't have enough free space in /var/cache/apt/archives/.

(3)现象3

        现象3的本质和处理方式同上述现象2

cannot create temp file for here-document, no space left on device

2、解决思路与方法

(1)查看文件/目录磁盘使用的空间情况

1)du与df命令

1--区别

        df命令:显示目前在Linux系统上的文件系统的磁盘使用情况统计。

        du命令:显示指定的目录或文件所占用的磁盘空间。

2--基本使用

A.命令df

常用命令:

df -h

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_扩容_02

其他参数说明:

-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;

B.命令du

常用命令

A.查看指令目录的大小:

du -sh + 目录路径

或直接到相应的目录下执行

du -sh

例如 :查看根目录下/root的大小

方式1:

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_磁盘空间不足_03

 方式2:

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_扩容_04

 B.要看目录下各个子目录的大小,包括子目录的子目录,但不包含文件:

du -h

若需包含文件,则使用 :

du -h *

若不需要包含子目录的子目录,则使用:

du -sh *

若需要看子目录,则使用:

du -ah

 2)通过Ubuntu自带的软件进行查看使用情况

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_GParted_05

方式一:通过Disks查看

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu_06

方式二:通过 Disk Usage Analyzer 查看

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu中mysql把磁盘占满_07

(2)现象分析与解决方法

1)现象1:GParted扩展根目录空间

        该情况由于在根文件系统中直接进行了编译或者下载,使得根文件系统空间不足,要么清除已下载的部分,要么对根目录进行扩容。

1--腾出空间,考虑卸载一个或若干个占用空间较大的不常用的应用软件

注意:若重启后没有桌面且打不开terminal的话,建议先使用Ctrl+Alt+F1进入tty1界面进行登录操作。这主要是因为系统在存储空间不足时给出可提示,如果选择了Ignore(忽略),系统可以继续运行,但是重启后桌面可能就没有了。

2--腾出一定空间的目的是为了可以进行一些系统的基本命令操作,尤其是接下来需要安装扩容软件——GParted

A.安装

sudo apt-get install gparted

B.启动

sudo gparted

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu_08

C.选择需要扩展的部分,然后先压缩其右边区域,再进行扩展。如下,需要扩展文件系统部分的空间(即上图中/dev/sda3),首先对右边的sda4区域进行压缩。

注意:可以看到开辟的空间都带有钥匙标记,这时不能对分区进行操作,需要先卸载(unmount)或者停止(swapoff)。

2)现象2:清除缓存或扩展硬盘空间

        该情况由于系统硬盘空间不足,即在装Ubuntu的时候分配的硬盘空间不足,可通过清除缓存或者增大Ubuntu的硬盘空间来解决。

本解决方法中的清除缓存的核心思想是找出系统中的大文件,对不需要的进行清除。这实际上要求实践者对Linux系统根目录下各个文件夹的基本作用要有一定的了解,甚至熟悉,本文主要从以下几个维度提供解决的思路,其他的读者可以自行发掘然后补充。

1--清除缓存

        清除缓存从以下几个维度进行:

A.清除已下载和安装的软件包

a.清除所有已下载的过期安装包

sudo apt-get autoclean

b.清除所有已下载的安装包

sudo apt-get clean

【可选项】c.在某个空间大的分区建立一个目录,然后把/var/cache/apt/archives换成指向那个目录的软链接 

mkdir -p "$HOME/debs/partial"
sudo rm -rf /var/cache/apt/archives
sudo ln -s "$HOME/debs" /var/cache/apt/archives

说明:该步骤的目的非必须,要考虑清除,该步骤的意义是一般Linux通过apt install安装的软件都默认在/var/cache/apt/archives中,我们为了节约空间,可以将这个路径转到其他空间更大的位置中,因此该步骤根据实际情况慎重考虑。

        上述A,B两个步骤也是为了清除/var/cache/apt/archives下已经安装的软件包,可分别在执行前和执行后进行查看。

B.清除一些无用的占用空间较大的容量

        在Ubuntu中一般安装的软件的 log会存放在/var路径下,因此可以特别查看该目录相应的文件,必要时,可以直接rm -rf删掉无用的log文件。

        根据上述查看空间大小的命令,可以执行如下命令进行查看

sudo du -sh /*

C.清除一些无用的镜像文件

        该方式在一定程度上可以有效地释放/boot下的空间。

        随着使用时间的推移,被替换下来的老旧内核版本将会占用一定的磁盘空间而造成浪费。每个内核映像文件和相关的模块文件/header(头文件)会占用大约 200 – 400 M 的磁盘空间,如果频繁升级内核版本,老旧内核文件对空间的浪费将会迅速增加。

        使用如下命令,可以查看到所有可引导版本的内核文件:

ll /boot/

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_磁盘空间不足_09

        找到 Linux 镜像:/boot/vmlinuz-x.xx.x-xx-generic
        找到 initrd 镜像:/boot/initrd.img-x.xx.x-xx-generic

        在正式开始清理之前,请大家一定注意至少保留两个最近的内核版本,以保证出问题之后还有一步退路。

        Ubuntu 的内核映像文件主要包括以下类型的包:

        linux-image- :内核映像文件

        linux-image-extra- :扩展内核模块

        linux-headers- :内核头文件

dpkg --list | grep linux-imagedpkg --list | grep linux-headers

a.查看目前系统中安装的内核镜像

sudo dpkg --get-selections |grep linux-image

b.查看目前系统所使用的内核镜像

sudo uname -r

 c.除了自己使用的镜像,其余的镜像都是多余的,可以手动删除

        方式可参考下面的命令,根据自己系统不需要的镜像的版本替换到相应的位置即可。

方式一(推荐)

        直接通过 apt-get purge 来进行删除,使用 apt-get remove 命令会保留相应的配置文件,所以还会有deinstall文件,这就是下述方法二为什么要删除多个文件,除了相应的镜像文件,还有相应的依赖。

:两者区别

        apt-get remove 会删除软件包而保留软件的配置文件
        apt-get purge 会同时清除软件包和软件的配置文件

apt-get purge linux-image-版本-generic 
apt-get purge linux-headers-版本

方式二

        注意这里可以同时删除不使用的镜像以及其相应的依赖,否则单独删除相应的镜像,系统可能会报错。

sudo apt-get remove linux-image-版本-generic linux-modules-extra-版本-generic
sudo rm -rf /boot/vmlinuz-版本-generic
sudo rm -rf /boot/initrd.img-版本-generic

2--在虚拟机软件中增加Ubuntu主机硬盘空间,并在Ubuntu Disks中增大实际使用的硬盘大小。

        该方式比较简单,只要进行简单的两个步骤即可完成。

A.关闭正在运行的虚拟机,进入如下图所示,增加Ubuntu的硬件空间。

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_GParted_10

说明

        第一,这里在扩展前,还可以进行碎片整理,对Ubuntu进行碎片整理后,会发现你的主机硬盘的空间会变大;

        第二,扩展的前提是不能有相应的虚拟机快照,否则会出现如上图所示灰色按钮无法点击,可以先将快照删除即可。如果是经常需要使用Ubuntu进行软件系统开发,建议将硬盘的大小扩展到80G-120G最佳。

        第三,合并多个vmdk虚拟磁盘的扩展问题

  • 多个vmdk虚拟磁盘由来原因
  • 原因1:可能是在安装虚拟机时配置的选项问题,如上图所示,若选择了“将虚拟磁盘拆分成多个文件”
  • 原因2:可能是通过VMware虚拟磁盘管理器vmware-vdiskmanager.exe对磁盘进行管理,将虚拟磁盘拆分成多个文件,在文章的最后有提到。
  • 多个vmdk虚拟磁盘合并方式

                同样是借助VMware虚拟磁盘管理器vmware-vdiskmanager.exe。

                进入vmware安装目录,例如下图所示

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_磁盘空间不足_11

           通过调用程序vmware-vdiskmanager.exe,跟上参数,指定需要合并的虚拟磁盘,具体如下图所示

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu中mysql把磁盘占满_12

-r <source-disk>:转换指定的磁盘; 需要指定目标磁盘类型。对于本地目标磁盘,必须指定磁盘类型。

        当出现下如所示,即合并成功:

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu中mysql把磁盘占满_13

B.增加硬盘空间后,并不会自动增加Ubuntu的空间,还需要进入系统进行相应的扩展设置。

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu_14

相邻的左边的磁盘即可。注意,该种方法,没有办法跨过相邻的区域对其他区域进行分配,如果有该需求,可见上述通过 GParted 软件。

         分配方式如下图所示:

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_扩容_15

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_扩容_16

3、VMware虚拟机占用空间过大

        该点主要是因为虚拟机占用物理内存过大,可以通过一些方式方法进行优化。

(1)整理碎片

        在前面扩展磁盘空间部分提到,有一个选项为“碎片整理”,如下图所示,通过该方式,在一定程度上可以更加充分的利用物理磁盘空间。

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu中mysql把磁盘占满_17

 (2)清理Ubuntu系统内部的内存

        该方式和前面提到的删除系统中无用的软件思路一直,具体有以下两个方式。

1)删除Vmware tools 产生的缓冲文件

1--用户目录下 .cache/vmware/drag_and_drop,这个路径下的文件都可以删除
说明:在vmware虚拟机下安装的ubuntu系统,为了在windows和ubuntu之间拷贝数据方便,所以在vmware上安装了vmware tools。上述目录即为缓存区目录,从windows拷贝文件的时候会先将文件拷贝到这个缓存区目录里面,这会导致ubuntu的可用空间急速下降。因此可以定期清理该缓存目录。
2--清除残留的安装包 :具体可按照上述提到的方法和步骤。

2)清除不使用的磁盘空间

1--将碎片空间填充上0(:结束的时候会提示磁盘空间不足,忽略即可)

sudo dd if=/dev/zero of=/0bits bs=20M

2--删除上述的0bits的填充(:此时用df -h 会发现可用的虚拟空间增加许多,但是实际的磁盘空间没有缩减)

 (3)windows下清理(慎用)

        该方式是通过windows下VMware自带的管理工具进行请理,但是要注意,此步骤后会产生多个vmdk虚拟磁盘,会给后续的一些其他虚拟机磁盘设置带来不变(如扩展磁盘空间)。

1)打开Windows自带的terminal或者Windows PowerShell(推荐,直接菜单搜索即可)

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu中mysql把磁盘占满_18

2)进入vmware安装目录,例如下图所示

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_磁盘空间不足_11

         关于vmware-vdiskmanager.exe使用,这里不做详细表述,可参考如下文章:

VMware虚拟磁盘管理器用法帮助 用法:vmware-vdiskmanager.exe_零点零一的博客_vmware磁盘管理

3)通过调用程序vmware-vdiskmanager.exe,跟上参数k,缩小指定的虚拟磁盘,例如下图所示

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_ubuntu_20

         等待如下图所示,表示虚拟机已经压缩成功。

ubuntu中mysql把磁盘占满 ubuntu系统磁盘满了_扩容_21