#!/usr/bin/env perl

sub debug { 1 }

sub dryrun { 1 }

sub exe {

print "@_\n" if debug;

system("@_";) if not dryrun;

}



my $NEW = "/mnt";

my $ROOTDEV = "/dev/hdb9";

my @EXCL = qw"/lost+found

/tmp

/dev

/sys

/proc

/initrd

/floppy

/cdrom

/mnt";

# Внимание! Порядок имеет значение.

my @MOUNTS = qw"/dev/hdb2 /dev/hdb7 /dev/hdb8 /dev/hdb6";

my %MOUNTS = ();

{

local @_ = @MOUNTS;

%MOUNTS = map { shift @_ => $_ } qw"boot usr home usr/local"

}

my @DIRS = glob "/*";



exe "mkdir -p $NEW";

exe "mount $ROOTDEV $NEW";

for (@DIRS) {

local *debug = sub { 0 };

if (-d) {

exe "mkdir -p $NEW$_";

exe "chown --reference=$_ $NEW$_";

exe "chmod --reference=$_ $NEW$_";

}

}

for (@MOUNTS) {

exe "mount $_ $NEW/$MOUNTS{$_}";

}



@DIRS = grep { "@EXCL" !~ /$_/ } @DIRS;

for (@DIRS) {

# local *debug = sub { 0 };

if (-d) {

exe "cp -dR $_/* $NEW$_";

}

if (-f) {

exe "cp -d $_ $NEW";

}

}



for (@DIRS) {

# local *debug = sub { 0 };

if (-d) {

exe "diff -qr $_ $NEW$_";

}

}