Я архивирую данные на DVD и хочу полностью упаковать DVD. Я знаю имена и размеры всех файлов, которые мне нужны на DVD, но я не знаю, сколько места занимают метаданные. Я хочу разместить как можно больше файлов на каждом DVD, поэтому я использую эвристику Bubblesearch с жадной упаковкой в мусорное ведро. Я пробую 10000 альтернатив и получаю лучший. В настоящее время я знаю размеры всех файлов и, поскольку я не знаю, как файлы хранятся в файловой системе ISO 9660, я добавляю много отстойных метаданных. Я хотел бы сократить помои.
Я мог бы использовать genisoimage -print-size
, за исключением того, что он слишком медленный - учитывая, что 40 000 файлов занимают 500 МБ, это занимает около 3 секунд. Взятие 8 часов на DVD не в карточках. Я уже модифицировал исходный код genisoimage
и на самом деле не хочу пытаться выжать алгоритм из исходного кода; Я надеюсь, что кто-то знает лучший способ получить оценку или может указать мне полезную спецификацию.
Разъяснение проблемы и вопроса:
Мне нужно записать архивы, которые разбиты на несколько DVD, обычно около пяти одновременно. Проблема, которую я пытаюсь решить, состоит в том, чтобы решить, какие файлы поместить на каждый DVD, чтобы каждый DVD (кроме последнего) был максимально полным. Эта проблема NP-сложная.
Я использую стандартный жадный алгоритм упаковки, в котором вы сначала размещаете самый большой файл и помещаете его в первый DVD, на котором достаточно места. Итак, j_random_hacker, я определенно не , начиная со случайного. Я начинаю с сортировки и использую Bubblesearch, чтобы изменить порядок, в котором файлы упакованы. Эта процедура улучшает мою упаковку с примерно 80% от расчетной емкости до более чем 99,5% от расчетной емкости. Этот вопрос о делает лучшую работу по оценке мощности ; в настоящее время моя расчетная мощность ниже реальной.
Я написал программу, которая пробует 10 000 возмущений, каждое из которых включает в себя два шага:
- Выберите набор файлов
- Оцените, сколько места будут занимать эти файлы на DVD
Шаг 2 - это шаг, который я пытаюсь улучшить. В настоящее время я «ошибаюсь на стороне осторожности», как предполагает Тайлер Д. Но я хотел бы сделать лучше. Я не могу позволить себе использовать genisomage -print-size
, потому что это слишком медленно. Точно так же я не могу заархивировать файлы на диск, потому что только он слишком медленный, но размер файла tar отличается от размера ISO 9660. Это размер ISO 9660 изображения, который мне нужно предсказать. В принципе это можно сделать с полной точностью, но я не знаю, как это сделать. Вот в чем вопрос.
Примечание. Эти файлы находятся на компьютере с 3 ТБ дискового пространства. Во всех случаях средний размер файлов составляет не менее 10 МБ; иногда это значительно больше. Таким образом, возможно, что genisomage
будет достаточно быстрым в конце концов, но я сомневаюсь в этом - похоже, он работает, записывая образ ISO в / dev / null, и я не могу себе представить, что это будет достаточно быстро, когда размер изображения приближается к 4.7GB. У меня нет доступа к этой машине сейчас, или когда я отправил оригинальный вопрос. Когда у меня будет доступ к вечеру, я постараюсь получить лучшие номера по этому вопросу. Но я не думаю, что genisomage
будет хорошим решением - хотя это может быть хорошим способом изучения модели файловой системы.
это говорит мне, как это работает. Знать, что размер блока составляет 2 КБ, уже полезно.
Также может быть полезно знать, что файлы в одном и том же каталоге записываются на саме DVD, что упрощает поиск. Я хочу получить доступ к файлам напрямую, что исключает tar перед записью. (Большинство файлов являются аудио или видео, что означает, что нет смысла пытаться поразить их gzip
.)