LINUX.ORG.RU
ФорумAdmin

Есть ли пути архивирования и исправления битых симлинков?

 , ,


0

1

В поисковике не нашел результатов....

Грубо: Затупил... Ручками сделал структуру в которой и пул с данными и пул со ссылками на эти данные...

Теперь rsync на внешний диск с ntfs делает дереференс симлинков и данные копируются и в пул и туда где должны быть ссылки. Получаем двойной размер...

Сначала решил просто создать архив с этими битыми симлинками - прежде чем пытаться в скрипте править... Но решения даже этой задачи - не нашел.

$man tar - тоже решения не показал...

Сидеть и всё править в mc через Ctrl+x-Ctrl+s - очень трудоёмко...

Так как можно сделать резервную копию симлинков и затем сделать в них: поиск-замену?

Это решаемая задача?

★★★

Вроде бы у NTFS есть поддержка символьных ссылок. И у rsync есть опция копировать симлинки как симлинки. И ещё у rsync есть опция по принудительному переписыванию данных в пункте назначения. Если эти три пункта соединить, не получится ли решение?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Видимо это и есть решение...
Это я дважды затупил...
Не помню почему я в скрипте резервного копирования - сделал дереференс симлинков - возможно как раз чтобы бэкапилось то что за пределами дерева симлинков. Потом решил Разнести дерево видео и дерево фото и совокупить симлинками....
В общем суть проблемы теперь понятна...

Но вопрос остаётся в силе (для просвещения).
Как можно упаковать только симлинки?
Ну и в скрипте сделать поиск/замену для путей внутри них...

Рсинк сейчас сделаю с другими опциями, но просветиться не мешало бы...
Вдруг потом захочу дерево данных переместить в другое место... А симлинки то останутся...

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 1)
Ответ на: комментарий от n0mad

Как можно упаковать только симлинки?

У find есть опция искать только симлинки, а у tar есть опция брать список файлов из файла. Так можно создать tar-архив с симлинками. Возможно, tar’ом и на месте получится распаковать, с заменой существующих файлов на симлинки. Не вполне ясно, что tar будет делать с директориями, даже если у него есть опция принудительной перезаписи. Тут нужны эксперименты или чтение документации.

i-rinat ★★★★★
()
Ответ на: комментарий от n0mad

Не помню почему я в скрипте резервного копирования - сделал дереференс симлинков - возможно как раз чтобы бэкапилось то что за пределами дерева симлинков.

Как раз дереференс нужен был для того чтобы сбэкапить те файлы - на которые есть симлинки но сами файлы за пределами дерева бэкапа.

Убрал дереференс и скрипт начал живо выносить весь бэкап чтобы заменить его одинм симлинком....

Надо много думать над реорганизацией хранения и бэкапа... Моего бардака на 13Тб винтов...

n0mad ★★★
() автор топика

Это уже не так актуально, но решил поискать: relink и нашел следующий рецепт:

RELINK a lot of broken symlinks - FIX broken symlinks after rsync site to new server
find /PATHNAME -type l | while read nullsymlink ; do wrongpath=$(readlink "$nullsymlink") ; right=$(echo "$wrongpath" | sed s'|OLD_STRING|NEW_STRING|') ; ln -fs "$right" "$nullsymlink" ; done

After you run this script, you can check status for broken symlink with this command: find -L . -type l

Найденную в заметке: RELINK a lot of broken symlinks - FIX broken symlinks after rsync site to new server

n0mad ★★★
() автор топика

По ходу поисков в контексте слова «relink» - узнал про команду:
$symlinks - изменяющую абсолютные пути на относительные.

Про команду для работы с симлинками:
(github)$relink

И набрёл на обсуждение:
(unix.stackexchange.com)How can I «relink» a lot of broken symlinks?

Вдруг пригодится тем кто забредёт сюда по поиску...

n0mad ★★★
() автор топика