LXC'nin gerçekte ne yaptığını görmek için, yeni bir kap oluşturalım ve başlangıç işlemini aşağıdaki yollarla izleyelim 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
Sonuçta ortaya çıkan izleme lxclog dosyasına yazılmıştır ve işte en alakalı kısımlarıdır (önemli olmayan bazı çağrıların alınmadığı elipsler benim tarafımdan eklenir):
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
İlk önce yeni bir işlem (PID 14677) kullanılarak lxc-start
(PID 14671) üretilir clone(2)
ve yeni mount ad alanına ( CLONE_NEWNS
bayrak) yerleştirilir. Daha sonra bu yeni mount ad alanının içinde kabın ( / var / lib / lxc / testcontainer / rootfs ) kök dosya sistemi bağlanır ( MS_BIND
bayrak) / usr / lib64 / lxc / rootfs'a bağlanır , bu da yeni kök olur. Son olarak, kabın başlatılması tamamlandığında, işlem 14677 kabın haline gelir init
.
Buradaki önemli şey, kabinin kurucu ad alanının kök dizininin , sunucunun kök FS'sine ait dizinin bağlanma dizini olmasıdır . Bu yüzden kabın kök montajı hala çıkışta bir kaynak olarak / dev / sda1'e sahiptir mount(8)
. Bununla birlikte, gösterilmeyen bir fark da vardır mount(8)
- görmek findmnt(8)
için kabın içinde deneyin :
root@testcontainer:~# findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda1[/var/lib/lxc/testcontainer/rootfs]
Çıkış için bu karşılaştırın findmnt(8)
ana bilgisayar sisteminden:
[root@localhost /]# findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda1
Not kaynak aynıdır, ancak kabın içine ayrıca bağlama kaynak dizin monte bkz.