[Devel] [PATCH libvzctl 3/3] scripts: Tune up ploop links on post-setup-namespaces stage
Andrei Vagin
avagin at gmail.com
Tue Oct 24 01:35:34 MSK 2017
On Thu, Oct 12, 2017 at 10:21:31AM +0300, Cyrill Gorcunov wrote:
> From: Cyrill Gorcunov <gorcunov at openvz.org>
>
> The restore of ploop device is a bit tricky: its major/minor
> is not a constant but allocated dynamicaly by the kernel
> driver. Thus we may have a situation when /dev/ploopXX
> points for some obsolete name which we have to resolve
> into valid device.
>
> For this sake we save old name in dev/$uuid form and
> when mount namespaces are restored but their roots
> are not moved we should walk over every root point
> and figure out if there ploop device to be adjusted.
>
> This patch requires CRIU to export "CRIU_MNT_NS_ROOTS".
>
> https://jira.sw.ru/browse/PSBM-71861
>
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
> scripts/vz-rst-action.in | 67 ++++++++++++++++++++++++++----------------------
> 1 file changed, 37 insertions(+), 30 deletions(-)
>
> diff --git a/scripts/vz-rst-action.in b/scripts/vz-rst-action.in
> index fec68a7..a532bad 100755
> --- a/scripts/vz-rst-action.in
> +++ b/scripts/vz-rst-action.in
> @@ -28,40 +28,48 @@
>
> exec 1>&2
>
> +action_script=@SCRIPTDIR@/vz-rst-action
> +
> restore_devices()
> {
> local s d t major minor old dir device
> local pid=$CRTOOLS_INIT_PID
>
> - root=/proc/$pid/root
> -
> - # VE_PLOOP_DEVS=UUID at ploopN:major:minor:[root]
> - for s in $VE_PLOOP_DEVS; do
> - uuid=${s%%@*}
> - t=${s#*@}
> - device=${t%%:*}
> - t=${t#*:}
> - major=${t%%:*}
> - t=${t#*:}
> - minor=${t%%:*}
> -
> - [ ! -L "$root/dev/$uuid" ] && continue
> -
> - old=$(readlink $root/dev/$uuid)
> - [ -z "$old" ] && continue
> -
> - for d in "${old}" "${device}"; do
> - dir=$root/$d
> - dir=${dir%/*}
> - if [ -e "$dir" ]; then
> - rm -f $root/$d
> - else
> - mkdir -p $dir
> - fi
> - mknod -m 600 $root/$d b $major $minor
> - done
> + if [ -z "$VZ_RST_USE_NSENTER" ]; then
> + export VZ_RST_USE_NSENTER="y"
> + nsenter -m -t $pid bash $action_script
We can use /proc/$pid/root instead of entring a mount namespace
> + exit 0
> + fi
>
> - rm -f $root/dev/$uuid
> + for root in $CRIU_MNT_NS_ROOTS; do
> + # VE_PLOOP_DEVS=UUID at ploopN:major:minor:[root]
> + for s in $VE_PLOOP_DEVS; do
> + uuid=${s%%@*}
> + t=${s#*@}
> + device=${t%%:*}
> + t=${t#*:}
> + major=${t%%:*}
> + t=${t#*:}
> + minor=${t%%:*}
> +
> + [ ! -L "$root/dev/$uuid" ] && continue
> +
> + old=$(readlink $root/dev/$uuid)
> + [ -z "$old" ] && continue
> +
> + for d in "${old}" "${device}"; do
> + dir=$root/$d
> + dir=${dir%/*}
> + if [ -e "$dir" ]; then
> + rm -f $root/$d
> + else
> + mkdir -p $dir
> + fi
> + mknod -m 600 $root/$d b $major $minor
> + done
> +
> + rm -f $root/dev/$uuid
> + done
> done
> }
>
> @@ -87,6 +95,7 @@ case "$CRTOOLS_SCRIPT_ACTION" in
> ;;
> "post-setup-namespaces")
> if [ -n "$VEID" ]; then
> + restore_devices
> [ -n "$VE_OS_RELEASE" ] && cgset -r ve.os_release="$VE_OS_RELEASE" $VEID
> [ -n "$VE_PID_MAX" ] && cgset -r ve.pid_max="$VE_PID_MAX" $VEID
> fi
> @@ -97,8 +106,6 @@ case "$CRTOOLS_SCRIPT_ACTION" in
> exit 1
> fi
>
> - restore_devices
> -
> if [ -n "$VEID" ]; then
> [ -f "$CRTOOLS_IMAGE_DIR/vz_core_pattern.img" ] && \
> { cgexec -g ve:$VEID echo `cat $CRTOOLS_IMAGE_DIR/vz_core_pattern.img` \
> --
> 2.7.5
>
> _______________________________________________
> Devel mailing list
> Devel at openvz.org
> https://lists.openvz.org/mailman/listinfo/devel
More information about the Devel
mailing list