LXC 시작/중지 중단 및 파일 시스템 동기화 중단

LXC 시작/중지 중단 및 파일 시스템 동기화 중단

편집: 문제는 내 umask가 기본값인 022가 아닌 027로 설정되어 있다는 것입니다. 자세한 내용은 아래를 참조하세요.

LXC와 관련하여 발생 후 시스템 전반에 걸쳐 나타나는 어리둥절한 문제를 경험하고 있습니다.

LXC 컨테이너를 시작/중지할 때 때때로 시작 또는 중지가 무기한 중단되는 경우가 있습니다. 시작 시 이런 일이 발생하면 컨테이너의 init프로세스가 실행 중이지만 kill -9. 컨테이너는 온라인 상태가 되지 않으며 프로세스를 종료하는 유일한 방법은 시스템을 재부팅하는 것입니다.

문제는 시스템이 더 이상 재부팅되지 않는다는 것입니다. 이 문제와 동시에 를 실행할 때 문제가 발견되었는데 update-initramfs, 이 문제도 무기한 중단됩니다. 이것을 찾은 후: https://unix.stackexchange.com/questions/428001/update-initramfs-hangs-on-debian-stretchsync나는 실제로 명령(유틸리티와 시스템 호출 모두)이 중단되어 LXC가 작동하지 않고 update-initramfs중단되고 시스템 종료가 중단된다는 결론을 내렸습니다 ( sync파일 시스템을 마운트 해제하기 전에 수행해야 함). 문제가 발생하면 sync명령줄에서 (유틸리티)를 호출하면 지속적으로 무기한 중단됩니다. 실행을 시도했지만 strace커널 호출에 들어갈 때 추적이 종료되어 더 이상 디버깅할 수 없습니다. 나는 다음을 사용하여 캐시를 모니터링했습니다.이것하지만 <100kB 범위에 머물고 있습니다.

파일 시스템과 관련된 것을 고려하면 syncLXC가 일부 파일 시스템을 처리하는 방식에 문제가 있을 것으로 예상됩니다. LXC를 사용하지 않는 또 다른 동일한 서버가 있는데 출력을 비교한 후 mount해당 서버에 없는 파일 시스템을 마운트 해제했지만 소용이 없었습니다. sync계속 걸려있습니다.

이제 LXC를 건드리지 않고 클린 부팅으로sync 언제나작동하고 계속 작동합니다. 이러한 이유와 다른 문제가 발생하지 않는다는 사실로 인해 실제 I/O 문제는 없다고 확신합니다. 또한 컨테이너가 성공적으로 시작되면 아무런 문제가 없는 것 같습니다.

나는 이 문제에 관해 인터넷을 광범위하게 샅샅이 뒤졌지만 성공하지 못했습니다.

커널 4.19.0-0.bpo.4-amd64가 포함된 Debian 9(안정)의 LXC 2.0.7-2+deb9u2(다른 최근 커널에서도 발생했지만), raid1의 경우 SSD 2개, /raid5의 경우 HDD 3개( mdadm)의 경우 /home. 게스트는 권한이 없는 컨테이너로 실행되는 Debian 9(stretch) 또는 10(buster)입니다.범위를 다음으로 좁힌 것 같습니다. 권한 있는 컨테이너에서는 문제가 발생하지 않았습니다.

게스트 컨테이너 구성 예시:

# Template used to create this container: /usr/share/lxc/templates/lxc-download

# Distribution configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.include = /usr/share/lxc/config/debian.userns.conf
lxc.arch = linux64

# Container specific configuration
lxc.id_map = u 0 200000 100000
lxc.id_map = g 0 200000 100000

# Network configuration
#lxc.network.type = empty
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:e9:4a:e7
lxc.rootfs = /var/lib/lxc/somename/rootfs
lxc.rootfs.backend = dir
lxc.utsname = somename

# Mounts
lxc.mount.entry = /var/lib/lxc/temp mnt/temp none bind 0 0

및 subuid/gid 매핑:

# cat /etc/s*id
root:100000:1000000000
root:100000:1000000000

컨테이너 생성, 시작 및 중지 실패 예시:

# lxc-create -n test -t download
...
Distribution: debian
Release: stretch
Architecture: amd64

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created a Debian stretch amd64 (20190522_05:24) container.

# lxc-ls -f
NAME          STATE   AUTOSTART GROUPS IPV4 IPV6 
test          STOPPED 0         -      -    -    

# lxc-start -n test

# lxc-ls -f
NAME          STATE   AUTOSTART GROUPS IPV4 IPV6 
test          RUNNING 0         -      -    -    

# lxc-attach -n test
root@test:/# ls -alh /
total 68K
drwxr-xr-x  21 root   root    4.0K May 22 05:26 .
drwxr-xr-x  21 root   root    4.0K May 22 05:26 ..
drwxr-xr-x   2 root   root    4.0K May 22 05:26 bin
drwxr-xr-x   2 root   root    4.0K Mar 28 09:12 boot
drwxr-xr-x   4 root   root     400 May 22 09:26 dev
drwxr-xr-x  42 root   root    4.0K May 22 09:24 etc
drwxr-xr-x   2 root   root    4.0K Mar 28 09:12 home
drwxr-xr-x   9 root   root    4.0K May 22 05:25 lib
drwxr-xr-x   2 root   root    4.0K May 22 05:25 lib64
drwxr-xr-x   2 root   root    4.0K May 22 05:25 media
drwxr-xr-x   2 root   root    4.0K May 22 05:25 mnt
drwxr-xr-x   2 root   root    4.0K May 22 05:25 opt
dr-xr-xr-x 225 nobody nogroup    0 May 22 09:26 proc
drwx------   2 root   root    4.0K May 22 05:25 root
drwxr-xr-x   3 root   root      60 May 22 09:26 run
drwxr-xr-x   2 root   root    4.0K May 22 05:26 sbin
drwxr-xr-x   2 root   root    4.0K May 22 05:25 srv
dr-xr-xr-x  13 nobody nogroup    0 May 19 17:07 sys
drwxrwxrwt   2 root   root    4.0K May 22 05:25 tmp
drwxr-xr-x  10 root   root    4.0K May 22 05:25 usr
drwxr-xr-x  11 root   root    4.0K May 22 05:25 var
root@test:/# exit

# lxc-ls -f
NAME          STATE   AUTOSTART GROUPS IPV4 IPV6 
debian_buster STOPPED 0         -      -    -    
rtorrent      STOPPED 0         -      -    -    
test          RUNNING 0         -      -    -    

# lxc-stop -n test
^C

# lxc-stop -n test
... continues to hang ...
# ^C
# sync
^C^C^Z^X^C^Z^X^C^Z^C^Z^X^C
... won't die.

답변1

알고 보니 문제는 기본 umask보다 덜 허용적인 umask였습니다. 데비안의 기본값은 022인데 .bashrc보안상의 이유로 사용자 계정을 027로 변경했습니다 . su루트가 되기 위해 사용하면 모든 lxc-*명령이 umask 027로 실행되도록 이 umask가 복사됩니다. 그러나 이로 인해 LXC에 알려진 문제가 발생하며 어떤 이유로 아직 해결되지 않았습니다(적어도 Debian 패키지에서는? ).

umask를 변경(세션 중 또는 수정하여 .bashrc)하면 이미 가지고 있던 컨테이너를 정상적으로 실행할 수 있습니다.

자원:

https://discuss.linuxcontainers.org/t/cannot-stop-unprivileged-container-not-even-kill-9-its-systemd-process-on-host/1079

https://github.com/lxc/lxc/issues/2277(이것이 동일한 문제인지 확실하지 않음)

https://github.com/lxc/lxc/issues/1403

https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1642767

관련 정보