2015-03-04 4 views
1

ЦЕЛЬ: Я хочу заставить zpaq создавать резервные копии символических ссылок, как если бы они были реальными файлами, возможно, путем обмана его (используя LD_PRELOAD или какой-либо вид или систему FUSE) в мысленные символические ссылки файлы.Принудительная программа для обработки символических ссылок как реальных файлов с использованием LD_PRELOAD

Я хочу, чтобы создать/найти библиотеку, которая заставляет программы читать Symlinks , как они были сами файлы, а затем использовать LD_PRELOAD (или что-то подобное ), чтобы запустить программу в этой среде.

Других слов, когда программа вызывает READDIR() [или что-то], то символическое выглядит как реальный файл, а когда программа вызывает открытой() [или что-то], он открывает фактический целевой файл, а не символическую ссылку.

Есть ли способ сделать это? В противном случае замечательный zpaq не поддерживает символические ссылки на данный момент, а файлы находятся на разных дисках, , поэтому я не могу использовать жесткую ссылку.

+0

FWIW, лучший способ сделать это - поговорить с Мэттом о добавлении флага в ZPAQ, чтобы следовать символическим ссылкам; Я сомневаюсь, что у него возникнет проблема с этим, особенно если вы готовы внести исправление. Если он не желает, ZPAQ является открытым исходным кодом; вы всегда можете создать измененную версию. – nemequ

+0

Спасибо. Я на самом деле связался с Мэттом об этом (и несколько других предложениях zpaq), и Мэтт отлично понимал мои предложения, хотя, конечно, он не может сразу их реализовать. Я немного боюсь изменить код сам, и, что более важно, я думаю, что обманывать программы в мыслящие символические ссылки - это реальные файлы, которые были бы полезны в целом, а не только для zpaq. – barrycarter

ответ

1

В чем проблема? Вы, кажется, уже знаете о LD_PRELOAD; все, что вам нужно сделать, это написать библиотеку, которая предоставляет правильные функции и помещает ее в LD_PRELOAD. This link объясняет процесс немного более подробно, если вам это нужно.

Единственная потенциальная проблема заключается в том, что призывы к вещам в glibc не всегда привязаны к символам, которые вы могли бы ожидать ... например, вызов для записи может на самом деле вызвать __write (если он не попадет в что-то даже Нижний уровень). В зависимости от уровня оптимизации некоторые вызовы функций будут полностью удалены, например memset с фиксированной длиной. Существуют также проверенные варианты для многих функций, если вы используете _FORTIFY_SOURCE. Я не думаю это должно быть проблемой для readlink, но вы, вероятно, просто собираетесь использовать TIAS.

В принципе, просто сделайте это. Если он не работает, затем вернитесь к SO, если вам нужна помощь в отладке.

+0

TIAS? попробовать и посмотреть? –

+0

Да, TIAS = попробуйте и посмотрите. – nemequ