LXCはルートマウントポイントをどのように設定しますか?

LXCはルートマウントポイントをどのように設定しますか?

Ubuntuで名前空間をマウントしようとしています。これまでは、次のように空のインストール名前空間を作成できます。

# mkdir test
# unshare --mount
# mount none test -t tmpfs
# cd test
# pivot_root . . 
# cd / <--- test becomes /

LXCUbuntuコンテナを確認すると、mountコマンドに次のように表示されます。

ここに画像の説明を入力してください。

マウントネームスペースは最初にマウントポイントのコピーを取得するため、/dev/sda1コンテナの内部はグローバルであると仮定します(/dev/sda1コンテナの起動後に内部がないため)、コンテナの内部にあるものはルートファイルシステムに対応します。 LXCに精通している人がコンテナに入る前にLXCが実行するインストール作業を説明できますか?/dev/sda1/pivot_root

答え1

LXCが実際に何をしているのかを見るために、新しいコンテナを作成して次のように起動プロセスを追跡しましょうstrace(1)

[root@localhost /]# lxc-create -n testcontainer -t debian
[root@localhost /]# strace -e trace=clone,chdir,mount,pivot_root,execve \
                           -f -o lxclog \
                           lxc-start -n testcontainer

結果トレースが記録されます。ルックログファイル内の最も関連性の高い部分は次のとおりです(重要でないいくつかの呼び出しを省略して楕円を追加しました)。

14671 clone(child_stack=0x7fff9379eb80, flags=CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWPID|CLONE_NEWNET|SIGCHLD) = 14677
<...>
14677 mount("/var/lib/lxc/testcontainer/rootfs", "/usr/lib64/lxc/rootfs", 0x7fe4c2d10eac, MS_BIND|MS_REC, NULL) = 0
<...>
14677 chdir("/usr/lib64/lxc/rootfs")    = 0
14677 pivot_root(".", "/usr/lib64/lxc/rootfs/lxc_putold") = 0
14677 chdir("/")
<...>
14677 execve("/sbin/init", ["/sbin/init"], [/* 1 var */]) = 0

lxc-startまず、(PID 14671)(PID 14677)を使用して新しいプロセスを作成し、clone(2)それを新しいインストール名前空間(CLONE_NEWNSフラグ)に配置します。次に、この新しいマウントネームスペース内のコンテナのルートファイルシステム(/var/lib/lxc/testcontainer/rootfs)はインストール(MS_BINDフラグ)にバインドされています。/usr/lib64/lxc/rootfs、新しいルートになります。最後に、コンテナの初期化が完了すると、プロセス14677はコンテナのinit

ここで重要なのは、コンテナのマウントネームスペースのルートディレクトリがそのディレクトリのバインドマウントであることです。ホストに属するルートFS。そのため、コンテナのルートマウントは依然として/dev/sda1出力のソースとしてmount(8)。ただし、表示されていない違いがありますmount(8)。これを確認するには、findmnt(8)コンテナ内で次のことを試してください。

root@testcontainer:~# findmnt
TARGET                                SOURCE                     FSTYPE    OPTIONS
/                                     /dev/sda1[/var/lib/lxc/testcontainer/rootfs]

findmnt(8)これをホストシステムの出力と比較します。

[root@localhost /]# findmnt
TARGET                                SOURCE                    FSTYPE     OPTIONS
/                                     /dev/sda1

ご注意ください、源泉同じですが、コンテナ内にはバインドマウントされたソースディレクトリも表示できます。

関連情報