如何在不重启系统的情况下清除基于 BusyBox 的系统上 rm -rf 删除的数据?

How can I clear out data which was removed by rm -rf on a BusyBox based system without having to restart the system?

我正在尝试创建一个 shell 脚本,以便轻松地为基于 busybox 的 Unix 系统执行一些长命令。

系统没有lsof这样的命令,但有其他基本命令。我面临的问题是,当添加新功能时,我需要删除某些文件夹并使用 adb push 将新文件夹推送到系统中。

当我这样做时,我收到一条错误消息,指出设备上没有剩余 space。所以我需要做一个电源循环。

我想知道是否有任何方法可以在执行 rm -rf 后删除数据而无需执行电源循环,即 shutdownrestart .

在基于Linux的系统上,当

时,文件占用的spaces被删除
  1. 该文件未被任何文件夹引用
  2. 文件没有被任何进程打开

'rm' 将满足第一个条件,但是,您必须杀死所有打开文件的进程才能清除 space,否则,它只会在重新启动时发生(电源循环),当 fsck 实用程序将识别 "orphan" 个索引节点时,未被任何文件夹引用。

没有关于哪些进程持有打开句柄的信息。这里有一些通用的替代品:

  • 如果有一个(或几个)进程使大文件保持打开状态,请尝试 stop/restart 这些服务。
  • 而不是 'rm',您可以在打开它们之前截断较大的文件。 'echo > large-file' 将释放所有文件 space。当然,这可能会对 运行 流程产生负面影响,但从问题来看,这似乎不是问题。
  • 理论上,您可以使用'telinit'将busybox从标准模式切换到不同的运行级别。如果服务配置为正确关闭,您可以让系统重新进入 post-reboot,无需重启