首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在pivot_root之后恢复

无法在pivot_root之后恢复
EN

Unix & Linux用户
提问于 2016-08-29 12:17:00
回答 2查看 3.8K关注 0票数 5

在板上,我想闪现(NAND)分区,其中我的当前根资源是没有重新启动,并能够检查闪存是否成功。

为此,我试图:

  • 杀死每一个不必要的过程
  • 装入包含另一个rootfs的SD卡(到当前rootfs的挂载点将在SD卡上可用)
  • 在SD卡的rootfs和原始卡之间运行pivot_root
  • 运行chroot以使用SD卡根。
  • 卸载旧根分区
  • 刷新一个新的rootfs
  • 返回rootfs分区的pivot_root

不幸的是,我无法卸载原始根分区。

开始部分主要是在pivot_root手册页面中描述的步骤:

代码语言:javascript
复制
mount /dev/hda1 /new-root
cd /new-root
pivot_root . old_root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root # <== unable to unmount
代码语言:javascript
复制
Killing some processes:

ps

PID用户VSZ命令1根1524 S init 3. 2根0 SW< 卡特鲁德 3根0 SW< ksoftirqd/0 4根0 SW< 看门狗/0 5根0 SW< 事件/0 6根0 SW< khelper 126根0 SW< 克布洛克/0 132根0 SW< 克塞罗 136根0 SW< kmmcd 159根0 SW 二次冲洗 160根0 SW 二次冲洗 161根0 SW< kswapd0 209根0 SW< aio/0 213根0 SW< 西奥德 220根0 SW< 西夫索普 807根0 SW< 卡普姆873根0 SW< 姆特布洛克 919根0 SW< rpciod/0 925根0 SWN jffs2_gcd_mtd3 927根0 SW< 姆卡德 1806根2908 R -bash 2456根2072 R

代码语言:javascript
复制
mount /dev/mmcblk0p0 /mnt/disk
umount /sys
umount /tmp
cat /proc/mounts

rootfs / rootfs rw 0 0 /dev/root / jffs2 rw 0 0 /proc /proc proc rw 0 /dev/mmcblk0p0 /mnt/disk ext2 rw,errors=continue 0 0 0

我想我必须找到卸载/dev/root/rootfs的方法,但是/mnt/disk不会成为一个问题,因为它还在使用中,但是,它是我想要着色的SD卡吗?

代码语言:javascript
复制
umount /proc

cd /mnt/disk
pivot_root . old-root
mount -t proc none /proc
ls -l /proc/1

-rcoredump_filter lrwxrwx1根根0 11月30日:17 cwd -> // -rdr-x-r-1根根0 11 0 1:17 mountinfo r-1根0 11 0 0 1:17 root r-r--r-1根根0 11月30日:17 oom_adj -r-1根0 11月30日1:17 oom_score -r个性特征lrwxrwxrwx 1根根0 11月30 01:17根-> // -rw-r-1根0 11月0 01:17根根0 11月30日01:17根根0 11月30日1根根0 11 0 01:16 stat -r-r-r-1根根0 11月30日:17 statm -r-1根根0 11 0 01:17状态dr-xr-x3根根0 11月30 01:17任务/-r-1根根0 11 0 01:17 wchan

代码语言:javascript
复制
cat /proc/mounts

rootfs / rootfs rw 0 /dev/root /old_root jffs2 rw 0 /dev/mmcblk0p0 / ext2 rw,errors=continue 0 0无/proc proc rw 0 0 0

代码语言:javascript
复制
exec chroot . sh <dev/console >dev/console 2>&1
umount /old_root

umount:不能umount /old_root/:设备或资源繁忙

代码语言:javascript
复制
fuser -m /old_root/
#> 1 # <= issue here

我想知道我是不是忘了什么(也许我的策略被打破了?)

我和chroot / switch_root试过了。我还尝试使用mount --move /proc/sys,而不是使用SD卡rootfs。

内核版本: 2.6.29.4←存在一个rootfs,那么它有可能创建根吗?Busybox版本: 1.16.1

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2016-08-31 13:17:17

实际上,我的问题很容易解决,我只需要重新启动init运行init u

陷阱:

  • 关于旧分区的卸载,我们不关心rootfs,也不关心/dev/root
  • 一旦我着色,我没有挂载一个/proc,因此,fuser -m /old_root没有输出
票数 0
EN

Unix & Linux用户

发布于 2016-08-30 07:20:51

我相信,您仍然是从旧根执行命令umount /old_root,因此它很忙。

我曾经做过一个类似的脚本,下面的脚本对我很有用:

代码语言:javascript
复制
#!/bin/sh

 mount -v -n -t proc  -onodev,noexec,nosuid proc  /proc
 mount -v -n -t sysfs -onodev,noexec,nosuid sysfs /sys

 mount -v -t ext4 /dev/sdb1 /mnt/root                           

 mount --move /dev  /mnt/root/dev/                                  
 mount --move /proc /mnt/root/proc/                                 
 mount --move /sys  /mnt/root/sys/                                  

 echo "Switching root filesystem..."
 cd /mnt/root                                               
 pivot_root . mnt/tmp/                                          

 exec chroot . /sbin/init   

然后,在新根目录中,新init执行的第一个命令是umount /mnt/tmp/

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/306406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档