1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux备份根目录与还原脚本 Shell脚本备份和还原MBR(主引导记录)

linux备份根目录与还原脚本 Shell脚本备份和还原MBR(主引导记录)

时间:2020-03-06 02:08:25

相关推荐

linux备份根目录与还原脚本 Shell脚本备份和还原MBR(主引导记录)

mbrback shell脚本用于创建一个硬盘MBR和分区表的备份。

然后,可以使用mbrback的MBR引导代码,MBR,分区表备份文件进行相关恢复工作。

代码:

复制代码 代码示例:

#!/bin/bash

# Script Name: mbrback

# Requires: util-linux

# 不要修改这些变量

argsneeded=1

restoretype=""

back=""

devname=""

help ()

{

echo 'mbrback version 1.0.0'

echo 'Creates MBR and partition table backups of DEVICE named:'

echo ' HOST-DEVICE-MBR-back'

echo ' HOST-DEVICE-partition-back.sf'

echo 'Restores MBR and partition table from specified backup file'

echo 'Usage: sudo mbrback DEVICE [BACKUPFOLDER]'

echo ' (creates backup files of DEVICE)'

echo 'Usage: sudo mbrback --restoreboot DEVICE [BACKUPFILE]'

echo ' (restores MBR boot code only)'

echo 'Usage: sudo mbrback --restorefullmbr DEVICE [BACKUPFILE]'

echo ' (restores entire MBR)'

echo 'Usage: sudo mbrback --restorepart DEVICE [BACKUPFILE.sf]'

echo ' (restores partition table)'

echo 'Example: sudo mbrback sda'

echo ' (creates MBR and partition table backups of'

echo ' /dev/sda in current folder)'

echo 'Example: sudo mbrback /dev/sda'

echo ' (creates MBR and partition table backups of'

echo ' /dev/sda in current folder)'

echo 'Example: sudo mbrback sda /mybackups'

echo ' (creates MBR and partition table backups of'

echo ' /dev/sda in /mybackups)'

echo 'Example: sudo mbrback --restoreboot sda /mybackups/sys-sda-MBR-back'

echo ' (restores MBR boot code of /dev/sda using'

echo ' /mybackups/sys-sda-MBR-back)'

echo 'Example: sudo mbrback --restorepart sda /mybackups/sys-sda-partition-back.sf'

echo ' (restores partition table of /dev/sda using sfdisk file '

echo ' /mybackups/sys-sda-partition-back.sf)'

echo

echo "When restoring, mbrback will always tell you what it's going to do"

echo "and allow you to abort before it writes to disk."

echo " -9-11"

}

index=0

while [ "$1" != "" ];

do

if [ "${1:0:1}" = "-" ]; then

case "$1" in

--help | -help )

help

exit

;;

--restoreboot )

if [ "$restoretype" = "" ]; then

restoretype="boot"

else

echo 'mbrback: can only use one restore option'

exit 1

fi

;;

--restorefullmbr )

if [ "$restoretype" = "" ]; then

restoretype="fullmbr"

else

echo 'mbrback: can only use one restore option'

exit 1

fi

;;

--restorepart )

if [ "$restoretype" = "" ]; then

restoretype="part"

else

echo 'mbrback: can only use one restore option'

echo

help

exit 1

fi

;;

* )

echo "mbrback: Unknown option $1"

echo

help

exit 1

;;

esac

else

let "index+=1"

case $index in

1 )

devname=`basename "$1"`

if [ ! -b "/dev/$devname" ]; then

echo "mbrback: /dev/$devname is not a valid device"

exit 1

fi

;;

2 )

back="$1"

;;

* )

echo "mbrback: Too many arguments"

exit 1

;;

esac

fi

shift

done

if (( index < $argsneeded )) || [ "$devname" = "" ]; then

echo "mbrback: missing arguments"

echo

help

exit 1

fi

if [ `whoami` != "root" ]; then

echo 'mbrback: must be run with sudo'

exit 1

fi

sysname=$HOSTNAME

if [ "$restoretype" = "" ]; then

# create MBR and table backups

if [ "$back" = "" ]; then

back=`pwd`

else

if [ ! -d "$back" ]; then

echo "mbrback: $back is not a valid backup folder"

exit 1

fi

fi

dd if=/dev/$devname of="$back/$sysname-$devname-MBR-back" bs=512 count=1

sfdisk -d /dev/$devname > "$back/$sysname-$devname-partition-back.sf"

else

# restore

if [ "$back" = "" ]; then

echo "mbrback: you must specify a backup file"

exit 1

elif [ ! -f "$back" ]; then

echo "mbrback: file not found - $back"

exit 1

fi

if [ "$restoretype" = "boot" ] || [ "$restoretype" = "fullmbr" ]; then

sfhead=`head --bytes=21 "$back"`

if [ "$sfhead" = "# partition table of " ]; then

echo "mbrback: $back is not an MBR backup file"

exit 1

fi

if [ "$(stat -c%s "$back")" != "512" ]; then

echo "mbrback: $back is wrong size for an MBR backup file"

exit 1

fi

fi

if [ "$restoretype" = "part" ]; then

sfhead=`head --bytes=21 "$back"`

if [ "$sfhead" != "# partition table of " ]; then

echo "mbrback: $back not a valid sfdisk backup file"

exit 1

fi

echo

echo "You are about to overwrite your /dev/$devname partition table with"

echo "the contents of $back"

echo

echo "WARNING!!! Unless the partition table has been damaged or you"

echo " have accidentally deleted a partition, you should abort."

echo

echo "WARNING!!! Restoring the partition table from an out-of-date backup"

echo " may render ALL the data on your drive unreadable."

echo

echo "WARNING!!! Do not proceed if /dev/$devname is mounted."

echo

elif [ "$restoretype" = "boot" ]; then

echo

echo "You are about to overwrite your /dev/$devname MBR boot code with"

echo "the contents of $back"

echo

echo "WARNING: Restoring your MBR boot code from an out-of-date MBR backup"

echo " file may render your computer unbootable."

elif [ "$restoretype" = "fullmbr" ]; then

echo

echo "You are about to overwrite your ENTIRE /dev/$devname MBR with"

echo "the contents of $back"

echo

echo "WARNING!!! The full MBR contains both boot code and the drive's"

echo " partition table. Unless the partition table has been"

echo " damaged or you have accidentally deleted a partition"

echo " you should abort and restore boot code only with"

echo " --restoreboot instead."

echo

echo "WARNING!!! Restoring your full MBR from an out-of-date MBR backup may"

echo " render your computer unbootable and ALL the data on your"

echo " drive unreadable."

echo

echo "WARNING!!! Do not proceed if /dev/$devname is mounted."

fi

echo

echo "Do you want to proceed? (you must type yes to proceed)"

read s1

if [ "$s1" != "yes" ]; then

echo "mbrback: no changes made - aborted at user request"

exit 2

fi

if [ "$restoretype" = "part" ]; then

sfdisk /dev/$devname < "$back"

elif [ "$restoretype" = "boot" ]; then

dd if="$back" of=/dev/$devname bs=448 count=1

elif [ "$restoretype" = "fullmbr" ]; then

dd if="$back" of=/dev/$devname bs=512 count=1

fi

echo "/dev/$devname was updated"

fi

exit 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。