/usr/sbin/ocs-live-bind-mount is in clonezilla 3.27.16-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #!/bin/bash
# License: GPL
# Author: Aaron Burling <aaron_burling _at_ lkstevens wednet edu; burlingaaron _at_ gmail com> and Steven Shiau <steven _at_ clonezilla org>
# Description: Program to browse and bind mount the image repository.
#
DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/usr/share/drbl}"
. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
. /etc/drbl/drbl-ocs.conf
. $DRBL_SCRIPT_PATH/sbin/ocs-functions
ask_and_load_lang_set $specified_lang
# Functions
is_ocs_bind_mount() {
local dir_test="$1"
local rc=1
local mnt_src
# For local disk mount: (the key is "[" in the source)
# root@debian:~# findmnt -D
# SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
# /dev/sdf1 reiserfs 500G 40.2G 459.8G 8% /tmp/ocsroot_bind_root
# /dev/sdf1[/level2] reiserfs 500G 40.2G 459.8G 8% /home/partimag
# For NFS mount: (there is no "[" in the source, and there is no any "bind" in the mount options)
# root@debian:~# findmnt -D
# SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
# 192.168.120.254:/home/partimag/ nfs 1.7T 705.9G 974.5G 40% /tmp/ocsroot_bind_root
# 192.168.120.254:/home/partimag/level2 nfs 1.7T 705.9G 974.5G 40% /home/partimag
if [ -n "$(findmnt -nD --target $dir_test | \
awk -F" " '{print $1}' | grep -E "\[")" ]; then
rc=0
else
mnt_src_dir_test="$(findmnt -nD --target $dir_test | awk -F" " '{print $1}')"
mnt_src_pre="$(findmnt -nD --target $pre_ocsroot_path | awk -F" " '{print $1}')"
if [ "$(echo "$mnt_src_dir_test" | grep -E "$mnt_src_pre")" ]; then
# $mnt_src_dir_test is the subdir of $mnt_src_pre -> bind mounted.
rc=0
fi
fi
return $rc
} # end of is_ocs_bind_mount
#
ask_if_bind_mount_again() {
$DIA --backtitle "$msg_nchc_free_software_labs" --title "$msg_nchc_clonezilla" \
--yesno "$msg_do_u_want_to_do_it_again" 0 0
ans_="$?"
case "$ans_" in
0) # yes is chosen
ASK_DIRNAME=1;;
1) # no is chosen
# Revert the original mount point.
if [ "$unmount_flag" = "yes" ]; then
mount --bind $saved_bind_ocsroot_src $ocsroot
fi
if [ "$move_flag" = "yes" ]; then
mount --make-private "$(dirname $pre_ocsroot_path)"
mount --move $pre_ocsroot_path $ocsroot
fi
echo "$msg_program_stop!"
[ -f "$sel_dir" -a -n "$sel_dir" ] && rm -f $sel_dir
exit 1;;
esac
} # end of ask_if_bind_mount_again
####################
### Main program ###
####################
check_if_root
ask_and_load_lang_set
# check DIA
check_DIA_set_ESC $DIA
move_flag="no"
unmount_flag="no"
saved_bind_ocsroot_src=""
if ! mountpoint $ocsroot 2>&1 >/dev/null; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "$msg_this_directory_is_not_mountpoint: $ocsroot"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_there_is_no_way_to_mount_subdirectory"
echo "$msg_program_stop" | tee --append ${OCS_LOGFILE}
exit 1
fi
# Prepare the temporary mount point.
mkdir -p $pre_ocsroot_path
# If it's bind device, umount it first
if is_ocs_bind_mount $ocsroot; then
# Bind mounted mode.
# Saved the bind mounted source
# For NFS mount:
# root@debian:~# findmnt -D
# SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
# 192.168.120.254:/home/partimag/ nfs 1.7T 705.9G 974.5G 40% /tmp/ocsroot_bind_root
# 192.168.120.254:/home/partimag/level2 nfs 1.7T 705.9G 974.5G 40% /home/partimag
# For local device mount:
# /dev/sdf1 reiserfs 500G 40.2G 459.8G 8% /tmp/ocsroot_bind_root
# /dev/sdf1[/level2] reiserfs 500G 40.2G 459.8G 8% /home/partimag
# //NOTE// For local device, "[" and "]" are only shown as identification for bind mount,
# but they are not part of path. Therefore we have to strip them for the saved path.
saved_bind_ocsroot_src="$(findmnt -nD -o SOURCE --target $ocsroot | sed -r -e "s|\[||g" -e "s|\]||g")"
saved_bind_pre_src="$(findmnt -nD -o SOURCE --target $pre_ocsroot_path | sed -r -e "s|\[||g" -e "s|\]||g")"
saved_bind_pre_tgt="$(findmnt -nD -o TARGET --target $pre_ocsroot_path)"
# The saved_bind_ocsroot_src should use the target path, not the source. Otherwise like NFS source, it will become
# mount --bind 192.168.120.254:/home/partimag/level2 /home/partimag
# mount: special device 192.168.120.254:/home/partimag/level2 does not exist
# We want to make it as:
# mount --bind /tmp/ocsroot_bind_root/level2 /home/partimag
# Therefore change "192.168.120.254:/home/partimag/level2" as "/tmp/ocsroot_bind_root/level2"
# For local device, e.g. /tmp/ocsroot_bind_root[/level2] (extra [ and ] are shown, however, it's not part of path)
saved_bind_ocsroot_src="$(echo $saved_bind_ocsroot_src | sed -r -e "s|$saved_bind_pre_src|$saved_bind_pre_tgt|g")"
echo "$ocsroot is a bind mounted device. Unmount it first."
umount $ocsroot
rc=$?
if [ "$rc" -eq 0 ]; then
unmount_flag="yes"
fi
else
# Native mode, not bind mounted.
mount --make-private /
mount --move $ocsroot $pre_ocsroot_path
rc=$?
if [ "$rc" -eq 0 ]; then
move_flag="yes"
fi
fi
sel_dir="$(mktemp /tmp/sel_dir.XXXXXX)"
ASK_DIRNAME=1
while [ "$ASK_DIRNAME" -ne 0 ]; do
BrowseCurrentDirectory "$pre_ocsroot_path" $sel_dir
real_ocsroot="$(cat $sel_dir)"
if [ -n "$real_ocsroot" -a -d "$real_ocsroot" ]; then
if [ ! -e "$real_ocsroot/clonezilla-img" ]; then
cmd="mount --bind -o $ocsroot_def_mnt_opt,nodiratime $real_ocsroot $ocsroot"
echo "Running: $cmd"
eval $cmd
ASK_DIRNAME=0
else
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "$msg_the_dir_you_choose_is_clonezilla_img_dir: $real_ocsroot"
echo "$msg_there_is_no_way_to_mount_subdirectory"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
read -p "$msg_press_enter_to_continue..."
ask_if_bind_mount_again
fi
else
ask_if_bind_mount_again
fi
done
[ -f "$sel_dir" -a -n "$sel_dir" ] && rm -f $sel_dir
|