ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Partitionstabellen sichern

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

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 sfdisk, bei MPT, sowie mit sgdisk. bei GPT, gesichert.

Das Skript in einen Editor[2] kopieren, ausführbar[3] machen und im Terminal[4] mit Rootrechten[5] ausführen.

Syntax

Sichern der Tabellen ins Homeverzeichnis

sudo ./SKRIPTNAME 

Sichern der Tabellen in ein übergebenes, frei wählbares Verzeichnis

sudo ./SKRIPTNAME VERZEICHNIS 
 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
#!/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)

ubuntuusers.local › WikiSkriptePartitionstabellen sichern