#!/usr/bin/perl -w

require 5.000;
use lib '/usr/local/bin/',"$ENV{HOME}/bin/",'/usr/stud/loescher/bin/','/usr/sl';
use slutil;
use mo;
use English;

$zielroot = "/m/";
$exclude  = "-exclude=delwatch/";


# Größen:
# /archiv         22
# /bin            6
# /boot           4
# /etc            5
# /opt/bin        6
# /opt/clipart    56
# /opt/xsmp       1
# /sbin           9
# /root           3
# /lib            31
# /woall          5
#
# /var            207
# /home           zu viel :-)
# /usr/local/*     100

# Noch nicht:
# /usr/local/games 236
# /var/spool/wwwoffle
# /var/spool/news


# Bootsektor kopieren
mkdir "/root/backup",0755 unless -d "/root/backup";
# system('dd if=/dev/sdb of=/root/backup/bootsektor-sdb.dd bs=512 count=1 2>/dev/null');
# Partitionstabellen sichern
system('fdisk -l > /root/backup/partitionen.fdisk 2>/dev/null');


# Auswahl
print "Was wollen Sie sichern: (a)lles, ab Teil (1),(2),(3),(4)? ";
$input = readkey; print "\n";
exit unless $input =~ /([a1234])/;
goto TEIL1 if $1 eq 'a';
goto "TEIL$1";


######################################################################
### 1
######################################################################
TEIL1:

print "Bitte MO-Kopie der Festplatte  'Linux Teil 1'  einlegen!\n";
readkey;
mountmo || die "Fehler beim Mounten!\n";
# /usr/local/
foreach $dir ('usr/local')
{
  $quelle = "/$dir/";
  $ziel   = "$zielroot$dir/";
  system("syncdir -delete $exclude:/usr/local/games $quelle $ziel");
  $fehler = ($?>>8);
  if ( $fehler == 2 ) { die "###\n### Syncdir meldet Fehler!\n###\n"; }
}
system("date >> $zielroot/syncdate.txt");
SicherePartitionsTabelle();
print "Noch frei auf der MO:\n";
system("df $zielroot");
umountmo || die "Fehler beim Un-Mounten!\n";


######################################################################
### 2
######################################################################
TEIL2:

print "Bitte MO-Kopie der Festplatte  'Linux Teil 2'  einlegen!\n";
readkey;
mountmo || die "Fehler beim Mounten!\n";
foreach $dir ('home')
{
  $quelle = "/$dir/";
  $ziel   = "$zielroot$dir/";
  system("syncdir -delete $exclude:/home/loescher/backup:/home/loescher/vmware $quelle $ziel");
  $fehler = ($?>>8);
  if ( $fehler == 2 ) { die "###\n### Syncdir meldet Fehler!\n###\n"; }
}

# Solange syncdir immer in Unterverzeichnisse reingeht muß es so sein:
system("mkdir ${zielroot}mnt") unless -d "${zielroot}mnt";
chdir "/mnt";
system("tar -cvplf - . | ( cd ${zielroot}mnt/ ; tar -xpf - ; sleep 2 )");

system("date >> $zielroot/syncdate.txt");
SicherePartitionsTabelle();
print "Noch frei auf der MO:\n";
system("df $zielroot");
umountmo || die "Fehler beim Un-Mounten!\n";


######################################################################
### 3
######################################################################
TEIL3:

print "Bitte MO-Kopie der Festplatte  'Linux Teil 3'  einlegen!\n";
readkey;
mountmo || die "Fehler beim Mounten!\n";
foreach $dir ('var')
{
  $quelle = "/$dir/";
  $ziel   = "$zielroot$dir/";
  system("syncdir -delete $exclude:/var/spool/wwwoffle $quelle $ziel");
  $fehler = ($?>>8);
  if ( $fehler == 2 ) { die "###\n### Syncdir meldet Fehler!\n###\n"; }
}
system("date >> $zielroot/syncdate.txt");
SicherePartitionsTabelle();
print "Noch frei auf der MO:\n";
system("df $zielroot");
umountmo || die "Fehler beim Un-Mounten!\n";


######################################################################
### 4
######################################################################
TEIL4:

print "Bitte MO-Kopie der Festplatte  'Linux Teil 4'  einlegen!\n";
readkey;
mountmo || die "Fehler beim Mounten!\n";
foreach $dir ('archiv','bin','boot','etc','opt/bin','opt/clipart','opt/xsmp',
	      'sbin','root','lib','woall')
{
  $quelle = "/$dir/";
  $ziel   = "$zielroot$dir/";
  system("syncdir -delete $exclude $quelle $ziel");
  $fehler = ($?>>8);
  if ( $fehler == 2 ) { die "###\n### Syncdir meldet Fehler!\n###\n"; }
}
system("date >> $zielroot/syncdate.txt");
SicherePartitionsTabelle();
print "Noch frei auf der MO:\n";
system("df $zielroot");
umountmo || die "Fehler beim Un-Mounten!\n";




######################################################################
### Unterprogramme
######################################################################

sub SicherePartitionsTabelle
{
  system("fdisk -l 2>/dev/null > ${zielroot}fdisk.txt");
}

