linux:restore_menu
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
linux:restore_menu [2018/04/17 09:08] – dodger | linux:restore_menu [2024/03/25 07:54] – dodger | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== [SCRIPT] RestoreMenu ====== | ====== [SCRIPT] RestoreMenu ====== | ||
- | ====== Descripcion ====== | ||
- | Ver el post del blog: http:// | ||
- | ====== Acciones a realizar ====== | ||
- | Instalar un sistema linux base con las siguientes dependencias: | ||
- | * bash >= 4.0 | ||
- | * sudo | ||
- | * dd | ||
- | * gzip/gunzip | ||
- | * [[http:// | ||
- | * acpi (comprobación de batería en portátil) | ||
- | * dmidecode (revisamos el serial, el script hay que configurarlo cada vez) | ||
- | * pigz (para proceso en paralelo) | ||
+ | https:// | ||
- | ===== Pasos generales ===== | ||
- | * Se particiona el disco. | ||
- | * Instalamos windows | ||
- | * Instalamos un linux " | ||
- | * Añadimos nuestro script. | ||
- | * Modificamos los parámetros de configuración necesarios en el mismo | ||
- | * Creamos un usuario de sistema sin privilegios, | ||
- | * Deshabilitamos la posibilidad de salir del script (//trap//) para evitar problemas. | ||
- | * Nos guardamos el pass de root ;-) | ||
- | * Modificamos grub para que el menú diga algo como Restore or similar y el usuario no se asuste viendo // | ||
- | * Informar al usuario de como funciona el entorno, aunque es muy muy sencillo) | ||
- | |||
- | ===== Script ===== | ||
- | ==== Codigo ==== | ||
- | <file bash restore_menu.sh> | ||
- | #!/bin/bash | ||
- | |||
- | # Coded by dodger | ||
- | # More information on | ||
- | # http:// | ||
- | |||
- | |||
- | SNAPSHOTDIR=/ | ||
- | WINDOWSDEV=/ | ||
- | SERIAL=" | ||
- | HOST=" | ||
- | INITIAL_IMAGE=" | ||
- | COMPRESSOR=/ | ||
- | COMPRESSOPTIONS=" | ||
- | UNCOMPRESSOR=/ | ||
- | UNCOMPRESSOPTIONS=" | ||
- | NTFSCLONE="/ | ||
- | NTFSRESIZE="/ | ||
- | |||
- | |||
- | # AUTOCONFIG | ||
- | unset IMAGELIST | ||
- | unset IMAGESIZE | ||
- | |||
- | [ ! -d ${SNAPSHOTDIR} ] && mkdir $SNAPSHOTDIR | ||
- | |||
- | |||
- | trap_it() | ||
- | { | ||
- | [[ " | ||
- | local TRAPIT=$(eval echo {1..${BASH_REMATCH[1]}}) | ||
- | trap 'echo "NO PERMITIDO"' | ||
- | } | ||
- | |||
- | print_main_menu() | ||
- | { | ||
- | |||
- | local let OPTION=0 | ||
- | clear | ||
- | cat > /dev/stdout <<EOF | ||
- | ################################################## | ||
- | Menu de restauracion y copia de sistema | ||
- | 1) Restauracion de imagen | ||
- | 2) Generacion de Imagen | ||
- | 3) Borrar imagen | ||
- | 4) Lista las imagenes existentes y su tamanyo | ||
- | 5) Ayuda | ||
- | 99) Reinicio del sistema | ||
- | ################################################## | ||
- | EOF | ||
- | while [[ ! $OPTION =~ ^([1-5]|99)$ ]] | ||
- | do | ||
- | [ ${OPTION: | ||
- | printf " | ||
- | read OPTION | ||
- | OPTION=${OPTION: | ||
- | [[ ! ${OPTION} =~ ^[0-9]{1,}$ ]] && OPTION=0 | ||
- | done | ||
- | return ${BASH_REMATCH[0]} | ||
- | } | ||
- | |||
- | test() | ||
- | { | ||
- | |||
- | local MENU=$1 | ||
- | local let OPTION=0 | ||
- | case $MENU in | ||
- | " | ||
- | |||
- | ;; | ||
- | " | ||
- | ;; | ||
- | " | ||
- | ;; | ||
- | * ) | ||
- | ;; | ||
- | esac | ||
- | } | ||
- | |||
- | help() | ||
- | { | ||
- | clear | ||
- | cat > /dev/stdout <<EOF | ||
- | Este menu permite la restauracion de una copia de sistema anterior o | ||
- | la generacion de una nueva copia. | ||
- | Lo que se realiza es una copia integral del sistema windows o bien, | ||
- | una restauracion de 0 del mismo tal como estaba en el momento de la copia. | ||
- | Ya que el espacio es limitado, deberian revisarse las imágenes de sistema | ||
- | existentes y eliminar las que no sean necesarias. | ||
- | |||
- | |||
- | Las opciones de menu son las siguientes: | ||
- | Opcion 1, dara opciones para la restauracion. | ||
- | Opcion 2, dara opciones para la copia/ | ||
- | Opcion 3, dara opciones para el borrado de imagenes existentes. | ||
- | Opcion 99, reinicia el equipo. | ||
- | |||
- | Recuerde que la opcion 1 elimina todos los datos actuales del sistema windows, dejándolo como cuando se realizó la copia. | ||
- | |||
- | |||
- | |||
- | Presiona ENTER para continuar | ||
- | EOF | ||
- | read | ||
- | } | ||
- | |||
- | reboot_machine() | ||
- | { | ||
- | echo " | ||
- | sleep 2 | ||
- | #exit 0 | ||
- | shutdown -r now | ||
- | } | ||
- | |||
- | list_images() | ||
- | { | ||
- | let x=0 | ||
- | unset IMAGELIST | ||
- | for i in ${SNAPSHOTDIR}/ | ||
- | IMAGELIST[$x]=" | ||
- | let x++ | ||
- | done | ||
- | } | ||
- | |||
- | list_image_size() | ||
- | { | ||
- | let x=0 | ||
- | unset IMAGESIZE | ||
- | for ((x=0; x< | ||
- | IMAGESIZE[$x]=" | ||
- | done | ||
- | } | ||
- | |||
- | check_cable() | ||
- | { | ||
- | while [[ " | ||
- | echo "Este proceso tardara MUCHO, es necesario conexion a la red electrica" | ||
- | echo " | ||
- | read | ||
- | done | ||
- | } | ||
- | |||
- | show_agree() | ||
- | { | ||
- | local YN=N | ||
- | echo "##################################################" | ||
- | echo "Este proceso no se puede parar, Estas seguro?" | ||
- | printf " | ||
- | read YN | ||
- | [[ ! ${YN} =~ ^[yY]$ ]] && return 1 | ||
- | return 0 | ||
- | } | ||
- | |||
- | |||
- | restore_clone_main() | ||
- | { | ||
- | local ACTION=$1 | ||
- | local IMAGEFILE=$2 | ||
- | local DDPID=0 | ||
- | check_cable | ||
- | show_agree | ||
- | [ ! $? -eq 0 ] && return 1 | ||
- | case " | ||
- | " | ||
- | ${NTFSCLONE} --save-image --output - ${WINDOWSDEV} | $COMPRESSOR $COMPRESSOPTIONS > ${IMAGEFILE} | ||
- | ;; | ||
- | " | ||
- | $UNCOMPRESSOR $UNCOMPRESSOPTIONS $IMAGEFILE | ${NTFSCLONE} --restore-image --overwrite ${WINDOWSDEV} - | ||
- | ;; | ||
- | *) | ||
- | echo " | ||
- | return 1 | ||
- | ;; | ||
- | esac | ||
- | |||
- | echo " | ||
- | read | ||
- | return 0 | ||
- | } | ||
- | |||
- | restore_menu() | ||
- | { | ||
- | local let OPTION=99 | ||
- | local YN=n | ||
- | clear | ||
- | echo "##################################################" | ||
- | echo "Menu de restauracion" | ||
- | echo "Paso 1: Elegir imagen:" | ||
- | list_images | ||
- | for ((x=0; x< | ||
- | echo "${x} ) ${IMAGELIST[$x]}" | ||
- | done | ||
- | echo -e " | ||
- | while [ ${OPTION} = 99 ] | ||
- | do | ||
- | printf " | ||
- | read OPTION | ||
- | OPTION=${OPTION: | ||
- | [ ${OPTION} -lt 0 ] || [ ${OPTION} -ge ${# | ||
- | done | ||
- | echo "##################################################" | ||
- | echo "Paso 2: Restaurar imagen: ${IMAGELIST[$OPTION]}" | ||
- | echo "La descripcion de la imagen es:" | ||
- | cat ${SNAPSHOTDIR}/ | ||
- | echo "Estas seguro?" | ||
- | printf " | ||
- | read YN | ||
- | [[ ${YN} =~ ^[yY]$ ]] && restore_clone_main restore " | ||
- | if [ $? -eq 0 ] ; then | ||
- | echo "Es necesario reiniciar el Ordenador..." | ||
- | sleep 2 | ||
- | reboot_machine | ||
- | fi | ||
- | } | ||
- | |||
- | |||
- | clone_menu() | ||
- | { | ||
- | MYDATE=" | ||
- | local let OPTION=99 | ||
- | local YN=n | ||
- | local DESCRIPTION="" | ||
- | local USEDSPACE=" | ||
- | USEDSPACE=$(($USEDSPACE/ | ||
- | local FREESPACE=" | ||
- | clear | ||
- | echo "##################################################" | ||
- | echo "Menu de Clonado" | ||
- | [ $USEDSPACE -gt $FREESPACE ] && echo "El espacio necesario es mayor que el libre, es necesario hacer espacio (borrar imagenes)" | ||
- | while [[ ! $DESCRIPTION ]] ; do | ||
- | echo " | ||
- | printf " | ||
- | read DESCRIPTION | ||
- | echo " | ||
- | done | ||
- | restore_clone_main clone " | ||
- | return 0 | ||
- | } | ||
- | |||
- | delete_menu() | ||
- | { | ||
- | local let OPTION=98 | ||
- | local YN=n | ||
- | clear | ||
- | list_images | ||
- | list_image_size | ||
- | [ ${# | ||
- | echo "##################################################" | ||
- | echo "Menu de Borrado" | ||
- | echo "Paso 1: Elegir imagen para borrar:" | ||
- | for ((x=0; x< | ||
- | [[ ! " | ||
- | done | ||
- | echo -e " | ||
- | while [ ${OPTION: | ||
- | do | ||
- | printf " | ||
- | read OPTION | ||
- | OPTION=${OPTION: | ||
- | [ ${OPTION} -eq 99 ] && return 1 | ||
- | [ ${OPTION} -lt 0 ] || [ ${OPTION} -gt ${# | ||
- | done | ||
- | echo "Estas seguro?" | ||
- | printf " | ||
- | read YN | ||
- | if [[ ${YN} =~ ^[yY]$ ]] | ||
- | then | ||
- | echo " | ||
- | if [[ ! " | ||
- | then | ||
- | rm -fv " | ||
- | rm -fv " | ||
- | fi | ||
- | fi | ||
- | } | ||
- | |||
- | list_menu() | ||
- | { | ||
- | local let OPTION=98 | ||
- | local YN=n | ||
- | clear | ||
- | list_images | ||
- | list_image_size | ||
- | echo "##################################################" | ||
- | echo "Lista de imagenes" | ||
- | for ((x=0; x< | ||
- | echo "$x ) Nombre: \" | ||
- | done | ||
- | echo "##################################################" | ||
- | echo " | ||
- | read | ||
- | } | ||
- | |||
- | |||
- | main() | ||
- | { | ||
- | trap_it | ||
- | while true ; do | ||
- | local let OPTION=0 | ||
- | print_main_menu | ||
- | OPTION=$? | ||
- | case $OPTION in | ||
- | 1) | ||
- | restore_menu | ||
- | ;; | ||
- | 2) | ||
- | clone_menu | ||
- | ;; | ||
- | 3) | ||
- | delete_menu | ||
- | ;; | ||
- | 4) | ||
- | list_menu | ||
- | ;; | ||
- | 5) | ||
- | help | ||
- | ;; | ||
- | 99) | ||
- | reboot_machine | ||
- | ;; | ||
- | *) | ||
- | ;; | ||
- | esac | ||
- | done | ||
- | } | ||
- | |||
- | main | ||
- | </ | ||
- | ==== Variables ==== | ||
- | ^ Variable | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | |||
- | ==== Ejemplo de Configuración restante ==== | ||
- | === grub === | ||
- | <file config menu.lst> | ||
- | # general configuration: | ||
- | timeout | ||
- | default | ||
- | color light-blue/ | ||
- | |||
- | # (0) Windows | ||
- | title Windows | ||
- | rootnoverify (hd0,0) | ||
- | makeactive | ||
- | chainloader +1 | ||
- | |||
- | |||
- | # (1) Arch Linux | ||
- | title Recovery Mode | ||
- | root | ||
- | kernel / | ||
- | initrd / | ||
- | </ | ||
- | === .bashrc === | ||
- | <file bash .bashrc> | ||
- | # | ||
- | # ~/.bashrc | ||
- | # | ||
- | sudo / | ||
- | </ | ||
- | === sudoers === | ||
- | <file config sudoers> | ||
- | username | ||
- | </ | ||
- | |||
- | |||
- | ====== Troubleshooting ====== | ||
- | ===== ntfsclone ===== | ||
- | < | ||
- | ERROR: $Bitmap size is smaller than expected | ||
- | </ | ||
- | Solución: | ||
- | http:// | ||
linux/restore_menu.txt · Last modified: 2024/03/25 07:55 by dodger