linux 系统rm 删除文件后,磁盘空间不释放

时间:2022-04-23 16:11:55
嵌入式linux,用的yaffs文件系统;想升级设备用新的库文件替换掉以前旧的库文件:本来想直接覆盖,提示空间不足,得知cp覆盖是在新的空间放置新文件,然后才将节点修改掉;用rm -rf删除掉那些旧的库文件后,发现磁盘空间没怎么释放,要替换这些文件提示没空间;后来网上查询才知道是被删除的文件正在被进程使用,所以linux系统认为文件还存在,不对其空间进行释放,需要杀掉进程才可以。

但是我这个进程却是不能杀的,影响太大;不知道有没有大神知道有什么其他方法没有啊?可以在不杀进程的情况下,释放掉磁盘空间;或者不用rm删除也行,只要能够让我的新库文件替换掉原来的这些旧库文件~~

拜谢各位了!!

11 个解决方案

#1


引用
或者不用rm删除也行,只要能够让我的新库文件替换掉原来的这些旧库文件

试试用这个命令清空文件内容:
>/tmp/test.txt

#2


使用 sync,将缓存数据保存磁盘试试;删除的文件太小,系统感知不到,多删除一些大文件看看。

#3


引用 1 楼 ljc007 的回复:
引用
或者不用rm删除也行,只要能够让我的新库文件替换掉原来的这些旧库文件

试试用这个命令清空文件内容:
>/tmp/test.txt


恩,我试着用>清空了下库文件,但是设备马上重启了。。。。

#4


引用 2 楼 magi1201 的回复:
使用 sync,将缓存数据保存磁盘试试;删除的文件太小,系统感知不到,多删除一些大文件看看。


额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?

#5


引用 4 楼 appledurian 的回复:
额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?
 删除的文件一般不会立即写入磁盘,也就是文件空间不会立即释放,sync 把缓存文件写入磁盘,可以让删除的文件释放空间。不过如果删除的文件比较小的话,对于系统是不可感知的,可以删除一些大些的文件,上G的文件试试。

#6


引用 5 楼 magi1201 的回复:
Quote: 引用 4 楼 appledurian 的回复:

额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?
 删除的文件一般不会立即写入磁盘,也就是文件空间不会立即释放,sync 把缓存文件写入磁盘,可以让删除的文件释放空间。不过如果删除的文件比较小的话,对于系统是不可感知的,可以删除一些大些的文件,上G的文件试试。


没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~

#7


引用 6 楼 appledurian 的回复:
没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~
NAND,没接触过。如果单在Linux上面删除100多兆文件就想让系统感知,这个比较难。

#8


引用 7 楼 magi1201 的回复:
Quote: 引用 6 楼 appledurian 的回复:

没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~
NAND,没接触过。如果单在Linux上面删除100多兆文件就想让系统感知,这个比较难。


哦哦,我这个是个嵌入式linux系统,所以用的NAND,空间也比较小,还是谢谢哈~

#9


使用 
lsof folder | grep -i delete

最后一列可以看到很多deleted的进程
杀掉这些进程即可释放空间

#10


引用 9 楼 bblxl2008 的回复:
使用 
lsof folder | grep -i delete

最后一列可以看到很多deleted的进程
杀掉这些进程即可释放空间


恩,我知道,但是杀掉进程风险有点大,不知道有没有其他不杀进程可以释放空间的操作呢~~

#11


建一个新的ramdisk,把之前的拷贝过去,把不需要的删除,这样行不行

#1


引用
或者不用rm删除也行,只要能够让我的新库文件替换掉原来的这些旧库文件

试试用这个命令清空文件内容:
>/tmp/test.txt

#2


使用 sync,将缓存数据保存磁盘试试;删除的文件太小,系统感知不到,多删除一些大文件看看。

#3


引用 1 楼 ljc007 的回复:
引用
或者不用rm删除也行,只要能够让我的新库文件替换掉原来的这些旧库文件

试试用这个命令清空文件内容:
>/tmp/test.txt


恩,我试着用>清空了下库文件,但是设备马上重启了。。。。

#4


引用 2 楼 magi1201 的回复:
使用 sync,将缓存数据保存磁盘试试;删除的文件太小,系统感知不到,多删除一些大文件看看。


额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?

#5


引用 4 楼 appledurian 的回复:
额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?
 删除的文件一般不会立即写入磁盘,也就是文件空间不会立即释放,sync 把缓存文件写入磁盘,可以让删除的文件释放空间。不过如果删除的文件比较小的话,对于系统是不可感知的,可以删除一些大些的文件,上G的文件试试。

#6


引用 5 楼 magi1201 的回复:
Quote: 引用 4 楼 appledurian 的回复:

额,我要删除的文件就是指定的那些 ,其他的是不能动的;这个sync命令是做什么用的呢?他可以让进程释放掉已经被删除的so库文件么?
 删除的文件一般不会立即写入磁盘,也就是文件空间不会立即释放,sync 把缓存文件写入磁盘,可以让删除的文件释放空间。不过如果删除的文件比较小的话,对于系统是不可感知的,可以删除一些大些的文件,上G的文件试试。


没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~

#7


引用 6 楼 appledurian 的回复:
没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~
NAND,没接触过。如果单在Linux上面删除100多兆文件就想让系统感知,这个比较难。

#8


引用 7 楼 magi1201 的回复:
Quote: 引用 6 楼 appledurian 的回复:

没那么大,我的NAND一共就只有128M的容量,现在就是因为容量有点小,想通过rm删除释放出一些空间,来进行拷贝工作,但是发现rm有进程调用的库文件时,并不进行空间释放。。。所以不知道怎么搞才好~~
NAND,没接触过。如果单在Linux上面删除100多兆文件就想让系统感知,这个比较难。


哦哦,我这个是个嵌入式linux系统,所以用的NAND,空间也比较小,还是谢谢哈~

#9


使用 
lsof folder | grep -i delete

最后一列可以看到很多deleted的进程
杀掉这些进程即可释放空间

#10


引用 9 楼 bblxl2008 的回复:
使用 
lsof folder | grep -i delete

最后一列可以看到很多deleted的进程
杀掉这些进程即可释放空间


恩,我知道,但是杀掉进程风险有点大,不知道有没有其他不杀进程可以释放空间的操作呢~~

#11


建一个新的ramdisk,把之前的拷贝过去,把不需要的删除,这样行不行