[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Datenträger#Wie-heissen-die-Datentraeger:Wie heißen die Datenträger] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} Dieses Skript sichert die Partitionstabellen (MBR-Partitionstabelle/GUID-Partitionstabelle) je angeschlossener Festplatte[1], inkl. Wechseldatenträger (USB). Der Tabellentyp wird mittels [:GNU Parted:] ermittelt und mit [:fdisk#sfdisk:sfdisk] (bei MPT) oder [:gdisk#sgdisk:sgdisk] (bei GPT) gesichert. Das Skript in einen Editor[2] kopieren, speichern, ausführbar[3] machen und im Terminal[4] mit Root-Rechten[5] ausführen. {{{#!code bash #!/bin/bash # Die Partitionstabellen sichern entsprechend Ihres Typs: MBR/GPT # Benötigte PGM: parted, sfdisk,sgdisk,sed # Das Sicherungsverzeichnis kann mit angegeben werden (/Verzeichnis), Standard: ${HOME} # Alle Texthinweise werden über stderr ausgegeben. backupdir=${HOME}/ # Ausgabeverzeichnis-Standard: ${HOME} # Name der Sicherungsdatei: timestamp=$(date +%Y%m%d-%H:%M) # 1. Timestamp YYYYMMDD-HH:MM # 2. der Devisename backupname="Backup" # 3. dieser Name (wird noch ergänzt, sofern lshw installiert) # Extension ist MPT (bei msdos Master-Boot-Record) bzw. GPT (bei gpt GUID-Partiton-Table) export LC_ALL=C # wg. sed bold=$(echo -e "\e[1m") # ein bisschen Farbenspiel für die Konsole red=$(echo -e "\e[1;31m") green=$(echo -e "\e[1;32m") blue=$(echo -e "\e[1;34m") violet=$(echo -e "\e[1;35m") cyan=$(echo -e "\e[1;36m") standard=$(echo -e "\e[0;39m") stars='*****************************************************' # wenn lshw installiert ist, dann Datenträger-Bezeichnung ermitteln für Sicherungsdatie-Namen disks=( $(which lshw >/dev/null && sudo lshw -businfo 2>/dev/null|sed -ne 's#^.*\@.*\(\/dev\/[shm][a-zA-Z]\+\) *\+disk *\+\(.*B\) \(.*\)$#\1:\3\-\2#p'|tr -s ' ' '_') ) # sfdisk aus dem Paket fdisk muss installiert sein which sfdisk 2>&1>/dev/null || { echo -e "\t${red}====> \t sfdisk muss installiert sein \t <====${standard}"; exit 1 ;} # sgdisk aus dem Paket gdisk muss installiert sein which sgdisk 2>&1>/dev/null || { echo -e "\t${red}====> \t sgdisk muss installiert sein \t <====${standard}"; exit 1 ;} # parted muss installiert sein which parted 2>&1>/dev/null || { echo -e "\t${red}====> \t parted muss installiert sein \t <====${standard}"; exit 1 ;} if [[ `whoami` != root ]] # Ausführung mit Rootrechten then echo -e "\n\t\tDas Skript \"$(basename $0)\" muss mit ${bold}${red}Rootrechten${standard} gestarted werden\n" 1>&2 exit 1 fi [ x$1 != 'x' -a -d $(dirname $a'/dummy') ] && backupdir=$(dirname $1'/dummy')/ # $1 Ausgabeverzeichnis vorhanden/existent: j/n echo -e "\n\t\t${stars}\n\t\t* Sichern der verschiedenen Tabellentypen (MTP/GPT) *\n\t\t${stars}\n\t\t Backup-Verzeichnis: ${blue}${backupdir}${standard}\n\t\t" 1>&2 while read -r device do pt=$(sudo parted -s /dev/${device} print|sed -ne 's@^.*Table: \(.*\)$@\1@p') backup_file="${timestamp}_${device}-${backupname}" for disk in ${disks[*]} # Datenträger-Bezeihnung auswerten do [ $(cut -d':' -f1 <<<$disk) == "/dev/${device}" ] && { backup_file="${timestamp}_${device}-${backupname}:$(cut -d':' -f2 <<< $disk)"; break ;} done case $pt in # Liste der bekannten Tabellentypen msdos) # MBR-Partitionstabelle (MPT) echo -e "\t${standard}Typ:\t${green}$pt${standard}\t Device: ${cyan}/dev/${device}${standard}\tDatei: ${blue}${backup_file}.MPT${violet}" 1>&2 $(sudo sfdisk -d /dev/${device} >${backupdir}${backup_file}.MPT) echo ${standard} 1>&2 ;; gpt) # GUID-Partitionstabelle (GPT) echo -e "\t${standard}Typ:\t${green}$pt${standard}\t Device: ${cyan}/dev/${device}${standard}\tDatei: ${blue}${backup_file}.GPT${violet}" 1>&2 $(sudo sgdisk -b ${backupdir}${backup_file}.GPT /dev/${device} 1>&2) echo ${standard} 1>&2 ;; *) # alle weiteren gefundenen als Fehler ausweisen echo -e "${red}====> \t${standard}Sichern Typ:\t${green}$pt${standard}\tDevice:${blue}/dev/${device}${standard}\tBackup: ${red} unbekannter Typ ${green} ${pt}${red} <====${standard}" 1>&2 ;; esac done < <(sed -ne 's/^.*\([shm]d[a-zA-Z]\+ *$\)/\1/p' /proc/partitions) }}} = Syntax = Sichern der Tabellen ins [:Homeverzeichnis:]: {{{#!vorlage Befehl sudo ./SKRIPTNAME }}} Sichern der Tabellen in ein übergebenes, frei wählbares Verzeichnis: {{{#!vorlage Befehl sudo ./SKRIPTNAME VERZEICHNIS }}} Nach erfolgreicher Ausführung dieses Skripts erscheint eine entsprechende Meldung im Terminalfenster. Im Homeverzeichnis des Benutzers befinden sich die ausgegebenen Dateien mit der Endung GBT bzw. MPT. = Wiederherstellung = Das Wiederherstellen hängt von der Art der Partitionstabellen (MPT/GPT) und somit vom verwendeten Programm ab. In den Wikiartikeln [:fdisk#Partitionstabelle-zurueckladen:sfdisk] und [:gdisk#Partitionstabelle-zurueckladen:sgdisk] sind die notwendigen Schritte beschrieben. = Links = * [wikipedia:Master_Boot_Record:Master-Boot-Record] - (MBR) Legacy-MBR * [wikipedia:Partitionstabelle:] - (MPT) des Master-Boot-Record * [wikipedia:GUID_Partition_Table:GUID Partition Table] - (GPT) incl. Protectiv-MBR * [man:sfdisk:] {en} - Manpage * [man:sgdisk:] {en} - Manpage * [http://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html sgdisk Walkthrough] {en} # tag: Shell, System, Partitionierung