mirror of https://github.com/tLDP/LDP
Initial check in
This commit is contained in:
parent
83c21c9762
commit
e233e685ac
|
@ -0,0 +1,157 @@
|
|||
# a makefile for generating the Bare Metal Recovery HOW-TO
|
||||
|
||||
# Time-stamp: <2002-01-07 12:28:00 ccurley Makefile>
|
||||
|
||||
# All the scripts we incorporate into the HOWTO
|
||||
SCRIPTS = cooked/back.up.all cooked/back.up.all.ssh cooked/dev.hda cooked/get.tester cooked/make.dev.hda cooked/make.fdisk cooked/restore.all cooked/restore.all.ssh cooked/restore.metadata cooked/restore.tester cooked/save.metadata
|
||||
|
||||
ILLOS = tomsrtbt.eps
|
||||
|
||||
# The base name of the document
|
||||
DOCUMENT = Linux-Complete-Backup-and-Recovery-HOWTO
|
||||
|
||||
# The install directory. This will be mirrored to the web server
|
||||
INSTALL = /home/ccurley/public_html/public/$(DOCUMENT)
|
||||
|
||||
# Some style sheet selections. Note the escapes for the \ and the #.
|
||||
indexdsl = -d /usr/share/sgml/docbook/dsssl-stylesheets/ldp.dsl
|
||||
dslhtml = -d /usr/share/sgml/docbook/dsssl-stylesheets/ldp.dsl\\\#html
|
||||
dslprint = -d /usr/share/sgml/docbook/dsssl-stylesheets/ldp.dsl\\\#print
|
||||
|
||||
|
||||
cooked:
|
||||
mkdir cooked $(DOCUMENT) $(DOCUMENT).junk
|
||||
|
||||
clean:
|
||||
-rm -r $(DOCUMENT) $(DOCUMENT).[a-r]* $(DOCUMENT).[t-z]* $(DOCUMENT).smooth.html cooked *.eps ../images
|
||||
mkdir cooked $(DOCUMENT) $(DOCUMENT).junk
|
||||
|
||||
cooked/back.up.all: scripts/back.up.all
|
||||
./buildscript back.up.all
|
||||
|
||||
cooked/back.up.all.ssh: scripts/back.up.all.ssh
|
||||
./buildscript back.up.all.ssh
|
||||
|
||||
cooked/dev.hda: scripts/dev.hda
|
||||
./buildscript dev.hda
|
||||
|
||||
cooked/get.tester: scripts/get.tester
|
||||
./buildscript get.tester
|
||||
|
||||
cooked/make.dev.hda: scripts/make.dev.hda
|
||||
./buildscript make.dev.hda
|
||||
|
||||
cooked/make.fdisk: scripts/make.fdisk
|
||||
./buildscript make.fdisk
|
||||
|
||||
cooked/restore.all: scripts/restore.all
|
||||
./buildscript restore.all
|
||||
|
||||
cooked/restore.all.ssh: scripts/restore.all.ssh
|
||||
./buildscript restore.all.ssh
|
||||
|
||||
cooked/restore.metadata: scripts/restore.metadata
|
||||
./buildscript restore.metadata
|
||||
|
||||
cooked/restore.tester: scripts/restore.tester
|
||||
./buildscript restore.tester
|
||||
|
||||
cooked/save.metadata: scripts/save.metadata
|
||||
./buildscript save.metadata
|
||||
|
||||
scripts: $(SCRIPTS)
|
||||
|
||||
tomsrtbt.eps: tomsrtbt.png
|
||||
convert tomsrtbt.png tomsrtbt.eps
|
||||
|
||||
$(DOCUMENT)/index.html: $(DOCUMENT).sgml scripts
|
||||
rm -r $(DOCUMENT).junk
|
||||
mv $(DOCUMENT) $(DOCUMENT).junk
|
||||
mkdir $(DOCUMENT)
|
||||
cd $(DOCUMENT) ; /usr/bin/jade -t sgml -i html $(indexdsl) $(dslhtml) ../$(DOCUMENT).sgml
|
||||
# cp -rp *.png $(DOCUMENT)
|
||||
# cp -rp images $(DOCUMENT)
|
||||
|
||||
# this target makes is easier to type as a target name. OK, I'm lazy.
|
||||
chunky: $(DOCUMENT)/index.html
|
||||
|
||||
|
||||
$(DOCUMENT).smooth.html: $(DOCUMENT).sgml scripts
|
||||
/usr/bin/jade -V nochunks -t sgml -i html $(indexdsl) $(dslhtml) $(DOCUMENT).sgml > $(DOCUMENT).smooth.html
|
||||
cp -rp images ..
|
||||
smooth: $(DOCUMENT).smooth.html
|
||||
|
||||
html: chunky smooth
|
||||
|
||||
|
||||
$(DOCUMENT).rtf: $(DOCUMENT).sgml scripts
|
||||
jade -t rtf -V rtf-backend $(dslprint) $(DOCUMENT).sgml
|
||||
rtf: $(DOCUMENT).rtf
|
||||
|
||||
$(DOCUMENT).tex: $(DOCUMENT).sgml scripts
|
||||
jade -t tex -V tex-backend $(dslprint) $(DOCUMENT).sgml
|
||||
tex: $(DOCUMENT).tex
|
||||
|
||||
# It seems to be necessary to run this thrice in order to get the TOC
|
||||
# to work correctly. I don't understand it either.
|
||||
|
||||
$(DOCUMENT).dvi: $(DOCUMENT).tex scripts
|
||||
jadetex $(DOCUMENT).tex
|
||||
jadetex $(DOCUMENT).tex
|
||||
jadetex $(DOCUMENT).tex
|
||||
|
||||
dvi: $(DOCUMENT).dvi
|
||||
|
||||
|
||||
$(DOCUMENT).ps: $(DOCUMENT).dvi scripts
|
||||
dvips -f $(DOCUMENT).dvi -o $(DOCUMENT).ps # -The 1.5cm,3cm ?? We don't need this, but non-US might.
|
||||
|
||||
ps: $(DOCUMENT).ps
|
||||
|
||||
|
||||
# $(DOCUMENT).pdf: $(DOCUMENT).ps scripts
|
||||
# ps2pdf $(DOCUMENT).ps
|
||||
|
||||
# It seems to be necessary to run this thrice in order to get the TOC
|
||||
# to work correctly, and to get the TOC into to the bookmarks panel on
|
||||
# the left side of the acroread reader. I don't understand it either.
|
||||
|
||||
$(DOCUMENT).pdf: $(DOCUMENT).tex scripts
|
||||
pdfjadetex $(DOCUMENT).tex
|
||||
pdfjadetex $(DOCUMENT).tex
|
||||
pdfjadetex $(DOCUMENT).tex
|
||||
|
||||
pdf: $(DOCUMENT).pdf
|
||||
|
||||
|
||||
all: html rtf tex dvi ps pdf
|
||||
|
||||
|
||||
ship: all
|
||||
# The chunky version for on-line viewing
|
||||
-rm -r $(INSTALL) $(INSTALL)/../images
|
||||
cp -rp $(DOCUMENT) $(INSTALL)/
|
||||
cp -rp images $(INSTALL)/..
|
||||
|
||||
# PDF and PS versions for download
|
||||
cp -p $(DOCUMENT).pdf $(DOCUMENT).ps $(INSTALL)/
|
||||
bzip2 -9 $(INSTALL)/$(DOCUMENT).ps
|
||||
bzip2 -9 $(INSTALL)/$(DOCUMENT).pdf
|
||||
|
||||
# Smooth version for download
|
||||
tar -cvf $(DOCUMENT).smooth.html.tar $(DOCUMENT).smooth.html
|
||||
bzip2 -9 $(DOCUMENT).smooth.html.tar
|
||||
mv $(DOCUMENT).smooth.html.tar.bz2 $(INSTALL)/
|
||||
|
||||
# Chunky version for download
|
||||
tar -cvf $(DOCUMENT).chunky.html.tar $(DOCUMENT)
|
||||
bzip2 -9 $(DOCUMENT).chunky.html.tar
|
||||
mv $(DOCUMENT).chunky.html.tar.bz2 $(INSTALL)/
|
||||
|
||||
# The source for download
|
||||
cd .. ; tar -cvf $(DOCUMENT).tar $(DOCUMENT)/README `find $(DOCUMENT)/scripts ! -name "*~" ! -type d ` $(DOCUMENT)/$(DOCUMENT).sgml $(DOCUMENT)/buildscript $(DOCUMENT)/Makefile $(DOCUMENT)/images
|
||||
cd .. ; bzip2 -9 $(DOCUMENT).tar
|
||||
cd .. ; mv $(DOCUMENT).tar.bz2 $(INSTALL)/
|
||||
ls -l $(INSTALL)
|
||||
|
||||
install: ship
|
|
@ -0,0 +1,27 @@
|
|||
Time-stamp: <2002-01-20 15:38:33 ccurley README>
|
||||
|
||||
This directory has the SGML source and related files for the Linux
|
||||
Complete Backup and Recovery HOWTO. It should have everything you need
|
||||
by way of source to build the HOWTO in various formats such as pdf,
|
||||
HTML and TeX.
|
||||
|
||||
Run make with no arguments. That will build some directories for
|
||||
you. Then you can run "make all" to build the whole kazoo, or "make
|
||||
html" to build just the html files, etc. For a complete list of the
|
||||
available targets, see the file Makefile.
|
||||
|
||||
The original scripts are in the subdirectory scripts. They are exactly
|
||||
as I use them on my test environment, and with the small amount of
|
||||
editing described in the HOWTO they should be ready for you to
|
||||
use. They are here so that the SGML source for the HOWTO can
|
||||
incorporate them by inclusion, rather like C's "#include". Before the
|
||||
SGML translator code can use the scripts, some SGML cruft has to be
|
||||
added to each one. The script "buildscripts" does that. It is called
|
||||
from the makefile, so you shouldn't have to be concerned with it. The
|
||||
cooked scripts end up in the directory "cooked".
|
||||
|
||||
The target "clean" gets rid of intermediate files like the cooked
|
||||
scripts and all of the final production. Use it to be sure you have
|
||||
killed off any intermediate cruft.
|
||||
|
||||
Enjoy. Happy backing up.
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
# Time-stamp: <2001-11-18 09:34:08 ccurley buildscript>
|
||||
|
||||
script=$1
|
||||
|
||||
# If the actual script exists, and
|
||||
if [ -e scripts/$script ]; then
|
||||
|
||||
# echo "Target $script exists"
|
||||
|
||||
# if it is newer than the "cooked" version, or the cooked version
|
||||
# does not exist, we add in the SGML source, producing the cooked
|
||||
# version.
|
||||
|
||||
if [ scripts/$script -nt cooked/$script ] || [ ! -e cooked/$script ] ; then
|
||||
|
||||
echo "rebuilding $script"
|
||||
echo -n '<![ CDATA [' > cooked/$script
|
||||
cat scripts/$script >> cooked/$script
|
||||
echo ']]>' >> cooked/$script
|
||||
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,45 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Back up the entire system to another computer's drive. To make this
|
||||
# work, we need a convenient chunk of disk space on the remote computer we
|
||||
# can nfs mount as /mnt/save.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:19:35 ccurley back.up.all>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
save="/mnt/save"
|
||||
|
||||
# Make sure it's there
|
||||
umount $save
|
||||
mount $save
|
||||
|
||||
cd /
|
||||
|
||||
rm $save/tester.tar.old.gz
|
||||
mv $save/tester.tar.gz $save/tester.tar.old.gz
|
||||
|
||||
# save everything except /mnt, /proc, and nfs mounted directories.
|
||||
|
||||
time tar cf - / --exclude /mnt --exclude /proc --exclude $save\
|
||||
| gzip -c > $save/tester.tar.gz
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Back up the entire system to another computer's drive. To make this
|
||||
# work, we need a convenient chunk of disk space on the remote
|
||||
# computer. This version uses ssh to do its transfer, and compresses
|
||||
# using bz2. This means this script has to know more about the other
|
||||
# computer, which does not make for good modularization.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:19:48 ccurley back.up.all.ssh>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
save="/backs/tester"
|
||||
backup_server="charlesc"
|
||||
|
||||
# rotate the old backups. Do it all in one line to minimze authentication overhead.
|
||||
ssh $backup_server "rm $save/tester.tar.old.bz2; mv $save/tester.tar.bz2 \
|
||||
$save/tester.tar.old.bz2"
|
||||
|
||||
# save everything except /mnt, /proc, and squid directories.
|
||||
|
||||
time tar cf - / --exclude /mnt --exclude /proc --exclude /var/spool/squid\
|
||||
| ssh $backup_server "bzip2 -9 > $save/tester.tar.bz2"
|
|
@ -0,0 +1,33 @@
|
|||
n
|
||||
p
|
||||
1
|
||||
1
|
||||
29
|
||||
t
|
||||
1
|
||||
6
|
||||
a
|
||||
1
|
||||
n
|
||||
p
|
||||
2
|
||||
30
|
||||
44
|
||||
n
|
||||
e
|
||||
3
|
||||
45
|
||||
1023
|
||||
n
|
||||
l
|
||||
45
|
||||
944
|
||||
n
|
||||
l
|
||||
945
|
||||
1023
|
||||
t
|
||||
6
|
||||
82
|
||||
v
|
||||
w
|
|
@ -0,0 +1,74 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Back up another computer's drive to this system. To make this work, we
|
||||
# need a convenient chunk of disk space on this computer. This version
|
||||
# uses ssh to do its transfer, and compresses using bz2. This version was
|
||||
# developed so that the system to be backed up won't be authenticated to
|
||||
# log onto the backup computer. This script is intended to be used on a
|
||||
# firewall. You don't want the firewall to be authenticated to the backup
|
||||
# system in case the firewall is cracked.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:20:06 ccurley get.tester>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
# The host name of the computer to be backed up.
|
||||
|
||||
target=tester
|
||||
|
||||
echo Backing up $target
|
||||
|
||||
echo Aging the ZIP disk backups.
|
||||
|
||||
rm -r $target.oldzip
|
||||
|
||||
mv $target.zip $target.oldzip
|
||||
|
||||
ssh $target "modprobe ppa ; mount -r /mnt/zip"
|
||||
|
||||
echo Copying the ZIP disk.
|
||||
|
||||
# -r for recursive copy, -p to preserve times and permissions, -q for
|
||||
# -quiet: no progress meter.
|
||||
|
||||
scp -qpr $target:/mnt/zip $target.zip
|
||||
|
||||
echo Testing the results.
|
||||
find . -iname "*.gz" | xargs gunzip -t
|
||||
|
||||
ssh $target "eject $zip"
|
||||
|
||||
|
||||
echo Aging the archives
|
||||
|
||||
rm $target.tar.old.bz2
|
||||
|
||||
mv $target.tar.bz2 $target.tar.old.bz2
|
||||
|
||||
|
||||
echo Backing up $target to the backup server.
|
||||
|
||||
ssh $target tar -cf - / --exclude /mnt --exclude /proc --exclude /var/spool/squid\
|
||||
| bzip2 -9 | cat > $target.tar.bz2
|
||||
|
||||
echo Testing the results.
|
||||
find . -iname "*.bz2" | xargs bunzip2 -t
|
|
@ -0,0 +1,62 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to restore the partition data of a hard drive and format
|
||||
# the partitions. Created at bare metal backup time by the Perl script
|
||||
# make.fdisk.
|
||||
|
||||
# Copyright 2001 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
dd if=/dev/zero of=/dev/hda bs=512 count=2
|
||||
|
||||
sync
|
||||
|
||||
fdisk /dev/hda < dev.hda
|
||||
|
||||
sync
|
||||
|
||||
echo
|
||||
echo formatting and checking /dev/hda1
|
||||
mkdosfs -c /dev/hda1
|
||||
# restore FAT boot sector.
|
||||
dd if=dev.hda1 of=/dev/hda1 bs=512 count=1
|
||||
|
||||
echo
|
||||
echo formatting and checking /dev/hda2
|
||||
badblocks -c 128 -o /tmp/dev.hda2 /dev/hda2
|
||||
mke2fs -L /boot -l /tmp/dev.hda2 /dev/hda2
|
||||
|
||||
echo
|
||||
echo formatting and checking /dev/hda5
|
||||
badblocks -c 128 -o /tmp/dev.hda5 /dev/hda5
|
||||
mke2fs -L / -l /tmp/dev.hda5 /dev/hda5
|
||||
|
||||
mkswap -c /dev/hda6
|
||||
|
||||
|
||||
|
||||
# / is the mountpoint for /dev/hda5.
|
||||
mkdir /target/
|
||||
mount /dev/hda5 /target/
|
||||
|
||||
# /boot is the mountpoint for /dev/hda2.
|
||||
mkdir /target/boot
|
||||
mount /dev/hda2 /target/boot
|
|
@ -0,0 +1,419 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# A perl script to create a script and input file for fdisk to
|
||||
# re-create the partitions on the hard disk, and format the Linux and
|
||||
# Linux swap partitions. The first parameter is the fully qualified
|
||||
# path of the device of the hard disk, e.g. /dev/hda. The two
|
||||
# resulting files are the script make.dev.x and the data file dev.x
|
||||
# (where x is the hard drive described, e.g. hda, sdc). make.dev.x is
|
||||
# run at restore time to rebuild hard drive x, prior to running
|
||||
# restore.metadata. dev.x is the input file for fdisk.
|
||||
|
||||
# Time-stamp: <2001-12-13 15:41:24 ccurley make.fdisk>
|
||||
|
||||
# Copyright 2001 through the last date of modification Charles Curley
|
||||
# except for the subroutine cut2fmt.
|
||||
|
||||
# cut2fmt Copyright (c) 1998 Tom Christiansen, Nathan Torkington and
|
||||
# O'Reilly & Associates, Inc. Permission is granted to use this code
|
||||
# freely EXCEPT for book publication. You may use this code for book
|
||||
# publication only with the explicit permission of O'Reilly &
|
||||
# Associates, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# In addition, as a special exception, Tom Christiansen, Nathan
|
||||
# Torkington and O'Reilly & Associates, Inc. give permission to use
|
||||
# the code of this program with the subroutine cut2fmt (or with
|
||||
# modified versions of the subroutine cut2fmt that use the same
|
||||
# license as the subroutine cut2fmt), and distribute linked
|
||||
# combinations including the two. You must obey the GNU General
|
||||
# Public License in all respects for all of the code used other than
|
||||
# the subroutine cut2fmt. If you modify this file, you may extend
|
||||
# this exception to your version of the file, but you are not
|
||||
# obligated to do so. If you do not wish to do so, delete this
|
||||
# exception statement and the subroutine cut2fmt from your version.
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# Changes:
|
||||
|
||||
# 2001 11 25: Changed the way mke2fs gets its bad block
|
||||
# list. badblocks does not guess at the block size, so you have to get
|
||||
# it (from dumpe2fs) and feed it to badblocks. It is simpler to just
|
||||
# have mke2fs call badblocks, but you do loose the ability to have a
|
||||
# writing test easily. -- C^2
|
||||
|
||||
# 2001 11 25: Changed the regex that extracts partition labels from
|
||||
# the mount command. This change does not affect the results at all,
|
||||
# it just makes it possible to use Emacs' perl mode to indent
|
||||
# correctly. I just escaped the left bracket in the regex. -- C^2
|
||||
|
||||
# Discussion:
|
||||
|
||||
# fdisk will spit out a file of the form below if you run it as "fdisk
|
||||
# -l".
|
||||
|
||||
# root@tester ~/bin $ fdisk -l /dev/hda
|
||||
|
||||
# Disk /dev/hda: 64 heads, 63 sectors, 1023 cylinders
|
||||
# Units = cylinders of 4032 * 512 bytes
|
||||
|
||||
# Device Boot Start End Blocks Id System
|
||||
# /dev/hda1 1 9 18112+ 83 Linux
|
||||
# /dev/hda2 10 1023 2044224 5 Extended
|
||||
# /dev/hda5 10 368 723712+ 83 Linux
|
||||
# /dev/hda6 369 727 723712+ 83 Linux
|
||||
# /dev/hda7 728 858 264064+ 83 Linux
|
||||
# /dev/hda8 859 989 264064+ 83 Linux
|
||||
# /dev/hda9 990 1022 66496+ 82 Linux swap
|
||||
|
||||
# What fdisk does not do is provide output suitable for later
|
||||
# importing into fdisk, a la sfdisk. This script parses the output
|
||||
# from fdisk and creates an input file for fdisk. Use the input file
|
||||
# like so:
|
||||
|
||||
# fdisk /dev/hdx < dev.hdx
|
||||
|
||||
# For the bare metal restore package, this script also builds a script
|
||||
# that will execute the above command so you can run it from your zip
|
||||
# disk. Because the bare metal restore scripts all are in /root/bin,
|
||||
# the data file and script created by this script are also placed
|
||||
# there. The same script also creates appropriate Linux file systems,
|
||||
# either ext2fs, or Linux swap. There is limited support for FAT12 and
|
||||
# FAT16. There is no support right now (hint, hint) for FAT32. For
|
||||
# anything else, you're on your own.
|
||||
|
||||
# Note for FAT32: According to the MS KB, there are more than one
|
||||
# reserved sectors for FAT32, usually 32, but it can vary. Do a search
|
||||
# in M$'s KB for "boot sector" or BPB for the gory details. For more
|
||||
# info than you really need on how boot sectors are used, see
|
||||
# http://support.microsoft.com/support/kb/articles/Q140/4/18.asp
|
||||
|
||||
# You can also edit dev.x to change the sizes of partitions. Don't
|
||||
# forget, if you change the size of a FAT partition across the 32MB
|
||||
# boundary, you need to change the type as well! Run "fdisk /dev/hda"
|
||||
# or some such, then the l command to see the available partition
|
||||
# types. Then go ahead and edit dev.x appropriately. Also, when moving
|
||||
# partition boundarys with hand edits, make sure you move both logical
|
||||
# and extended partition boundaries appropriately.
|
||||
|
||||
# Bad block checking right now is a quick read of the partition. A
|
||||
# writing check is also possible but more difficult. You have to run
|
||||
# badblocks as a separate command, and pass the bad block list to
|
||||
# mke2fs in a file (in /tmp, which is a ram disk). You also have to
|
||||
# know how large the blocks are, which you learn by running
|
||||
# dumpe2fs. It gets messy and I haven't done it yet. You probably
|
||||
# don't need it for a new hard drive, but if you have had a hard drive
|
||||
# crash on you and you are reusing it (while you are waiting for its
|
||||
# replacement to come in, I presume), then I highly recommend it. Let
|
||||
# me know how you do it.
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
|
||||
# cut2fmt figures out the format string for the unpack function we use
|
||||
# to slice and dice the output from fdisk. From Christiansen and
|
||||
# Torkington, Perl Cookbook 5.
|
||||
|
||||
sub cut2fmt {
|
||||
my (@positions) = @_;
|
||||
my $template = '';
|
||||
my $lastpos = 1;
|
||||
|
||||
foreach $place (@positions) {
|
||||
$template .= "A" . ($place - $lastpos) . " ";
|
||||
$lastpos = $place;
|
||||
}
|
||||
|
||||
$template .= "A*";
|
||||
return $template;
|
||||
}
|
||||
|
||||
# Provide a default device.
|
||||
|
||||
if ( $ARGV[0] == "" ) {
|
||||
$device="/dev/hda";
|
||||
} else {
|
||||
$device=$ARGV[0];
|
||||
}
|
||||
|
||||
# print "Device is $device.\n";
|
||||
|
||||
# prepare format string.
|
||||
$fmt = cut2fmt (11, 19, 24, 34, 45, 49);
|
||||
# print "Format string is $fmt.\n\n";
|
||||
|
||||
# define fields in the array @_.
|
||||
$dev = 0;
|
||||
$bootable = 1;
|
||||
$firstcyl = 2;
|
||||
$lastcyl = 3;
|
||||
$parttype = 5;
|
||||
$partstring = 6;
|
||||
|
||||
$target = "\/target";
|
||||
|
||||
$outputfilename = $device;
|
||||
$outputfilename =~ s/\//./g;
|
||||
$outputfilename = substr ($outputfilename, 1, 100);
|
||||
|
||||
$outputfilepath = "\/root\/bin\/";
|
||||
|
||||
|
||||
# Make a hash of the labels.
|
||||
$mpid = open (MOUNT, "mount -l |") or die "Couldn't fork: $!\n";
|
||||
while (<MOUNT>) {
|
||||
if ($_ =~ /^$device/i) { # is this a line with a partition in it?
|
||||
# print $_; # print it just for grins
|
||||
split;
|
||||
if ($_[6] ne "") { # only process if there actually is a label
|
||||
$_[6] =~ s/[\[\]]//g; # strike [ and ].
|
||||
$labels{$_[0]} = $_[6];
|
||||
# print "The label of file device $_[0] is $labels{$_[0]}.\n";
|
||||
}
|
||||
|
||||
|
||||
# We only mount if it's ext2fs and read and write.
|
||||
|
||||
if ($_[4] eq "ext2" and $_[5] eq "(rw)" ) {
|
||||
$mountpoints{$_[2]} = $_[0];
|
||||
# print "$_[2] is the mountpoint for $mountpoints{$_[2]}.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
close (MOUNT);
|
||||
|
||||
|
||||
$fpid = open (FDISK, "fdisk -l $device |") or die "Couldn't fork: $!\n";
|
||||
|
||||
open (OUTPUT, "> $outputfilepath${outputfilename}")
|
||||
or die "Couldn't open output file $outputfilepath${outputfilename}.\n";
|
||||
|
||||
while (<FDISK>) {
|
||||
if ($_ =~ /^$device/i) { # is this a line with a partition in it?
|
||||
# print $_; # print it just for grins
|
||||
chop; # kill trailing \r
|
||||
@_ = unpack ($fmt, $_);
|
||||
|
||||
# now strip white spaces from cylinder numbers
|
||||
@_[$firstcyl] =~ s/[ \t]+//;
|
||||
@_[$lastcyl] =~ s/[ \t]+//;
|
||||
@_[$parttype] =~ s/[ \t]+//;
|
||||
|
||||
$partnumber = substr(@_[$dev], 8, 10); # get partition number for this line
|
||||
# just for grins
|
||||
# print " $partnumber, @_[$firstcyl], @_[$lastcyl], @_[$partstring]\n";
|
||||
|
||||
# Here we start creating the input to recreate the partition
|
||||
# this line represents.
|
||||
|
||||
print OUTPUT "n\n";
|
||||
if ($partnumber < 5) {
|
||||
# primary Linux partition
|
||||
if (@_[$parttype] == 83) {
|
||||
print OUTPUT "p\n$partnumber\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) { # in case it's all on one cylinder
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
|
||||
if ($labels{@_[$dev]}) { # do we have a label?
|
||||
# no bad block check
|
||||
# $format .= "mke2fs @_[$dev] -L $labels{@_[$dev]}\n";
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mke2fs -c -L $labels{@_[$dev]} @_[$dev]\n\n";
|
||||
} else {
|
||||
# $format .= "mke2fs @_[$dev]\n"; # no bad block check
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mke2fs -c @_[$dev]\n\n";
|
||||
}
|
||||
|
||||
# extended partition
|
||||
} elsif (@_[$parttype] == 5) {
|
||||
print OUTPUT "e\n$partnumber\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
|
||||
# primary Linux swap partition
|
||||
} elsif (@_[$parttype] == 82) {
|
||||
print OUTPUT "p\n$partnumber\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n82\n";
|
||||
$format .= "mkswap -c @_[$dev]\n\n";
|
||||
|
||||
# primary mess-dos partition. We don't handle FAT32,
|
||||
# which requires a command line switch for mkdosfs.
|
||||
} elsif ( @_[$parttype] == 1 || @_[$parttype] == 4 || @_[$parttype] == 6 ) {
|
||||
print ("dd if=@_[$dev] of=$outputfilepath$outputfilename$partnumber");
|
||||
print (" bs=512 count=1\n");
|
||||
system ("dd if=@_[$dev] of=$outputfilepath$outputfilename$partnumber bs=512 count=1");
|
||||
print OUTPUT "p\n$partnumber\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) { # in case it's all on one cylinder
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n@_[$parttype]\n";
|
||||
# $format .= "mkdosfs @_[$dev]\n"; # no bad block check
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mkdosfs -c @_[$dev]\n";
|
||||
$format .= "# restore FAT boot sector.\n";
|
||||
$format .= "dd if=$outputfilename$partnumber of=@_[$dev] bs=512 count=1\n\n";
|
||||
|
||||
} else {
|
||||
# anything else partition
|
||||
print OUTPUT "p\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n@_[$parttype]\n";
|
||||
}
|
||||
|
||||
} else {
|
||||
# logical Linux partition
|
||||
if (@_[$parttype] == 83) {
|
||||
print OUTPUT "l\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
|
||||
if ($labels{@_[$dev]}) { # do we have a label?
|
||||
# no bad block check
|
||||
# $format .= "mke2fs @_[$dev] -L $labels{@_[$dev]}\n";
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mke2fs -c -L $labels{@_[$dev]} @_[$dev]\n\n";
|
||||
} else {
|
||||
# $format .= "mke2fs @_[$dev]\n"; # no bad block check
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mke2fs -c @_[$dev]\n\n";
|
||||
}
|
||||
|
||||
# logical Linux swap partition
|
||||
} elsif (@_[$parttype] == 82 ) {
|
||||
print OUTPUT "l\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n82\n";
|
||||
$format .= "mkswap -c @_[$dev]\n\n";
|
||||
|
||||
# primary mess-dos partition. We don't handle FAT32,
|
||||
# which requires a command line switch for mkdosfs.
|
||||
} elsif ( @_[$parttype] == 1 || @_[$parttype] == 4 || @_[$parttype] == 6 ) {
|
||||
print ("dd if=@_[$dev] of=$outputfilepath$outputfilename$partnumber");
|
||||
print (" bs=512 count=1\n");
|
||||
system ("dd if=@_[$dev] of=$outputfilepath$outputfilename$partnumber bs=512 count=1");
|
||||
print OUTPUT "p\n$partnumber\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) { # in case it's all on one cylinder
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n@_[$parttype]\n";
|
||||
# $format .= "mkdosfs @_[$dev]\n"; # no bad block check
|
||||
$format .= "echo\necho formatting and checking @_[$dev]\n";
|
||||
$format .= "mkdosfs -c @_[$dev]\n";
|
||||
$format .= "# restore FAT boot sector.\n";
|
||||
$format .= "dd if=$outputfilename$partnumber of=@_[$dev] bs=512 count=1\n\n";
|
||||
|
||||
} else {
|
||||
# anything else partition
|
||||
print OUTPUT "l\n@_[$firstcyl]\n";
|
||||
if (@_[$firstcyl] ne @_[$lastcyl]) {
|
||||
print OUTPUT "@_[$lastcyl]\n";
|
||||
}
|
||||
print OUTPUT "t\n$partnumber\n@_[$parttype]\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# handle bootable partitions
|
||||
if (@_[$bootable] =~ /\*/) {
|
||||
print OUTPUT "a\n$partnumber\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print OUTPUT "v\nw\n";
|
||||
|
||||
close (OUTPUT);
|
||||
close (FDISK);
|
||||
|
||||
|
||||
open (OUTPUT, "> ${outputfilepath}make.$outputfilename")
|
||||
or die "Couldn't open output file ${outputfilepath}make.$outputfilename.\n";
|
||||
|
||||
print OUTPUT <<FINIS;
|
||||
#! /bin/sh
|
||||
|
||||
# A script to restore the partition data of a hard drive and format
|
||||
# the partitions. Created at bare metal backup time by the Perl script
|
||||
# make.fdisk.
|
||||
|
||||
# Copyright 2001 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
FINIS
|
||||
|
||||
# Clean the old partition table out.
|
||||
print OUTPUT "dd if=/dev/zero of=$device bs=512 count=2\n\nsync\n\n";
|
||||
|
||||
print OUTPUT "fdisk $device \< $outputfilename\n\nsync\n\n";
|
||||
print OUTPUT $format;
|
||||
|
||||
# Now build the mount points on the root and other partitions.
|
||||
|
||||
# We have a hash of mount points and devices in %mountpoints. However,
|
||||
# we have to process them such that directories are built on the
|
||||
# appropriate target partition. E.g. where /usr/local is on its own
|
||||
# partition, we have to mount /usr before we build /usr/local. We can
|
||||
# ensure this by sorting them. Shorter mount point paths will be built
|
||||
# first. We can't sort a hash directly, so we use an array.
|
||||
|
||||
# We build commands to create the appropriate mount points and then
|
||||
# mount the partitions to the mount points. This is in preparation for
|
||||
# untarring the contents of the ZIP disk, done in restore.metadata.
|
||||
|
||||
foreach $point ( sort keys %mountpoints) {
|
||||
print OUTPUT "\n# $point is the mountpoint for $mountpoints{$point}.\n";
|
||||
print OUTPUT "mkdir $target$point\n";
|
||||
print OUTPUT "mount $mountpoints{$point} $target$point\n";
|
||||
}
|
||||
|
||||
|
||||
close (OUTPUT);
|
||||
|
||||
# These scripts are dangerous & should only be visible to root.
|
||||
|
||||
chmod 0700, "${outputfilepath}make.$outputfilename";
|
||||
chmod 0600, "${outputfilepath}$outputfilename";
|
|
@ -0,0 +1,38 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to restore all of the data from an nfs mount. This is our final
|
||||
# stage restore.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:21:22 ccurley restore.all>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
export save="/mnt/save"
|
||||
|
||||
mount $save
|
||||
|
||||
cd /
|
||||
gunzip -dc $save/tester.tar.gz | tar -xpkf -
|
||||
|
||||
rm /var/run/*.pid
|
||||
|
||||
lilo
|
|
@ -0,0 +1,38 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to restore all of the data using ssh and bunzip2. This is
|
||||
# our final stage restore.
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:21:33 ccurley restore.all.ssh>
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
save="/backs/tester/"
|
||||
backup_server="charlesc"
|
||||
|
||||
cd /
|
||||
|
||||
ssh $backup_server "cat $save/tester.tar.bz2" | bunzip2 | tar -xpkf -
|
||||
|
||||
rm /var/run/*.pid
|
||||
|
||||
lilo
|
|
@ -0,0 +1,68 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to restore the meta-data from the ZIP disk. This runs under
|
||||
# tomsrtbt only after partitions have been rebuilt, file systems made,
|
||||
# and mounted. It also assumes the ZIP disk has already been
|
||||
# mounted. Mounting the ZIP disk read only is probably a good idea.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:21:51 ccurley restore.metadata>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
zip="/mnt";
|
||||
target="/target";
|
||||
|
||||
# warm fuzzies for the user.
|
||||
ls -lt $zip
|
||||
|
||||
cd $target
|
||||
|
||||
# restore the archived metadata files.
|
||||
for archive in $( ls $zip/*.gz ); do
|
||||
echo $archive
|
||||
ls -al $archive
|
||||
gzip -dc $archive | tar -xf -
|
||||
done
|
||||
|
||||
mkdir $target/proc
|
||||
chmod a-w $target/proc
|
||||
|
||||
# build a mount point directory so we'll have it on reboot.
|
||||
mkdir $target/mnt
|
||||
|
||||
# Build the mount points for our second stage restoration and other
|
||||
# things.
|
||||
mkdir $target/mnt/save
|
||||
mkdir $target/mnt/zip
|
||||
mkdir $target/mnt/cdrom
|
||||
mkdir $target/mnt/floppy
|
||||
mkdir $target/mnt/imports
|
||||
|
||||
# Restore the scripts we used to create the ZIP disk and the ones we will
|
||||
# use to restore it. These should be the latest & greatest in case we had
|
||||
# to do any editing during 1st stage restore.
|
||||
cp -p $zip/root.bin/* $target/root/bin
|
||||
|
||||
# Now install the boot sector.
|
||||
chroot $target /sbin/lilo -C /etc/lilo.conf
|
||||
|
||||
df -m
|
|
@ -0,0 +1,35 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to restore all of the data to tester via ssh. This is our final
|
||||
# stage restore.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:22:01 ccurley restore.tester>
|
||||
|
||||
# Copyright 2000 through the last date of modification Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
# The host name of the computer to be restored.
|
||||
|
||||
target=tester
|
||||
|
||||
bunzip2 -dc $target.tar.bz2 | ssh $target "cd / ; tar -xpkf - "
|
||||
|
||||
ssh $target lilo
|
112
LDP/howto/docbook/Linux-Complete-Backup-and-Recovery-HOWTO/scripts/save.metadata
Executable file
112
LDP/howto/docbook/Linux-Complete-Backup-and-Recovery-HOWTO/scripts/save.metadata
Executable file
|
@ -0,0 +1,112 @@
|
|||
#! /bin/sh
|
||||
|
||||
# A script to save certain meta-data off to the boot partition. Useful for
|
||||
# restoration.
|
||||
|
||||
# Time-stamp: <2001-11-19 09:18:52 ccurley save.metadata>
|
||||
|
||||
# Copyright 2000 through the last date of modification, Charles Curley.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
# You can also contact the Free Software Foundation at http://www.fsf.org/
|
||||
|
||||
# For more information contact the author, Charles Curley, at
|
||||
# http://w3.trib.com/~ccurley/.
|
||||
|
||||
export zip="/mnt/zip";
|
||||
# export save="/mnt/save";
|
||||
|
||||
echo "saving hard drive info"
|
||||
make.fdisk /dev/hda
|
||||
|
||||
# back up RPM metadata
|
||||
|
||||
echo "Verifying RPMs."
|
||||
|
||||
rpm -Va > /etc/rpmVa.txt
|
||||
|
||||
echo "Finished verifying RPMs; now mounting the ZIP drive."
|
||||
|
||||
umount $zip
|
||||
|
||||
modprobe ppa
|
||||
|
||||
mount /dev/sda1
|
||||
|
||||
# clean it all out
|
||||
rm -r $zip/*
|
||||
|
||||
echo "Building the ZIP drive backups."
|
||||
|
||||
mkdir $zip/lost+found
|
||||
|
||||
fdisk -l /dev/hda > $zip/fdisk.hda
|
||||
|
||||
ls -al /mnt > $zip/ls.mnt.txt
|
||||
ls -al / > $zip/ls.root.txt
|
||||
|
||||
mkdir $zip/etc;
|
||||
cp -p /etc/* $zip/etc
|
||||
|
||||
cd /
|
||||
|
||||
# These appear to be required so we can restore later on.
|
||||
|
||||
tar cf - boot | gzip -c > $zip/boot.tar.gz
|
||||
tar cf - root | gzip -c > $zip/root.tar.gz
|
||||
tar cf - etc | gzip -c > $zip/etc.tar.gz
|
||||
tar cf - lib | gzip -c > $zip/lib.tar.gz
|
||||
|
||||
tar cf - usr/sbin | gzip -c > $zip/usr.sbin.tar.gz
|
||||
tar cf - usr/bin | gzip -c > $zip/usr.bin.tar.gz
|
||||
tar cf - sbin | gzip -c > $zip/sbin.tar.gz
|
||||
tar cf - bin | gzip -c > $zip/bin.tar.gz
|
||||
tar cf - dev | gzip -c > $zip/dev.tar.gz
|
||||
|
||||
# Now optional saves.
|
||||
|
||||
# arkeia specific:
|
||||
tar cf - usr/knox | gzip -c > $zip/arkeia.tar.gz
|
||||
|
||||
# save these so we can use ssh for restore. *crack* for RH 7.0 login
|
||||
# authentication.
|
||||
tar cf - usr/lib/*crack* usr/lib/libz* usr/lib/libssl* usr/lib/libcrypto*\
|
||||
| gzip -c > $zip/usr.lib.tar.gz
|
||||
|
||||
|
||||
# save the scripts we used to create the zip disk and the ones we will
|
||||
# use to restore it.
|
||||
mkdir $zip/root.bin
|
||||
cp -p /root/bin/* $zip/root.bin
|
||||
rm $zip/root.bin/*~ $zip/root.bin/#*#
|
||||
|
||||
echo "Test our results."
|
||||
find $zip -iname "*.gz" | xargs gzip -t
|
||||
|
||||
# Not a normal part of the process: we duplicate the ZIP disk onto an
|
||||
# NFS mount elsewhere.
|
||||
|
||||
# echo "Backing the ZIP drive to the NFS mount."
|
||||
|
||||
# umount $save
|
||||
# mount $save
|
||||
|
||||
# rm -r $save/zip
|
||||
# mkdir $save/zip
|
||||
# cp -pr $zip $save
|
||||
|
||||
df -m
|
||||
eject $zip
|
Loading…
Reference in New Issue