私のライブディスクをパーティションごとに1つのrsync/dev/sdb
として2番目のディスクにコピー(試行)するスクリプトを作成しました。/dev/sda
フルスクリプト)。
最後のステップはにgrubをインストールすることです/dev/sda
。私が使用する方法は次のとおりです。
- /dev/sda ルートパーティションをマウントします。
/mnt/root1
- /mnt/root1 にマウント {/dev,/sys/,/proc} バインディング:
# mount -o bind /sys /mnt/root1/sys
# mount -o bind /proc /mnt/root1/proc
# mount -o bind /dev /mnt/root1/dev
- chrootedを実行し
update-grub
、grub-install
次を実行します/dev/sda
。
chroot /mnt/root1 update-grub
chroot /mnt/root1 grub-install /dev/sda
- 3つのバンドルのアンインストール:
# umount /mnt/root1/sys
# umount /mnt/root1/proc
# umount /mnt/root1/dev
しかし、/mnt/root1/dev
umountは失敗します。
# umount /mnt/root1/dev
umount: /mnt/root1/dev: target is busy.
メモ:mount コマンドは以下を提供/dev
します/mnt/root1/dev
。
udev on /dev type devtmpfs (rw,nosuid,relatime,size=8131896k,nr_inodes=2032974,mode=755,inode64)
udev on /mnt/root1/dev type devtmpfs (rw,nosuid,relatime,size=8131896k,nr_inodes=2032974,mode=755,inode64)
私の質問は:バインドインストールがどのようにそんなに忙しいのですか?解決策はありますか?
編集する:/mnt/root1/dev を使用してマウント解除できましたが(マンページを理解すると実際にマウントされたことを隠します)、umount --lazy
私には適していないようです。
関連質問:https://stackoverflow.com/questions/7878707/how-to-unmount-a-busy-device
答え1
さまざまな考慮事項から始めてください。
同様のことを達成するときは、以下をインストールすることをお勧めします。
山--タイププロセス/proc /mnt/root1/proc これは、procが特殊なファイルシステムであり、常に自動的に認識されるかどうかわからないためです。しかし、その目的と特性のために/ procにバインドする必要はありません(そうではありませんか?)。
/sys および /dev の場合は、以下を好みます。
ㅏ:山--rbind/sys /mnt/root1/sys (mount --rbind /dev /mnt/root1/dev)
なぜなら、再帰的にマウントする必要があるからです (/sys と /dev のサブディレクトリも心配する必要があります)
第二:
山--make-rslave/mnt/root1/sys (mount --make-rslave /mnt/root1/dev)
あなたの質問についてはこれが重要です。
一つのためスレーブマウントホストから電波を受信しますが、その逆ではありません。削除してイベントはその方向にのみ伝播されます。
この重要な点を確認したら、次のことができるはずです。umount -R /mnt/root1/dev.
答え2
バンドルのインストールがなぜそんなに忙しいのですか?
/dev
chroot内でマウントを参照するために忙しいバックグラウンドプロセスがまだ実行されている可能性があります。で確認してくださいlsof
。
解決策はありますか?
その参照を保持しているプロセスを終了します/dev
。
私は同じ問題のシナリオに直面しました。 chrootでdnfコマンドを実行するためにライブCDから起動し、ハードドライブからroot fsパーティションをマウントしました。完了すると、chrootを終了してすべてのバインドマウント(/dev /proc /sys /run)をアンマウントしましたが、devバインドマウントはアンマウントを拒否しました。
(root) localhost-live: /media>dmesg | grep devtmpfs
[ 0.592936] devtmpfs: initialized
(root) localhost-live: /media>mount | grep devtmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
devtmpfs on /media/luks_sda4/dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
(root) localhost-live: /media>umount /media/luks_sda4/dev
umount: /media/luks_sda4/dev: target is busy.
(root) localhost-live: /media>umount --force /media/luks_sda4/dev
umount: /media/luks_sda4/dev: target is busy.
(root) localhost-live: /media>fuser /media/luks_sda4/dev
/media/luks_sda4/dev: 25rc
(root) localhost-live: /media>ps aux | sed -n '1p; / 25 /p'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 25 0.0 0.0 0 0 ? S 05:44 0:00 [kdevtmpfs]
root 7984 0.0 0.0 222560 2304 pts/1 S+ 07:58 0:00 sed -n 1p; / 25 /p
(root) localhost-live: /media>
解決策を見つけて見つけたこのブログ投稿lsof
ディレクトリで実行することをお勧めし、問題がどこにあるかについて非常に明確なヒントを提供します。
(root) localhost-live: /media>lsof luks_sda4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh-agent 4007 root cwd DIR 253,2 4096 2 luks_sda4
ssh-agent 4007 root rtd DIR 253,2 4096 2 luks_sda4
(root) localhost-live: /media>
私は持っていますキーホルダーchrootをインストールして起動すると、SSHキーのパスワード(一般)の入力を求められます。明らかにssh-agentインスタンスの一部としてバックグラウンドで起動しますが、chrootを終了しても終了しません。
これらの知識に基づいて、開発バンドルのインストールを削除するのは簡単です。
(root) localhost-live: /media>kill -HUP 4007
(root) localhost-live: /media>lsof luks_sda4
(root) localhost-live: /media>umount /media/luks_sda4/dev
(root) localhost-live: /media>mount | grep devtmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=4096k,nr_inodes=4089246,mode=755,inode64)
(root) localhost-live: /media>