From 604f3d64764270c052cfb43081ec522237bbdb75 Mon Sep 17 00:00:00 2001
From: Ludovic Pouzenc <ludovic@pouzenc.fr>
Date: Fri, 5 May 2017 11:28:51 +0200
Subject: Massive add for all draft stuff to keep it in sync

---
 draft/other-tools/clonezilla/ocs-restore-mbr | 131 +++++++++++++++++++++++++++
 1 file changed, 131 insertions(+)
 create mode 100755 draft/other-tools/clonezilla/ocs-restore-mbr

(limited to 'draft/other-tools/clonezilla/ocs-restore-mbr')

diff --git a/draft/other-tools/clonezilla/ocs-restore-mbr b/draft/other-tools/clonezilla/ocs-restore-mbr
new file mode 100755
index 0000000..08fc697
--- /dev/null
+++ b/draft/other-tools/clonezilla/ocs-restore-mbr
@@ -0,0 +1,131 @@
+#!/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
+  # No matter it's msdos partition table or GPT one, here we restore the MBR.
+  # If it's GPT format, this could make GPT one as "valid GPT with protective MBR",
+  # and it's still GPT format. 
+  # Some OS (e.g. VMware ESXi 5.5.0) need protective MBR even it's GPT partition table.
+  # Ref: 
+  # https://sourceforge.net/p/clonezilla/discussion/Clonezilla_live/thread/30662778/
+  # https://sourceforge.net/p/clonezilla/discussion/Clonezilla_live/thread/ca825570/
+
+  # 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
+    cat_cmd="cat $pxelinux_binsrc_dir/bios/mbr.bin > /dev/$ihd"
+    echo "Restoring the mbr.bin from syslinux to /dev/$ihd by:"
+    echo "$cmd_cmd"
+    eval $cat_cmd
+    echo "done."
+  else
+    dd_cmd="dd if=$target_dir_fullpath/$(to_filename ${ihd})-mbr of=/dev/$ihd bs=446 count=1 &>/dev/null"
+    echo "Restoring the first 446 bytes of MBR data (executable code area) for $ihd by:"
+    echo "$dd_cmd"
+    eval $dd_cmd
+    echo "done."
+  fi
+  echo $msg_delimiter_star_line
+done
-- 
cgit v1.2.3