ivot_root 이후에는 제거할 수 없습니다.

ivot_root 이후에는 제거할 수 없습니다.

마더보드에서 재부팅하지 않고 현재 rootfs가 있는 (NAND) 파티션을 새로 고치고 새로 고침이 성공했는지 확인할 수 있기를 원합니다.

이를 위해 나는 다음을 시도합니다.

  • 불필요한 프로세스 모두 종료
  • 다른 rootfs가 포함된 SD 카드를 마운트합니다. (현재 rootfs의 마운트 지점은 SD 카드에서 사용할 수 있습니다.)
  • SD 카드의 rootfs와 원래 rootfs 사이에서 Pivot_root를 실행합니다.
  • chroot를 실행하여 SD 카드를 루팅합니다.
  • 이전 루트 파티션 마운트 해제
  • 새 rootfs 새로 고침
  • ivot_root는 rootfs 파티션으로 돌아갑니다.

불행하게도 원래 루트 파티션을 마운트 해제할 수 없습니다.

먼저 기본적으로 Pivot_root 매뉴얼 페이지에 설명된 단계를 따릅니다.

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

Killing some processes:

ps
  PID USER       VSZ STAT COMMAND
        1 root      1524 S    init [3]
        2 root         0 SW<  [kthreadd]
        3 root         0 SW<  [ksoftirqd/0]
        4 root         0 SW<  [watchdog/0]
        5 root         0 SW<  [events/0]
        6 root         0 SW<  [khelper]
      126 root         0 SW<  [kblockd/0]
      132 root         0 SW<  [kseriod]
      136 root         0 SW<  [kmmcd]
      159 root         0 SW   [pdflush]
      160 root         0 SW   [pdflush]
      161 root         0 SW<  [kswapd0]
      209 root         0 SW<  [aio/0]
      213 root         0 SW<  [nfsiod]
      220 root         0 SW<  [cifsoplockd]
      807 root         0 SW<  [kapmd]
      873 root         0 SW<  [mtdblockd]
      919 root         0 SW<  [rpciod/0]
      925 root         0 SWN  [jffs2_gcd_mtd3]
      927 root         0 SW<  [mmcqd]
     1806 root      2908 R    -bash
     2456 root      2072 R    ps
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 0
 /dev/mmcblk0p0 /mnt/disk ext2 rw,errors=continue 0 0

을(를) 제거하는 방법을 찾아야 할 것 같습니다. /dev/root아니면 아직 사용 중이므로 문제가 되지 않을 /수도 있지만 루트하려는 SD 카드인가요?rootfs/mnt/disk

umount /proc

cd /mnt/disk
pivot_root . old-root
mount -t proc none /proc
ls -l /proc/1
-r--------    1 root     root             0 Nov 30 01:17 auxv
--w-------    1 root     root             0 Nov 30 01:17 clear_refs
-r--r--r--    1 root     root             0 Nov 30 01:16 cmdline
-rw-r--r--    1 root     root             0 Nov 30 01:17 coredump_filter
lrwxrwxrwx    1 root     root             0 Nov 30 01:17 cwd -> //
-r--------    1 root     root             0 Nov 30 01:17 environ
lrwxrwxrwx    1 root     root             0 Nov 30 01:16 exe -> /old_root  /sbin/init*
dr-x------    2 root     root             0 Nov 30 01:17 fd/
dr-x------    2 root     root             0 Nov 30 01:17 fdinfo/
-r--------    1 root     root             0 Nov 30 01:17 limits
-r--r--r--    1 root     root             0 Nov 30 01:17 maps
-rw-------    1 root     root             0 Nov 30 01:17 mem
-r--r--r--    1 root     root             0 Nov 30 01:17 mountinfo
-r--r--r--    1 root     root             0 Nov 30 01:17 mounts
-r--------    1 root     root             0 Nov 30 01:17 mountstats
dr-xr-xr-x    5 root     root             0 Nov 30 01:17 net/
-rw-r--r--    1 root     root             0 Nov 30 01:17 oom_adj
-r--r--r--    1 root     root             0 Nov 30 01:17 oom_score
-r--------    1 root     root             0 Nov 30 01:17 pagemap
-r--------    1 root     root             0 Nov 30 01:17 personality
lrwxrwxrwx    1 root     root             0 Nov 30 01:17 root -> //
-rw-r--r--    1 root     root             0 Nov 30 01:17 sched
-r--r--r--    1 root     root             0 Nov 30 01:17 smaps
-r--r--r--    1 root     root             0 Nov 30 01:16 stat
-r--r--r--    1 root     root             0 Nov 30 01:17 statm
-r--r--r--    1 root     root             0 Nov 30 01:17 status
dr-xr-xr-x    3 root     root             0 Nov 30 01:17 task/
-r--r--r--    1 root     root             0 Nov 30 01:17 wchan
cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root /old_root jffs2 rw 0 0
/dev/mmcblk0p0 / ext2 rw,errors=continue 0 0
none /proc proc rw 0 0
exec chroot . sh <dev/console >dev/console 2>&1
umount /old_root
umount: can't umount /old_root/: Device or resource busy
fuser -m /old_root/
#> 1 # <= issue here

제가 뭔가 잊어버린 건 아닌지 궁금합니다. (아마 제 전략이 깨졌던 걸까요?)

나는 chroot / switch_root또한 SD 카드 rootfs를 mount --move /proc대신 사용해 보았습니다 /sys.

커널 버전: 2.6.29.4 ← rootfs가 존재하는데 루트 언마운트가 가능한가요? 비지박스 버전: 1.16.1

답변1

나는 당신이 여전히 이전 루트에서 명령을 실행하고 있기 umount /old_root때문에 바쁘다고 믿습니다.

나는 한때 비슷한 스크립트를 만들었고 다음이 나에게 효과적이었습니다.

#!/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

실제로 내 문제는 해결하기 쉽습니다. init 실행을 다시 시작하면 됩니다.init u

덫:

  • rootfs이전 파티션 제거와 관련하여 우리는 상관하지 않습니다./dev/root

  • 루트를 변경한 후에는 가 설치되어 있지 않아 출력이 없습니다 /proc.fuser -m /old_root

관련 정보