#!/bin/bash # # Copyright (C) 2007 Karel Zak # # This file is part of util-linux. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # TS_TOPDIR="${0%/*}/../.." TS_DESC="move" . $TS_TOPDIR/functions.sh ts_init "$*" ts_check_test_command "$TS_CMD_MOUNT" ts_check_test_command "$TS_CMD_UMOUNT" ts_check_test_command "$TS_CMD_FINDMNT" ts_skip_nonroot DIR_PRIVATE2="$TS_OUTDIR/mnt-move-private2" DIR_PRIVATE="$TS_OUTDIR/mnt-move-private" DIR_SRC="$DIR_PRIVATE/mnt-move-src" DIR_A="$DIR_PRIVATE/mnt-move-A" DIR_B="$DIR_PRIVATE/mnt-move-B" # create bind mount and make it private to be sure # (kernel cannot move mount with shared parent) [ -d $DIR_PRIVATE2 ] || mkdir $DIR_PRIVATE2 [ -d $DIR_PRIVATE ] || mkdir $DIR_PRIVATE $TS_CMD_MOUNT --bind $DIR_PRIVATE2 $DIR_PRIVATE $TS_CMD_MOUNT --make-private $DIR_PRIVATE [ -d $DIR_SRC ] || mkdir $DIR_SRC [ -d $DIR_A ] || mkdir $DIR_A [ -d $DIR_B ] || mkdir $DIR_B # bind $TS_CMD_MOUNT --bind $DIR_SRC $DIR_A # check the bind $TS_CMD_FINDMNT --kernel --target "$DIR_A" &> /dev/null [ "$?" == "0" ] || ts_die "Cannot find binded $DIR_A in /proc/self/mountinfo" # move $TS_CMD_MOUNT --move $DIR_A $DIR_B # check the move $TS_CMD_FINDMNT --kernel --target "$DIR_B" &> /dev/null [ "$?" == "0" ] || ts_die "Cannot find binded $DIR_B in /proc/self/mountinfo" # clean up $TS_CMD_UMOUNT $DIR_B rmdir $DIR_SRC $DIR_A $DIR_B $TS_CMD_UMOUNT $DIR_PRIVATE rmdir $DIR_PRIVATE $DIR_PRIVATE2 ts_log "Success" ts_finalize