Введите параметр в жестко запрограммированной команде tar - PullRequest
4 голосов
/ 15 августа 2011

Я использую программное решение Linux, которое использует команду tar для резервного копирования огромных объемов данных. Команда, которая жестко закодирована в двоичном файле, который вызывает tar:

/bin/tar --exclude "/backup" --exclude / --ignore-failed-read -cvjf - /pbackup 2>>'/tar_err.log' |  split -b 1000m - '/backup/temp/backup.tar.bz2'

Нет возможности изменить команду, так как она зашифрована. Он использует bzip2 для сжатия данных. Я испытал сильное улучшение производительности (до 60%) при использовании параметра --use-compress-prog = pbzip2, который использует все ядра процессора. Используя символическую ссылку bzip2 из / bin / bzip2 в двоичный файл pbzip2, я попытался обмануть программное обеспечение, однако при мониторинге процесса оно все еще использует bzip2, так как я думаю, что оно встроено в tar.

Я знаю, что это сложный вопрос, но есть ли способ использовать pbzip2 без изменения этой команды, которая вызывается извне?

Моя система - Debian Sequeeze.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Опасность: уродливое решение впереди;сделайте резервную копию двоичного файла, прежде чем продолжить

Прежде всего, проверьте, легко ли доступна жестко закодированная строка: используйте strings в вашем двоичном файле и посмотрите, отображает ли она указанную вами строку (возможно,будет состоять из нескольких частей, например /bin/tar, --exclude, --ignore-failed-read, ...).

Если это удастся, возьмите выбранный вами шестнадцатеричный редактор, откройте двоичный файл и найдите жестко закодированную строку;если он разделен на несколько частей, то вам нужен файл, содержащий /bin/tar;перезаписать tar произвольным трехбуквенным именем, например fkt ( f a k e t ar; быстрый поиск в Google не обернулсялюбой результат на /usr/bin/fkt, поэтому мы должны быть в безопасности).

Теперь программа должна вызывать ваш /usr/bin/fkt вместо обычного tar.

Теперь вставьте ваш /bin скрипт, подобный следующему:

#!/bin/sh
/bin/tar --use-compress-prog=pbzip2 $*

назовите его с именем, которое вы выбрали ранее (fkt), и правильно установите разрешения (они должны быть 755 и принадлежать root).Этот скрипт просто берет все параметры, которые он получает, и вызывает реальный tar, добавляя перед ними нужный вам параметр.

Другим решением, которое я предложил в комментариях, может быть создание chroot только для приложения, переименование tar в другое имя (realtar, может быть?) И вызов сценария выше tar (очевидно, теперь вы должны изменить /bin/tar внутри скрипта на /bin/realtar).

Если программа обновляется не очень часто и трюк сработал с первой попытки, я бы, вероятно, пошел с первым решением, установивподдерживать и поддерживать chroots не весело.

0 голосов
/ 15 августа 2011

Почему бы не переместить / bin / tar в (скажем) / bin / tar-original

Затем создайте скрипт / bin / tar, чтобы делать то, что вы хотите.

...