読者です 読者をやめる 読者になる 読者になる

ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

Linuxの / (ルートディレクトリ)はなぜアンマウントできないかを確認する

はじめに

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 directory
17.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システムのブートと設定

このプロセスを終了させることはできません。つまり、このプロセスがアクセスしているルートディレクトリはアンマウントできないことがわかります。

おまけ

コラム 「悪魔」ではない「デーモン」
デーモンといっても、悪魔(demon)ではなく守護神(daemon)なので、本当は「ダイモン」と発音すべきなのでしょうが、慣例的にデーモンと発音するようです。

Windowsユーザーに教えるLinuxの常識(10):Linux起動の仕組みを理解しよう[init/inittab編] (1/2) - @IT

init についての解説記事なのですが、「デーモン」の由来を紹介したく、コラムを引用しつつ紹介させていただきました。引用先記事もぜひご参照ください。