Ich archiviere Daten auf DVD, und ich möchte die DVDs voll packen. Ich kenne die Namen und Größen aller Dateien, die ich auf der DVD haben möchte, aber ich weiß nicht, wie viel Platz Metadaten beanspruchen. Ich möchte so viele Dateien wie möglich auf jede DVD bekommen, also benutze ich eine Bubblesearch-Heuristik mit gierigem Bin-Packing. Ich versuche 10.000 Alternativen und bekomme die beste. Derzeit kenne ich die Größe aller Dateien und weil ich nicht weiß, wie Dateien in einem ISO 9660-Dateisystem gespeichert sind, füge ich eine Menge Slop für Metadaten hinzu. Ich würde gerne den Slop reduzieren.Wie kann ich die Größe eines ISO 9660-Dateisystems vorhersagen?
Ich könnte genisoimage -print-size
verwenden, außer es ist zu langsam --- gegeben 40.000 Dateien besetzt 500MB, dauert es etwa 3 Sekunden. Das Nehmen von 8 Stunden pro DVD ist nicht in den Karten. Ich habe die Quelle genisoimage
vorher modifiziert und bin wirklich nicht scharf darauf, zu versuchen, den Algorithmus aus dem Quellcode herauszuquetschen; Ich hoffe, dass jemand einen besseren Weg kennt, um einen Kostenvoranschlag zu erhalten, oder mir eine hilfreiche Spezifikation geben kann.
Klärende das Problem und die Frage:
Ich brauche Archive zu verbrennen, die über mehrere DVDs aufgeteilt, in der Regel um fünf auf einmal. Das Problem, das ich zu lösen versuche, ist zu entscheiden, welche Dateien auf jede DVD gelegt werden sollen, so dass jede DVD (außer der letzten) so voll wie möglich ist. Dieses Problem ist NP-schwer.
Ich verwende den standard gierigen Packalgorithmus, wo Sie die größte Datei zuerst und Sie legen es in die erste DVD mit ausreichend Platz. Also j_random_hacker, ich bin definitiv nicht beginnend von Random. Ich starte von sortiert und benutze Bubblesearch, um die Reihenfolge zu ändern, in der die Dateien gepackt werden. Dieses Verfahren verbessert meine Verpackung von etwa 80% der geschätzten Kapazität auf über 99,5% der geschätzten Kapazität. Diese Frage ist etwa eine bessere Arbeit der Schätzung der Kapazität; Derzeit ist meine geschätzte Kapazität niedriger als die tatsächliche Kapazität.
ich ein Programm geschrieben haben, die 10.000 Störungen versucht, beinhaltet jeweils zwei Schritte:
- eine Reihe von Dateien Wählen Sie
- Schätzung, wie viel Speicherplatz diese Dateien auf DVD
Schritt 2 ist der Schritt, den ich versuche, zu verbessern. Gegenwärtig bin ich "auf der Seite der Vorsicht", wie Tyler D vorschlägt. Aber ich würde es gerne besser machen. Ich kann es mir nicht leisten,
genisomage -print-size
zu verwenden, weil es zu langsam ist. Ebenso kann ich die Dateien nicht auf die Festplatte tarieren, da sie nur zu langsam ist, aber eine TAR-Datei nicht die gleiche Größe wie ein ISO 9660-Bild hat. Es ist die Größe des ISO 9660-Bildes, das ich vorhersagen muss. Im Prinzip könnte das mit absoluter Genauigkeit gemacht werden, aber ich weiß nicht, wie es geht. Das ist die Frage.
Hinweis: Diese Dateien sind auf einer Maschine mit 3 TB Festplattenspeicher. In allen Fällen beträgt die durchschnittliche Größe der Dateien mindestens 10 MB. manchmal ist es deutlich größer. Also ist es möglich, dass genisomage
schließlich doch schnell genug ist, aber ich bezweifle es --- es scheint zu funktionieren, indem ich das ISO-Image nach/dev/null schreibe, und ich kann mir nicht vorstellen, dass das bei der Bildgröße schnell genug sein wird Ansätze 4.7GB. Ich habe momentan keinen Zugriff auf diese Maschine oder habe die ursprüngliche Frage gepostet. Wenn ich abends Zugang habe, werde ich versuchen, bessere Zahlen für die Frage zu bekommen.Aber ich denke nicht genisomage
wird eine gute Lösung sein --- obwohl es eine gute Möglichkeit sein könnte, ein Modell des Dateisystems zu lernen, das mir sagt, wie es funktioniert. Zu wissen, dass die Blockgröße 2 KB ist, ist bereits hilfreich.
Es kann auch nützlich sein zu wissen, dass Dateien im selben Verzeichnis auf die DVD samae gebrannt werden, was die Suche vereinfacht. Ich möchte direkt auf die Dateien zugreifen, was das Teer-vor-Brennen ausschließt. (Die meisten Dateien sind Audio oder Video, was bedeutet, dass es keinen Sinn macht, sie mit gzip
zu treffen.)
@jrh: Mein Algorithmus ist ähnlich, aber nicht identisch.Wenn Sie eine Frage 'beim Brennen von Dateien auf mehrere DVDs stellen, wie kann ich jede DVD so voll wie möglich packen', werde ich versuchen, eine detaillierte Antwort zu geben . (Am besten mailen Sie mir mit der URL der Frage.) –