This file is indexed.

/usr/sbin/ocs-restore-mbr is in clonezilla 3.10.11-3.

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
#!/bin/bash

# Reinstall executable code area (first 446 bytes in MBR)

# Ref: http://en.wikipedia.org/wiki/Master_boot_record
# Master Boot Record (MBR) is the 512-byte boot sector:
# 446 bytes (executable code area) + 64 bytes (table of primary partitions) + 2 bytes (MBR signature; # 0xAA55) = 512 bytes.
# However, some people also call executable code area (first 446 bytes in MBR) as MBR.
#
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

# Load the config in ocs-live.conf. This is specially for Clonezilla live. It will overwrite some settings of /etc/drbl/drbl-ocs.conf, such as $DIA...
[ -e "/etc/ocs/ocs-live.conf" ] && . /etc/ocs/ocs-live.conf

# Setings
# By default we do not restore the prebuild mbr from syslinux.
restore_prebuild_mbr="no"

#
USAGE() {
    echo "$ocs - To restore the MBR from an image to device"
    echo "Usage:"
    echo "To run $ocs:"
    echo "$ocs [OPTION] IMAGE_NAME DEVICE"
    echo "Options:"
    echo "-p, --prebuild_mbr  Use the prebuild bootloader from syslinux (For Windows only), not from the saved image"
    echo "-or, --ocsroot DIR  Specify DIR (absolute path) as directory ocsroot (i.e. overwrite the ocsroot assigned in drbl.conf)"
    echo "IMAGE_NAME is the image dir name, not absolute path"
    echo "DEVICE is the device name, e.g. sda, sda..."
    echo "Ex:"
    echo "To restore the the mbr saved in the image \"my-image\" to device sda, run:"
    echo "   $ocs my-image sda"
    echo
} # end of USAGE


####################
### Main program ###
####################

ocs_file="$0"
ocs=`basename $ocs_file`
#
#
while [ $# -gt 0 ]; do
 case "$1" in
   -p|--prebuild_mbr)
           restore_prebuild_mbr="yes"
           shift; 
           ;;
   -or|--ocsroot)
           # overwrite the ocsroot in drbl.conf
           shift; 
           if [ -z "$(echo $1 |grep ^-.)" ]; then
             # skip the -xx option, in case 
             ocsroot="$1"
             shift;
           fi
           [ -z "$ocsroot" ] && USAGE && exit 1
           ;;
   -*)     echo "${0}: ${1}: invalid option" >&2
           USAGE >& 2
           exit 2 ;;
   *)      break ;;
 esac
done

target_dir="$1"
shift
target_hd="$*"

# Fedora Core 1 seems to use dumb for rc1, we have to force it use linux.
# otherwise setterm will complain.
[ -z "$TERM" -o "$TERM" = "dumb" ] && TERM="linux"
echo "Setting the TERM as $TERM"
export TERM="$TERM"

#
check_if_root
ask_and_load_lang_set

if [ -z "$target_dir" ]; then
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo "No image was assigned!"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  USAGE
  echo "$msg_program_stop!"
  exit 1
fi
if [ -z "$target_hd" ]; then
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo "No destination disk was assigned!"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  USAGE
  echo "$msg_program_stop!"
  exit 1
fi

#
target_dir_fullpath="$ocsroot/$target_dir"

for ihd in $target_hd; do
  if `is_mbr_partitition_table_file $target_dir_fullpath/$(to_filename ${ihd})-pt.parted`; then
    # Install MBR which displays a failure message on boot. This is for fault tolerance. If all the partitions are cloned successfully, the correcting MBR will be restored later. For more info, please check https://sourceforge.net/tracker/?func=detail&atid=671653&aid=2793248&group_id=115473
    cat /usr/share/partclone/fail-mbr.bin > /dev/$ihd
    if [ "$restore_prebuild_mbr" = "yes" ]; then
      # For M$ Windows system, sometimes it will fail if we restore the mbr from the one we saved (Ex. hda-mbr). Another option is to use mbr.bin from syslinux
      echo -n "Restoring the mbr.bin from syslinux to /dev/$ihd... "
      cat $pxelinux_binsrc_dir/bios/mbr.bin > /dev/$ihd
      echo "done."
    else
      echo -n "Restoring the first 446 bytes of MBR data, i.e. executable code area, for $ihd... "
      dd if=$target_dir_fullpath/$(to_filename ${ihd})-mbr of=/dev/$ihd bs=446 count=1 &>/dev/null
      echo "done."
    fi
    echo $msg_delimiter_star_line
  else
    [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
    echo "Not a MBR disk: $ihd"
    echo "No need to restore the first 446 bytes of MBR data."
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
    exit 1
  fi
done