У меня есть дерево каталогов, которое я хотел бы сделать резервную копию на оптических дисках. К сожалению, он превышает размер любого диска (около 60 ГБ). Я ищу сценарий, который разбил бы это дерево на куски соответствующего размера с жесткими ссылками или еще чем-нибудь (оставив оригинал нетронутым). Затем я мог бы передать эти деревья размером с кусочек в процесс резервного копирования (добавить избыточность PAR2 и т. Д.).
Это не причудливый сценарий, но кажется, что это уже было сделано. Предложения?
(Наращивание и запись за один шаг не нужны, потому что я хочу сделать больше вещей, прежде чем файлы будут записаны.)
backup
disk-usage
split
burning
Reid
источник
источник
par2
защиту.Ответы:
Существует приложение, предназначенное для этого:
dirsplit
Это обычно живет
cdrkit
илиdirsplit
пакеты.Он может создавать готовые к использованию папки со ссылками, чтобы легко создавать DVD-диски с K3b или другим программным обеспечением GUI
источник
genisoimage
пакете.Вы также можете попробовать fpart , инструмент, который я написал (лицензирован BSD): https://sourceforge.net/projects/fpart/
источник
Однажды я сделал уродливый сценарий для аналогичной цели. Это просто клочок, но когда я его написал, меня не волновало время выполнения или красивость. Я уверен, что есть более «продуктивные» версии одной и той же концепции, но если вы хотите получить какие-то идеи или что-то, чтобы начать взламывать, вот так (сделал это в 2008 году, так что используйте на свой страх и риск!): - )
Я думаю, что я получил результат через samba для хоста Windows, который записывал с него диски. Если вы используете вышеизложенное без изменений, вы можете использовать
mkisofs
другой архиватор, который разрешает символические ссылки.источник
\[?*
). Рекомендуемое чтение: не анализируйте вывод ls , $ VAR vs $ {VAR} и заключать в кавычки или не заключать в кавычки . Обратите внимание, что я не проверял полученный скрипт. Если вы не понимаете мои изменения, не стесняйтесь спрашивать.[
в отличие отtest
, хотя) ...Однажды я написал скрипт для решения аналогичной проблемы - я назвал его «распространять» (вы можете прочитать основной код скрипта или файл с помощью сообщения помощи или загрузить его в виде пакета ); из его описания :
Он выполняет весь процесс в несколько этапов: на одном этапе он создает «раскладки» будущего диска с помощью символических ссылок на исходные файлы - так что вы можете вмешиваться и изменять будущие деревья дисков.
Подробно о его использовании можно прочитать в справочном сообщении, напечатанном скриптом (или заглянув в исходный код).
Он был написан с учетом более сложного варианта использования (выпуск обновлений в виде «diff» - набора добавленных новых файлов - к первоначально записанному набору файлов), поэтому он включает один дополнительный начальный этап, а именно «исправление» «текущее состояние коллекции файлов (для простоты она делает это путем репликации исходной коллекции файлов с помощью символических ссылок, в специальном рабочем месте для сохранения состояний коллекции; затем, когда-нибудь в будущем, сможет создать разницу между будущим текущим состоянием коллекции файлов и этим сохраненным состоянием). Таким образом, хотя вам может не понадобиться эта функция, вы не можете пропустить этот начальный этап, AFAIR.
Кроме того, я не уверен сейчас (я написал это несколько лет назад), хорошо ли он обрабатывает сложные деревья, или он должен разделять только простые (один уровень) каталоги файлов. (Пожалуйста, посмотрите сообщение справки или исходный код, чтобы быть уверенным; я тоже посмотрю это чуть позже, когда у меня будет время.)
Материал, связанный с APT, является необязательным, поэтому не обращайте внимания на то, что он может подготовить наборы пакетов для использования APT, если вам это не нужно.
Если вам интересно, конечно, не стесняйтесь переписать его в соответствии с вашими потребностями или предложить улучшения.
(Обратите внимание, что в пакет включены дополнительные полезные патчи, не примененные в представленном списке кодов в репозитории Git, указанном выше!)
источник
distribute
который решает основную задачу, о которой здесь говорится .Мы не должны забывать, что суть задачи действительно довольно проста; как положено в учебнике по Haskell (который написан вокруг проработки решения для этой задачи, постепенно улучшается)
(из путеводителя автостопом по Хаскеллу, глава 1 )
(Кроме того, в вашем вопросе вы хотели бы иметь возможность настроить (отредактировать) полученные макеты дисков, а затем использовать инструмент для их записи.)
Вы можете повторно использовать (адаптировать и повторно использовать) простой вариант программы из этого учебного пособия по Haskell для разделения вашей коллекции файлов.
К сожалению, в на
distribute
инструменте , который я уже упоминал здесь , в другом ответ , простота важнейшей задачи разделения не соответствует сложности и вздутием пользовательского интерфейсаdistribute
(потому что она была написана , чтобы объединить несколько задач, хотя производятся поэтапно, но все же объединено не самым чистым способом, о котором я мог думать сейчас).Чтобы помочь вам в некоторой степени использовать его код, вот выдержка из bash-кода
distribute
( строка 380 ), которая служит для выполнения этой «важной» задачи разделения коллекции файлов:( подробнее после строки 454 )
Обратите внимание, что
eatFiles
функция подготавливает макеты будущих дисков в виде деревьев, листья которых являются символическими ссылками на реальные файлы. Таким образом, он отвечает вашему требованию, чтобы вы могли редактировать макеты перед записью.mkisofs
Утилита имеет возможность следовать символическим ссылкам, которая на самом деле используемая в коде моейmkiso
функции .Представленный скрипт (который вы можете взять и переписать для своих нужд, конечно же!) Следует простейшей идее: суммировать размеры файлов (или, точнее, пакетов в случае
distribute
) в том порядке, в котором они были перечислены, дон не делать никаких перестановок.«Руководство автостопом по Haskell» более серьезно относится к проблеме оптимизации и предлагает варианты программ, которые попытались бы разумно перестроить файлы, чтобы они лучше подходили для дисков (и требовали меньше дисков):
(подробнее читайте в Главе 3 и далее.)
Другие умные инструменты
Мне также сказали, что Debian использует инструмент для создания своих дистрибутивных компакт-дисков, который умнее, чем мои
distribute
коллекции пакетов: его результаты более хороши, потому что он заботится о зависимостях между пакетами и пытается создать коллекцию пакетов, которая попадает на первый диск закрыт под зависимостями, то есть ни один пакет с 1-го диска не должен требовать пакет с другого диска (или, по крайней мере, я бы сказал, количество таких зависимостей должно быть минимизировано).источник
Backup2l может сделать много этой работы. Даже если вы не используете пакет напрямую, вы можете получить некоторые идеи сценария из него.
источник
rar
Архиватор может быть поручен автоматически разбивает архив создается на куски такого размера , определенного с-vsize
флагом.Архивирование этого дерева каталогов с именами
foo
, скажем, 500 мегабайт за штуку, которые вы бы указалиrar a backup.rar -v500m foo/
источник
rar
, если только вы снова не распакуете каждую «деталь» в свой собственный каталог, что, конечно, не сработает, поскольку детали не спроектированы таким образом и не разбиты по границам файлов.tar
+split
-подобные результаты, то есть и дар ; вот примечание о его соответствующей функции: «(SLICES) оно было разработано, чтобы иметь возможность разделить архив на несколько сменных носителей, независимо от их количества и размера». По сравнению сtar
+split
, я предполагаю, что он позволяет несколько более простых способов доступа к архивным файлам. (Кстати, у него есть также функция, напоминающаяdistribute
: «DIFFERENTIAL BACKUP» и «DIRECTORY TREE SNAPSHOT», но может не понравиться, что в результате получается специальный формат, а не ISO с деревом dir.)