はじめに
Linuxの / (ルートディレクトリ)はシステムが利用しているためにアンマウントできない、と説明されます。このことを実際のシステムで確認します。
Oracle Linux 6.5 にて確認しました。他のシステムでも同様の手順で確認可能と思われます。
ルートディレクトリのアンマウントを試す
[root@node1 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_node1-lv_root 14225776 6851264 6628836 51% / tmpfs 1021836 228 1021608 1% /dev/shm /dev/sda1 487652 139431 318525 31% /boot [root@node1 ~]# umount / umount /: デバイスがビジーです。 (このデバイスがプロセスによって使われているのであれば、lsof(8)やfuser(1) を使って調査するのが有益かもしれません)
このようにルートディレクトリのアンマウントは失敗します。
ルートディレクトリのアンマウント失敗の理由
umount コマンドの仕様
ファイルシステムが使用中に (このファイルシステム上でプロセスが読み取りを行っている場合や、 カーネルによって使用中の場合など)、 umount コマンドを実行するとエラーを出力して失敗します。 次のように fuser コマンドを使ってファイルシステムにアクセスしているプロセスを確定します。
fuser -m directory17.3. ファイルシステムをアンマウントする
ルートディレクトリにアクセスしているプロセス
[root@node1 ~]# fuser -v / USER PID ACCESS COMMAND /: root 1 .rc.. init root 2 .rc.. kthreadd root 3 .rc.. ksoftirqd/0 (以下略)
PID 1 の init プロセスがルートディレクトリにアクセスしています。
init プロセス
init プロセスは Linux システムにとって必須のプロセスです。
initプログラムは、プロセスIDが1のプロセスです。このプロセスでは、要求された方法でシステムの初期化を行います。initは直接カーネルから起動され、プロセスを強制終了するsignal 9で終了することはできません。他のすべてのプログラムは、initまたはその子プロセスの1つによって直接起動されます。
第8章 Linuxシステムのブートと設定
このプロセスを終了させることはできません。つまり、このプロセスがアクセスしているルートディレクトリはアンマウントできないことがわかります。
おまけ
コラム 「悪魔」ではない「デーモン」
Windowsユーザーに教えるLinuxの常識(10):Linux起動の仕組みを理解しよう[init/inittab編] (1/2) - @IT
デーモンといっても、悪魔(demon)ではなく守護神(daemon)なので、本当は「ダイモン」と発音すべきなのでしょうが、慣例的にデーモンと発音するようです。
init についての解説記事なのですが、「デーモン」の由来を紹介したく、コラムを引用しつつ紹介させていただきました。引用先記事もぜひご参照ください。