Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jul 2005 23:38:09 -0400
From:      "Matt Emmerton" <matt@gsicomp.on.ca>
To:        "Drew Tomlinson" <drew@mykitchentable.net>, "FreeBSD Questions" <freebsd-questions@freebsd.org>
Subject:   Re: tar Syntax Help
Message-ID:  <004701c5836e$7e3aa160$1200a8c0@gsicomp.on.ca>
References:  <42CDF112.5070209@mykitchentable.net>

next in thread | previous in thread | raw e-mail | index | archive | help


> I'm trying to copy an entire file system while using an exclude file to
> avoid copying things such as /dev, /proc, etc.  I've read the man page
> and found the -X or --exclude-from tar option.  I've create a file
> called /exclude.list.  It contains lines such as:
>
> /exclude.list
> /dev
> /proc
>
> But I can't figure out how to form the correct command line.  I
> basically want to do this:
>
> tar -cvf - --exclude-from /exclude.list -C / . | tar xpf - -C .
>
> I've search the web and found examples that look similar to the above
> but this does not work for me.  tar attempts to copy /dev and I get all
> the associated errors.  I've tried other placements of either "-X", "X",
> and "--exclude from" on the command line various things happen from it
> just being ignored to tar thinking I want to create and archive named
> "-X", etc., to tar trying to add a file named "-X", etc. to the current
> archive.  I'm at a loss.
>
> I'm using 4.11 and trying to make a good backup before upgrading to
> 5.4.  Can anyone tell me the secret incantation to make this work?

-X only works with specific files, not entire directories.  You will need to
list every file in /dev or /proc that you want to exclude, which is somewhat
painful.

The backup strategy that I've used on production systems is to back up each
directory in a separate tar file.  Not only does this work quicker (since
you can fire off multiple tar sessions in parallel), but you can avoid
"special" directories like /dev and /proc, temporary mount points such as
/cdrom and /mnt, and other directories that don't need to backed up, such as
/tmp.  It's also quite handy when you've got large volumes of data (such as
in /home) and the complete system image won't fit on a single tape.

The general notion of my script is the following:

#!/bin/sh
for i in bin boot etc home modules root sbin usr var
do
  tar cvzf /backups/$i.`date +%Y%m%d`.tar.gz $i &
done
wait
echo "Backups completed!"

--
Matt Emmerton




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?004701c5836e$7e3aa160$1200a8c0>