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.sh の mtab_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