记Linux下Cli3执行npm run serve报错no space left on device解决经历

  本文笔者记录解决经历,想直接看解决方案的看官直接拉到底部即可。

# 背景介绍

 笔者于【2019-06-05】如往日一样打开vue cli3项目准备启动项目时,执行npm run serve报错如下

8646214-ca10d78d7984b58f.png
no space left on device 错误信息

# 解决过程

1. 是否内存溢出了?

  笔者首先想到的是不是项目执行内存溢出了,但感觉内存溢出应该不是这个错误,管他呢,试试先。于是笔者对package.json文件中的执行脚本进行了修改,如下:

8646214-99c95e398e7d7494.png
扩大脚本运行时所需要的内存空间

增加了命令vue-cli-service --max_old_space_size=4096 serve
执行了一下没效果,意料之中。其实这个是修复以下问题时的办法

8646214-102ee2c7ab61fc61.png
内存溢出报错信息

2. 磁盘空间不足?

  观察一下错误信息,no space left on device指的是磁盘空间不足,cd到相应目录下,检查一下目录大小

du -sh
8646214-c35e21f31af81121.png
workspace文件夹占用空间

这才占用3.2G,明显不是空间满了的问题

3. inode无法分配?

  既然空间足够,又提示空间不足,是因为碎小文件过多吗?检查一下inode情况

df -i 

8646214-02b9e040d93d6647.png

  笔者的系统里出现了大量的 100% Use模块,均是 snap/文件占用的 /dev/loop设备挂载点

4. 什么是/dev/loop ?

/dev/loop是Linux的循环设备,又称vnd(vnode disk)lofi(循环文件接口),是一种伪设备,它使得文件可以如同块设备一般被访问。

  笔者查了一下,linux中有三种设备类型

  • 块设备: 系统间用快的方式移动数据的设备。如硬盘,CD-ROM和内存
  • 字符设备: 每次与系统传输1个字符的流通讯设备。如传真,虚拟终端和串口调制解调器。一般不支持随机存取数据
  • 伪设备:
    • /dev/loop: 循环设备
    • /dev/random: 产生虚假随机的任意长度字元串流
    • ...

# 解决办法

  问题定位。虽内存足够,因为碎小文件太多循环设备被大量创建,/分区下的inode号被大量占用,无法继续分配空间。清理掉这些文件,运行命令:

sudo apt autoremove --purge snapd

  再试一下npm run serve,问题解决。

转载于:https://www.jianshu.com/p/2b18b4ea6dd6

猜你喜欢

转载自blog.csdn.net/weixin_33697898/article/details/91322625
今日推荐