マザーボードから再起動せずに、現在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