我有一个arm7上的嵌入式linux。
我在 MTD 分区 10(例如)上安装了一个 rootfs,即 /dev/mtd10,它是一个闪存设备。该卷是 UBIFS 设备 UBI0 (/dev/ubi0)。
我大致按照此处的说明设置了一个pivot_root(类似于chroot)tmpfs:调整实时根文件系统大小如何。
我想擦除/重新格式化 mtd10 (UBI0) 我遇到的问题是我无法分离/格式化 UBI0,直到我这样做,因为它告诉我它很忙。所以,我使用命令:
fuser -vm /dev/mtd10
这给了我一个可以杀死的进程列表,所以我做了所有这些,然后 umount(或 umount -l)所有安装在 UBI0 上的分区。
所以我的系统不再对 UBI0 有任何依赖...除了我正在运行的 shell 之外。我尝试了很多方法的组合,但似乎唯一有效的方法(一旦我整理好)就是注销(使用exit
命令)然后重新登录(对我来说,我只需输入用户名root
)。
一旦我telinit u
在此时注销/运行,我就会看到 UBI0 消失,我可以将其分离。
更新:Killrc_mxc.S
与注销有类似的效果(即它结束了我的 shell,我必须再次登录。但这也结束了我的脚本:(
这里的问题是我不知道如何编写脚本。在脚本中运行exit
只是结束脚本。
答案1
find /proc/$$ -type l -ls
在保持 FS 打开的 shell 中运行。对于指向该 FS 的每个链接,请采取适当的操作:
- 在
fd
子目录中: runexec n>replacement
,其中n
是文件描述符编号,replacement
是它应该指向的文件,或者&-
关闭该描述符。 - 作为
exe
或在map_files
子目录中: runexec /bin/sh
,替换/bin/sh
为您想要在 tmpfs 根目录中的任何 shell 的路径。 - 作为
cwd
:cd
到其他目录。 - 作为
root
:转到 tmpfs 根目录,然后chroot .
.