#!/bin/sh

# $Id: tapeonechunk,v 1.15 2002-05-24 18:13:40+02 fd Exp $

# Dieses Skript liest eine Liste von Dateinamen und schreibt den
# Inhalt dieser Dateien als cpio-Archiv aufs DLT-Band.

# /mach/lbin/tapeinchunks füttert dieses Skript mit Dateilisten
# leichtverdaulichen Gesamtgewichts in der Größenordnung 100 MB,
# welche dann auch schnell in /tmp zusammengebaut werden können:

tmp=/tmp/tape$$.cpio; trap "exec rm -f $tmp" 0 1 2 3 15
exec >&2; set -a; TAPE=/dev/tape; PATH=/mach/bin:$PATH

case $1 in ?*) tmp=$1;;
*) umask 77; cpio --quiet -oBH crc > $tmp; umask 2
esac

# In file:/mloc/share/backup/dlt/ werden die Bandinhalte verwaltet:

newfile() { filenumber=none; eval `mt stat|tr -d ' '`
case $filenumber in none) echo "Wo ist mein Magnetband?"; sleep 1000;
return 1;; 0) dlt=`sed -n s/Date:.//p $TAPE 2>/dev/null`;
case $dlt in "") dlt=`date +%Y%m%d%H`
mkdir /mloc/share/backup/dlt/$dlt; mt rewind
echo "===================================
Host: `hostname`
Date: $dlt
Format: cpio -Hcrc -C65536 @ 100 MB
===================================" > $TAPE
esac
rm -f /mloc/share/backup/dlt/current
[ -d /mloc/share/backup/dlt/$dlt ] || mkdir /mloc/share/backup/dlt/$dlt
ln -s $dlt /mloc/share/backup/dlt/current
rm -f /mloc/share/backup/dlt/current/*
echo "===================
DLT-Band $dlt
==================="; newfile
esac
}

# Genug Platz soll es spätestens nach Bandwechsel geben:

until newfile && dd if=$tmp of=$TAPE bs=64k 2> /dev/null 
do
case $filenumber in [1-9]*) mt bsf; mt eof; mt eject;; esac
sleep 120
done

# Das tatsächliche Inhaltsverzeichnis wird schlussendlich archiviert:

list=/mloc/share/backup/dlt/current/$filenumber
umask 22; cpio --quiet -tv < $tmp > $list
echo "$filenumber:	`tail -1 $list`"
gzip -9 $list
