Debian wheezy の /etc/mtab について

先日の記事 で OpenVZ をインストールしてみて気づいた Debian wheezy のちょっと微妙な点と、その対処について。

Debian wheezy で OpenVZ コンテナを起動中にホストシステム (CT0) で df すると、こんなふうにコンテナ内 (/srv/vz/root) でマウントされた擬似ファイルシステムが全部見えてしまいます。

root@kvz02:~# df
Filesystem                                             1K-blocks     Used Available Use% Mounted on
udev                                                       10240        0     10240   0% /dev
tmpfs                                                     404464      236    404228   1% /run
/dev/disk/by-uuid/d3421798-a5e2-4481-802a-53a701368629   7688360  1098568   6199240  16% /
tmpfs                                                       5120        0      5120   0% /run/lock
tmpfs                                                     913760        0    913760   0% /run/shm
/dev/mapper/vg-vz                                       56766780 10613708  43269488  20% /srv/vz
/srv/vz/private/1101                                     2097152   639776   1457376  31% /srv/vz/root/1101
none                                                      131072        4    131068   1% /srv/vz/root/1101/dev
none                                                      131072        0    131072   0% /srv/vz/root/1101/dev/shm

root ならまだいいのですが、一般ユーザでやるとさらに鬱陶しいことに。

yaegashi@kvz02:~$ df
df: `/srv/vz/root/1101': Permission denied
df: `/srv/vz/root/1101/proc/sys/fs/binfmt_misc': Permission denied
df: `/srv/vz/root/1101/sys': Permission denied
df: `/srv/vz/root/1101/dev': Permission denied
df: `/srv/vz/root/1101/dev/pts': Permission denied
df: `/srv/vz/root/1101/dev/shm': Permission denied
Filesystem                                             1K-blocks     Used Available Use% Mounted on
udev                                                       10240        0     10240   0% /dev
tmpfs                                                     404464      236    404228   1% /run
/dev/disk/by-uuid/d3421798-a5e2-4481-802a-53a701368629   7688360  1101836   6195972  16% /
tmpfs                                                       5120        0      5120   0% /run/lock
tmpfs                                                     913760        0    913760   0% /run/shm
/dev/mapper/vg-vz                                       56766780 10613612  43269584  20% /srv/vz

なんでこうなるのかですが、どうも wheezy では /etc/mtab が一般ファイルではなく /proc/mounts への symlink になってしまったからのようです。そういえば wheezy にしてから / のデバイスが /dev/disk/by-uuid/.... とかすごい長くなって微妙だなあと思ってましたが、それもこれが原因か。

とりあえず symlink やめてみようと思い /etc/mtab を消してリブートするなどしてみたが直らず、いろいろ探っていたら /etc/init.d/checkroot.sh/lib/init/mount-functions.shmtab_migrate() を呼び出して 強制的に /etc/mtab を symlink にしてしまっていることがわかりました (というか リリースノート にも言及がありました)。

この処置はハードコードされているので、回避するには当該ファイルを直接編集するしかありません。 /etc/init.d/checkroot.sh を次のようにいじった上で、

diff --git a/init.d/checkroot.sh b/init.d/checkroot.sh
index fc261f3..0cc4d68 100755
--- a/init.d/checkroot.sh
+++ b/init.d/checkroot.sh
@@ -285,7 +285,7 @@ but requested that the system be restarted."
        # /proc/mounts.  Note that not all systems e.g. Hurd currently
        # support this.
        if [ "$rootmode" != "ro" ]; then
-               mtab_migrate
+               : mtab_migrate
        fi
 
        #

/etc/mtab を消してリブートしたところ、次のように余計なマウントポイントは出てこなくなりました。 / のデバイス名も短くなってすっきりしました。

root@kvz02:~# df
Filesystem        1K-blocks     Used Available Use% Mounted on
/dev/vda1           7688360  1101860   6195948  16% /
tmpfs                404464      236    404228   1% /run
tmpfs                  5120        0      5120   0% /run/lock
udev                  10240        0     10240   0% /dev
tmpfs                913760        0    913760   0% /run/shm
/dev/mapper/vg-vz  56766780 10613608  43269588  20% /srv/vz

/etc/init.d/checkroot.sh を直接編集しないといけないのが腹立たしいですが仕方ありません。これくらいブートパラメータや /etc/default/ とかで選べるようにしておけばいいのにと思います。

ちなみに の LXC では mount namespace をきちんと設定しているためか /proc/mounts にはコンテナ内のマウントポイントは現れず、このような問題は起きません。 OpenVZ もこのようにできないものでしょうか。

ついでに他のディストリビューションでの /etc/mtab の扱いを調べてみたところこんな感じでした。

Distribution /etc/mtab
Debian squeeze regular file
Debian wheezy symlink to /proc/mounts
Ubuntu raring regular file
Ubuntu saucy regular file
CentOS 6.4 regular file
Fedora 19 symlink to /proc/self/mounts

Ubuntu は /etc/mtab は通常ファイルのままでいくつもりのようです。

Fedora 19 が /proc/self/mounts に symlink してるのはこれも mount namespace 対応のためでしょうか。ちょっとよく調べてみなくては。

2013/10/28 23:50:00 JST