0

マウント、pid、ユーザー名前空間などを含む新しい名前空間で複製されたコンテナーを実装しています。子が行う最初のステップは、システム コールなどのいくつかの重要なポイントをマウント/procすること/sysです/tmpmount

if(::mount("proc", "/proc", "proc", 0, NULL)==-1) {
  printf("Failed on mount: %s\n", strerror(errno));
  return -1;
}

if(::mount("sysfs", "/sys", "sysfs", 0, NULL)==-1) {
  printf("Failed on mount: %s\n", strerror(errno));
  return -1;
}

if(::mount("tmp", "/tmp", "tmpfs", 0, NULL)==-1) {
  printf("Failed on mount: %s\n", strerror(errno));
  return -1;
}

sourceただし、 に渡される引数リストのフィールドに少し混乱していますmount

int mount(const char *source, const char *target,
          const char *filesystemtype, unsigned long mountflags,
          const void *data);

ソースは正確には何を意味しますか?たとえば、マウント/tmpはソースの文字列とは何の関係もないようです。/tmpを使用しても、新しい名前空間の下に作成された新しいフォルダーが表示されます::mount(nullptr, "/tmp", "tmpfs", 0, NULL)。何か不足していますか?

4

2 に答える 2

0

Aif の回答に少し追加するには:マウントのマンページによると:

mount() source で指定されたファイルシステム (多くの場合、デバイスを参照するパス名ですが、ディレクトリやファイルのパス名、またはダミー文字列の場合もあります) を、パス名で指定された場所 (ディレクトリまたはファイル) にアタッチします。ターゲットで。

の場合はtmpfs、ほとんどダミー文字列です。一時ファイル システムを作成しているだけです。tmpfs揮発性メモリに保存され、一時的なものであり、実際にはソースを持っていません。

他のファイルシステムタイプの場合、sourceそのディレクトリにマウントするファイルシステムを指定することが非常に重要になり/dev/sda1ます。

于 2016-12-14T22:14:04.600 に答える
0

/etc/fstabファイルで提供されているような引数と一致するだけです。たとえば、私の fstab には次のものがあります。

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
...
proc            /proc   proc    defaults                0       0
sysfs           /sys    sysfs   defaults                0       0

しかし、これらの例は、その性質上、少し異なります。実際、proc も sysfs も一般的なファイルシステムではありません。したがって、たとえば、ハード ドライブをマウントした場合、ソースはより単純になり/dev/sda1ます。

umountまた、名前空間の上に分離を実装しているため、コンテナーが/procインスタンスを呼び出す場合は注意してください。ホストのプロセスが明らかになるため、分離が解除される可能性があります。

于 2016-12-14T22:07:57.360 に答える