public class DVDBackup extends AbstractFileSystemBackup
Diese Klasse ist für die Sicherung von Containern auf einer DVD verantwortlich. Die Sicherung funktioniert derzeit nur auf Linux-Systemen. Für die vorbereitende Erstellung der zu brennenden Verzeichnisstruktur wird das FileSystemBackup verwendet.
| Modifier and Type | Field and Description |
|---|---|
private java.lang.String[] |
currentScsiBus |
private java.lang.String[] |
currentSerialID |
private int |
EXITCODE_LAST_EXEC |
private static int |
MAX_MEDIUM_SIZE_KB |
private static java.lang.String |
MEDIAPATH_POSTFIX |
protected static java.lang.String |
MEDIAPATH_PREFIX |
private static java.lang.String |
PROP_BACKUP_DIR |
private static java.lang.String |
PROP_BACKUP_SERIALS |
private static java.lang.String |
SCSIUSBDirPath |
private java.lang.String[] |
serialNumbers |
backupBasePath, currentBackupPath, currentSpaceOccupiedByContainerFiles, currentSpaceOccupiedByZipfiles, logger, MAX_CONTAINERS_PER_DIRPROP_BACKUP_CONTAINER_PER_ZIP, PROP_BACKUP_MEDIUMSIZE| Constructor and Description |
|---|
DVDBackup() |
| Modifier and Type | Method and Description |
|---|---|
private boolean |
amIRunningOnLinux() |
void |
closeMediumAfterBackup(int mediumID,
java.io.File indexFile)
Sobald auf einem Medium keine Kapazität für weitere Container mehr vorhanden ist, wird der aktuelle Backup-Lauf auf diesem Medium mit dieser Methode abgeschlossen.
|
boolean |
containsData(java.lang.String serialID)
Ermittelt, ob es in dem angegebenen Verzeichnis Daten gibt.
|
private boolean |
containsErrorMessage(java.lang.String input)
Prüft, ob in input das Wort ‘Fehler’ oder ‘Error’ vorkommt, unabhängig von Groß/Kleinschreibung.
|
private java.lang.String |
exec(java.lang.String command)
Fuehrt ein Kommando aus und liefert den Output als String zurueck.
|
private void |
findEmptyDVD(int mediumID)
Sucht nach leeren Laufwerk (leer = keine DVD oder leere DVD!)
|
private void |
findReadableDVD(int mediumID) |
java.lang.String |
getBackupPath(int mediumID) |
private java.lang.String |
getDirContent(java.lang.String serialId) |
(package private) java.lang.String |
getDVDMediaPath(java.lang.String serialId) |
(package private) java.lang.String |
getScsiBus(java.lang.String serialID)
Da der SCSI-Bus eines USB-Devices vom Betriebssystem dynamisch vergeben wird (d.h. sich beim Ein-/Ausschalten des Geräts aendern kann), muss die Beziehung Hardware <—> SCSI-Bus regelmaessig nachgeschlagen werden.
|
boolean |
hasMediumCapacity(int mediumID,
long containerSize,
int mediumIndexSize)
Liefert true, falls die noch zur Verfügung stehende Kapazität des angegebenen Mediums ausreicht, um einen Container der Größe
fileSize und den Medienindex mit der momentanen Größe |
void |
initialize(java.util.Properties props)
Diese Methode dient dem Initialisieren des BackupModuls.
|
private boolean |
isReadable(java.lang.String serialId) |
void |
openMediumBeforeBackup(int mediumID,
java.lang.String backupRunID)
Diese Methode wird aufgerufen, bevor der erste Container auf dem Medium gesichert wird.
|
java.io.InputStream |
restoreContainer(int mediumID,
java.lang.String contFileName)
Mit dieser Methode wird ein
InputStream der Containerdaten des Containers mit Namen contFile auf dem Medium mediumID erzeugt. |
java.lang.String |
toString() |
backupContainer, getAllContFileNamesprivate static final java.lang.String PROP_BACKUP_DIR
private static final java.lang.String PROP_BACKUP_SERIALS
private static int MAX_MEDIUM_SIZE_KB
private static final java.lang.String SCSIUSBDirPath
protected static final java.lang.String MEDIAPATH_PREFIX
private static final java.lang.String MEDIAPATH_POSTFIX
private java.lang.String[] serialNumbers
private java.lang.String[] currentScsiBus
private java.lang.String[] currentSerialID
private int EXITCODE_LAST_EXEC
public void initialize(java.util.Properties props)
throws java.lang.Exception
BackupModulDiese Methode dient dem Initialisieren des BackupModuls. Da die Plugins immer mit leerem Konstruktor initialisiert werden, werden mit dieser Methode die Plugin-spezifischen Einstellungen vorgenommen. Fehlt ein obligatorischer Property-Key, wird eine Exception geworfen.
initialize in interface BackupModulinitialize in class AbstractFileSystemBackupjava.lang.ExceptionBackupModul.initialize(java.util.Properties)public void closeMediumAfterBackup(int mediumID,
java.io.File indexFile)
throws BackupException
BackupModulSobald auf einem Medium keine Kapazität für weitere Container mehr vorhanden ist, wird der aktuelle Backup-Lauf auf diesem Medium mit dieser Methode abgeschlossen. Der Parameter übergibt eine Indexdatei, die alle ContainerIDs enthält, die im aktuellen Backup-Lauf auf diesem Medium gesichert wurden. Diese Datei wird auf dem Medium gespeichert. Die weiteren Aufgaben, die einzelne Implementierungen der BackupModule-Schnittstelle hier zu erfüllen haben, sind unterschiedlich. Module, die sofort auf ein Medium schreiben können (Wechselplatten) erfordern keine weiteren Schritte. Für Medien wie DVDs wird in dieser Methode aus den gesammelten Containern ein Image erstellt und auf die DVD gebrannt; bei Keydox wird ein Logout ausgeführt.
closeMediumAfterBackup in interface BackupModulcloseMediumAfterBackup in class AbstractFileSystemBackupBackupExceptionBackupModul.closeMediumAfterBackup(int,java.io.File)public boolean hasMediumCapacity(int mediumID,
long containerSize,
int mediumIndexSize)
throws BackupException
BackupModulLiefert true, falls die noch zur Verfügung stehende Kapazität des angegebenen Mediums ausreicht, um einen Container der Größe fileSize und den Medienindex mit der momentanen Größe indexSize zu speichern. Falls die Gesamtkapazität nicht durch den Medientyp eindeutig festgelegt ist, liefert das Backup-Modul einen sinnvollen Wert. Beispiel: 1 GB pro Aktenschrank in Keydox, jedoch keinesfalls die Größe der gesamten Festplatte. Ist das gewünschte Medium nicht im Zugriff, wird eine entsprechende Ausnahme ausgelöst.
hasMediumCapacity in interface BackupModulhasMediumCapacity in class AbstractFileSystemBackupBackupExceptionBackupModul.hasMediumCapacity(int,long,int)public void openMediumBeforeBackup(int mediumID,
java.lang.String backupRunID)
throws BackupException
BackupModulDiese Methode wird aufgerufen, bevor der erste Container auf dem Medium gesichert wird. Mit dem Parameter backupRunID können mehrere Backup-Läufe, die dasselbe Medium verwenden, unterschieden werden. Laut Spezifikation in [TanfArS] kann es im Regelfall nicht auftreten, dass ein Container mehrmals auf demselben Medium abgelegt ist, weil bereits gesicherte Container kein zweitesmal gesichert werden. Es ist dennoch notwendig ein Verhalten für diesen Fall vorzugeben. Beim Wiederherstellen eines Containers wird daher der Container des Mediums verwendet, der unter der alphabetisch größten backupRunID abgelegt wurde.
openMediumBeforeBackup in interface BackupModulopenMediumBeforeBackup in class AbstractFileSystemBackupmediumID - ID des MediumsbackupRunID - Zur Identifizierung des Sicherungslaufs falls mehrere Sicherungslaeufe auf einem Medium sind. Bei der Wiederherstellung eines Containers werden die Sicherungslaeufe von der alphabetisch letzten backupRunID beginnend bis zur alphabetisch ersten backupRunID nach dem angeforderten Container durchsucht.BackupExceptionBackupModul.openMediumBeforeBackup(int,java.lang.String)public java.io.InputStream restoreContainer(int mediumID,
java.lang.String contFileName)
throws BackupException
BackupModulMit dieser Methode wird ein InputStream der Containerdaten des Containers mit Namen contFile auf dem Medium mediumID erzeugt. Der BackupManager kopiert die Daten je nach Vorgang ganz oder teilweise in das Archivsystem oder in ein temporäres Verzeichnis. Diese Methode wird zum Wiederherstellen eines Containers, zum Abgleich/Wiederherstellung der Verwaltungsinformation und zur Verifikation verwendet.
restoreContainer in interface BackupModulrestoreContainer in class AbstractFileSystemBackupBackupExceptionprivate void findEmptyDVD(int mediumID)
throws java.lang.Exception
Sucht nach leeren Laufwerk (leer = keine DVD oder leere DVD!)
mediumID - java.lang.Exceptionprivate void findReadableDVD(int mediumID)
throws java.lang.Exception
java.lang.Exceptionprivate boolean isReadable(java.lang.String serialId)
throws java.lang.Exception
java.lang.Exceptionprivate boolean amIRunningOnLinux()
private java.lang.String getDirContent(java.lang.String serialId)
throws java.lang.Exception
java.lang.Exceptionpublic boolean containsData(java.lang.String serialID)
throws java.lang.Exception
Ermittelt, ob es in dem angegebenen Verzeichnis Daten gibt.
serialID - java.lang.Exceptionjava.lang.String getScsiBus(java.lang.String serialID)
throws java.io.IOException
Da der SCSI-Bus eines USB-Devices vom Betriebssystem dynamisch vergeben wird (d.h. sich beim Ein-/Ausschalten des Geräts aendern kann), muss die Beziehung Hardware <—> SCSI-Bus regelmaessig nachgeschlagen werden. Diese Methode bietet die hierfür benoetigte Funktionalitaet.
serialID - java.io.IOExceptionjava.lang.String getDVDMediaPath(java.lang.String serialId)
private java.lang.String exec(java.lang.String command)
throws java.io.IOException
Fuehrt ein Kommando aus und liefert den Output als String zurueck.
Der Output ist auf 100000 Zeichen limitiert.
command - java.io.IOExceptionprivate boolean containsErrorMessage(java.lang.String input)
Prüft, ob in input das Wort ‘Fehler’ oder ‘Error’ vorkommt, unabhängig von Groß/Kleinschreibung.
input - Input Stringpublic java.lang.String toString()
toString in class AbstractFileSystemBackup@NotNull public java.lang.String getBackupPath(int mediumID)
getBackupPath in class AbstractFileSystemBackup