目录
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.
(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
其他参数说明:
-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:
方式2:
B.要看目录下各个子目录的大小,包括子目录的子目录,但不包含文件:
du -h
若需包含文件,则使用 :
du -h *
若不需要包含子目录的子目录,则使用:
du -sh *
若需要看子目录,则使用:
du -ah
2)通过Ubuntu自带的软件进行查看使用情况
方式一:通过Disks查看
方式二:通过 Disk Usage Analyzer 查看
(2)现象分析与解决方法
1)现象1:GParted扩展根目录空间
该情况由于在根文件系统中直接进行了编译或者下载,使得根文件系统空间不足,要么清除已下载的部分,要么对根目录进行扩容。
1--腾出空间,考虑卸载一个或若干个占用空间较大的不常用的应用软件
注意:若重启后没有桌面且打不开terminal
的话,建议先使用Ctrl+Alt+F1
进入tty1
界面进行登录操作。这主要是因为系统在存储空间不足时给出可提示,如果选择了Ignore(忽略)
,系统可以继续运行,但是重启后桌面可能就没有了。
2--腾出一定空间的目的是为了可以进行一些系统的基本命令操作,尤其是接下来需要安装扩容软件——GParted
A.安装
sudo apt-get install gparted
B.启动
sudo gparted
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/
找到 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进行碎片整理后,会发现你的主机硬盘的空间会变大;
第二,扩展的前提是不能有相应的虚拟机快照,否则会出现如上图所示灰色按钮无法点击,可以先将快照删除即可。如果是经常需要使用Ubuntu进行软件系统开发,建议将硬盘的大小扩展到80G-120G最佳。
第三,合并多个vmdk虚拟磁盘的扩展问题:
- 多个vmdk虚拟磁盘由来原因
- 原因1:可能是在安装虚拟机时配置的选项问题,如上图所示,若选择了“将虚拟磁盘拆分成多个文件”
- 原因2:可能是通过VMware虚拟磁盘管理器vmware-vdiskmanager.exe对磁盘进行管理,将虚拟磁盘拆分成多个文件,在文章的最后有提到。
- 多个vmdk虚拟磁盘合并方式
同样是借助VMware虚拟磁盘管理器vmware-vdiskmanager.exe。
进入vmware安装目录,例如下图所示
通过调用程序vmware-vdiskmanager.exe,跟上参数,指定需要合并的虚拟磁盘,具体如下图所示
-r <source-disk>:转换指定的磁盘; 需要指定目标磁盘类型。对于本地目标磁盘,必须指定磁盘类型。
当出现下如所示,即合并成功:
B.增加硬盘空间后,并不会自动增加Ubuntu的空间,还需要进入系统进行相应的扩展设置。
相邻的左边的磁盘即可。注意,该种方法,没有办法跨过相邻的区域对其他区域进行分配,如果有该需求,可见上述通过 GParted 软件。
分配方式如下图所示:
3、VMware虚拟机占用空间过大
该点主要是因为虚拟机占用物理内存过大,可以通过一些方式方法进行优化。
(1)整理碎片
在前面扩展磁盘空间部分提到,有一个选项为“碎片整理”,如下图所示,通过该方式,在一定程度上可以更加充分的利用物理磁盘空间。
(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(推荐,直接菜单搜索即可)
2)进入vmware安装目录,例如下图所示
关于vmware-vdiskmanager.exe使用,这里不做详细表述,可参考如下文章:
VMware虚拟磁盘管理器用法帮助 用法:vmware-vdiskmanager.exe_零点零一的博客_vmware磁盘管理
3)通过调用程序vmware-vdiskmanager.exe,跟上参数k,缩小指定的虚拟磁盘,例如下图所示
等待如下图所示,表示虚拟机已经压缩成功。