<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta name="generator" content="automaticly generated with debiandoc, wml, perl, tidy (www.w3.org)"> <title>Backups on CD - Details</title> <meta http-equiv="content-type" content="text/html"> <meta name="author" content="Holger Nassenstein (backups@tuxoncd.de)"> <meta name="publisher" content="Holger Nassenstein"> <meta name="copyright" content="Holger Nassenstein"> <meta name="description" content="This page describes how to generate multi-volume backups on CD-RW. You can download a set of shell scripts which make this very easy."> <meta name="Page-Topic" content="Multi-volume Backups On CD, Linux"> <meta name="KeyWords" content="Backups, CD, Linux, Unix, CD-RW, afio, tar, multi-volume backups, cdrecord, software, hardware, support, help, information, resources, manual, documentation, miniHOWTO, howto, Homepage, download"> <meta name="Classification" content="Computer, Software, Hardware, Safety, Backups"> <meta name="page-type" content="Computer, Software, Hardware, Safety, Backups"> <meta name="robots" content="index, follow"> <meta name="revisit-after" content="20 days"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="expires" content="0"> <meta name="audience" content="Alle, all"> <link rel="stylesheet" type="text/css" media="screen" href="css_graphics/screen.css"> <link rel="stylesheet" type="text/css" media="print" href="css_graphics/print.css"> </head> <body bgcolor="#ffffff" text="#000000" link="#ff0000" alink="#0000ff" vlink="#888888"> <table width="100%"> <colgroup span="3"> </colgroup> <tr> <td width="7%"> </td> <td> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> <table> <colgroup span="5"> </colgroup> <tr> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code function ro_imgNormal(imgName) { if (document.images) { document[imgName].src = eval(imgName + "_n.src"); self.status = ''; } } function ro_imgOver(imgName, descript) { if (document.images) { document[imgName].src = eval(imgName + "_o.src"); self.status = descript; } } // done hiding --> </script> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown1_n = new Image(); ro_img_unknown1_n.src = "css_graphics/previous.gif"; ro_img_unknown1_o = new Image(); ro_img_unknown1_o.src = "css_graphics/previous_hl.gif"; } // done hiding --> </script> <a href="ch-quick.html" onmouseover="ro_imgOver('ro_img_unknown1', 'previous'); return true" onmouseout="ro_imgNormal('ro_img_unknown1'); return true"><img name="ro_img_unknown1" src="css_graphics/previous.gif" alt="previous" width="86" height="27" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown2_n = new Image(); ro_img_unknown2_n.src = "css_graphics/abstract.gif"; ro_img_unknown2_o = new Image(); ro_img_unknown2_o.src = "css_graphics/abstract_hl.gif"; } // done hiding --> </script> <a href="index.html#abstract" onmouseover="ro_imgOver('ro_img_unknown2', 'Abstract'); return true" onmouseout="ro_imgNormal('ro_img_unknown2'); return true"><img name="ro_img_unknown2" src="css_graphics/abstract.gif" alt="Abstract" width="85" height="24" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown3_n = new Image(); ro_img_unknown3_n.src = "css_graphics/copyright_notice.gif"; ro_img_unknown3_o = new Image(); ro_img_unknown3_o.src = "css_graphics/copyright_notice_hl.gif"; } // done hiding --> </script> <a href="index.html#copyright" onmouseover="ro_imgOver('ro_img_unknown3', 'Copyright'); return true" onmouseout="ro_imgNormal('ro_img_unknown3'); return true"><img name="ro_img_unknown3" src="css_graphics/copyright_notice.gif" alt="Copyright" width="154" height="28" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown4_n = new Image(); ro_img_unknown4_n.src = "css_graphics/contents.gif"; ro_img_unknown4_o = new Image(); ro_img_unknown4_o.src = "css_graphics/contents_hl.gif"; } // done hiding --> </script> <a href="index.html#contents" onmouseover="ro_imgOver('ro_img_unknown4', 'Contents'); return true" onmouseout="ro_imgNormal('ro_img_unknown4'); return true"><img name="ro_img_unknown4" src="css_graphics/contents.gif" alt="Contents" width="87" height="25" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown5_n = new Image(); ro_img_unknown5_n.src = "css_graphics/next.gif"; ro_img_unknown5_o = new Image(); ro_img_unknown5_o.src = "css_graphics/next_hl.gif"; } // done hiding --> </script> <a href="ch-settings.html" onmouseover="ro_imgOver('ro_img_unknown5', 'next'); return true" onmouseout="ro_imgNormal('ro_img_unknown5'); return true"><img name="ro_img_unknown5" src="css_graphics/next.gif" alt="next" width="48" height="23" border="0"></a> </td> </tr> </table> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> <div class="center"> <table class="h1" border="0" cellspacing="0" cellpadding="5" width="90%"> <tr> <td class="h1"> Backups on CD <br> Chapter 3 Details</td> </tr> </table> </div> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> <h2><a name="s3.1">3.1 The Burning Process</a></h2> <p>I think the easiest way to learn about this is to have a look on the source.</p> <p>If you don't understand how it works please don't email me. Learn more about sh, tar, baseutils and cdrecord.</p> <p>Assume that tar is invoked as followed:</p> <table width="90%"> <tr> <td class="pre"> <pre> mkfifo fifo tar -cpvz -X $excludelist --file=fifo * & </pre> </td> </tr> </table> <br> <br> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> <h2><a name="s3.2">3.2 <code>toast.sh $params fifo</code></a></h2> <table width="90%"> <tr> <td class="pre"> <pre> if test "$1"; then # > 0? source $1 else exit 1 fi mkdir $toast_dir let count=tracks for i in {0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}; do dd of=$archive.$i bs=1k count=$(expr $tracksize \* 1024) wait if ! test -s "$archive.$i" && ! test -e "$toast_dir/$arch_name.*"; then # file existists but has length of null bytes: finished rm $archive.$i $ejectcmd > /dev/null 2>&1 break else if test $(expr $i % $count) -eq 0; then if test $(expr $i) -gt 0; then $ejectcmd > /dev/null 2>&1 echo -e "\a\nPlease change the disk. Insert volume $(expr $i / $count + 1) and press any key to continue." > /dev/tty read ans < /dev/tty fi let count=tracks if test -e "$toast_dir/$arch_name.*"; then # Last CD 'lost' one Track let count-=1 fi volid="-V $volume_name$(expr $i / $count + 1)" vol="-volset $(expr $i / $count + 1)" touch $toast_dir/"$volume_name$(expr $i / $count + 1)" blank="-blank=fast" multiinfo="" else volid="" vol="" blank="" let rec=1 while test $rec -ne 0; do multiinfo="-C $(cdrecord $dev -msinfo) -M $rawdevice" 2>> $logfile rec=$? done fi mv $archive.$i $toast_dir if test $(expr $(ls -s $toast_dir/$arch_name.$i | awk '{ print $1 }') / 1024) -lt $tracksize; then touch $toast_dir/$end_mark fi mkimg="mkisofs -r -J" tsize="$($mkimg -q -print-size $toast_dir 2>&1 | tail -n 1 | awk '{print $NF}')"s ( nice -n -10 $mkimg -L $vol $volid $multiinfo $toast_dir | cdrecord -v $dev $devdepend $blank -multi tsize=$tsize - && rm $toast_dir/* ) 2>> $logfile & fi done </pre> </td> </tr> </table> <br> <br> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> <table> <colgroup span="5"> </colgroup> <tr> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown6_n = new Image(); ro_img_unknown6_n.src = "css_graphics/previous.gif"; ro_img_unknown6_o = new Image(); ro_img_unknown6_o.src = "css_graphics/previous_hl.gif"; } // done hiding --> </script> <a href="ch-quick.html" onmouseover="ro_imgOver('ro_img_unknown6', 'previous'); return true" onmouseout="ro_imgNormal('ro_img_unknown6'); return true"><img name="ro_img_unknown6" src="css_graphics/previous.gif" alt="previous" width="86" height="27" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown7_n = new Image(); ro_img_unknown7_n.src = "css_graphics/abstract.gif"; ro_img_unknown7_o = new Image(); ro_img_unknown7_o.src = "css_graphics/abstract_hl.gif"; } // done hiding --> </script> <a href="index.html#abstract" onmouseover="ro_imgOver('ro_img_unknown7', 'Abstract'); return true" onmouseout="ro_imgNormal('ro_img_unknown7'); return true"><img name="ro_img_unknown7" src="css_graphics/abstract.gif" alt="Abstract" width="85" height="24" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown8_n = new Image(); ro_img_unknown8_n.src = "css_graphics/copyright_notice.gif"; ro_img_unknown8_o = new Image(); ro_img_unknown8_o.src = "css_graphics/copyright_notice_hl.gif"; } // done hiding --> </script> <a href="index.html#copyright" onmouseover="ro_imgOver('ro_img_unknown8', 'Copyright'); return true" onmouseout="ro_imgNormal('ro_img_unknown8'); return true"><img name="ro_img_unknown8" src="css_graphics/copyright_notice.gif" alt="Copyright" width="154" height="28" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown9_n = new Image(); ro_img_unknown9_n.src = "css_graphics/contents.gif"; ro_img_unknown9_o = new Image(); ro_img_unknown9_o.src = "css_graphics/contents_hl.gif"; } // done hiding --> </script> <a href="index.html#contents" onmouseover="ro_imgOver('ro_img_unknown9', 'Contents'); return true" onmouseout="ro_imgNormal('ro_img_unknown9'); return true"><img name="ro_img_unknown9" src="css_graphics/contents.gif" alt="Contents" width="87" height="25" border="0"></a> </td> <td> <script type="text/javascript" language="JavaScript"> <!-- Hiding the code if (document.images) { ro_img_unknown10_n = new Image(); ro_img_unknown10_n.src = "css_graphics/next.gif"; ro_img_unknown10_o = new Image(); ro_img_unknown10_o.src = "css_graphics/next_hl.gif"; } // done hiding --> </script> <a href="ch-settings.html" onmouseover="ro_imgOver('ro_img_unknown10', 'next'); return true" onmouseout="ro_imgNormal('ro_img_unknown10'); return true"><img name="ro_img_unknown10" src="css_graphics/next.gif" alt="next" width="48" height="23" border="0"></a> </td> </tr> </table> <img src="css_graphics/imgdot-1x1-red.gif" width="100%" height="1" alt="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> <br> Backups on CD <br> <table width="100%"> <tr> <td> <address> 17 April 2000 <br> Holger Nassenstein <code><a href="mailto:backups@tuxoncd.de">backups@tuxoncd.de</a></code> </address> </td> <td align="right"><a href="http://www.anybrowser.org/"><img src="css_graphics/biga.gif" border="0" alt="ANY Browser Campaign: http://www.anybrowser.org/" width="88" height="31"></a></td> </tr> </table> </td> <td width="7%"> </td> </tr> </table> </body> </html>