/ devバインドマウントをアンマウントできません。

/ devバインドマウントをアンマウントできません。

私のライブディスクをパーティションごとに1つのrsync/dev/sdbとして2番目のディスクにコピー(試行)するスクリプトを作成しました。/dev/sdaフルスクリプト)。

最後のステップはにgrubをインストールすることです/dev/sda。私が使用する方法は次のとおりです。

  1. /dev/sda ルートパーティションをマウントします。/mnt/root1
  2. /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
  1. chrootedを実行しupdate-grubgrub-install次を実行します/dev/sda
chroot /mnt/root1 update-grub
chroot /mnt/root1 grub-install /dev/sda
  1. 3つのバンドルのアンインストール:
# umount /mnt/root1/sys
# umount /mnt/root1/proc
# umount /mnt/root1/dev

しかし、/mnt/root1/devumountは失敗します。

# 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

バンドルのインストールがなぜそんなに忙しいのですか?

/devchroot内でマウントを参照するために忙しいバックグラウンドプロセスがまだ実行されている可能性があります。で確認してください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>

関連情報