LINUX.ORG.RU
ФорумAdmin

rsync и hard link — параметр --link-dest=/PATHTOBACKUP — [Решено]

 ,


2

2

Здравствуйте!

Преамбула:

mkdir /TEST
cd /TEST
for i in {a..c}; do : > $i; done
Скрипт:
#!/usr/local/bin/bash

SOURCE="/TEST"
PATHTOBACKUP="/Volumes/BackUp"

date=`date "+%Y-%m-%dT%H:%M:%S"`
rsync -az --link-dest=$PATHTOBACKUP/current $SOURCE $PATHTOBACKUP/back-$date
unlink ${PATHTOBACKUP}/current
ln -s  $PATHTOBACKUP/back-$date ${PATHTOBACKUP}/current
Амбула:

При первом запуске скрипта всё предсказуемо:

--link-dest arg does not exist: /Volumes/BackUp/current
unlink: /Volumes/BackUp/current: No such file or directory
После повторного запуска:
ls -l /Volumes/BackUp/back-2017-03-05T14:19:44/TEST/a
-rw-r--r--  1 ES  wheel  0  5 мар 14:01 /Volumes/BackUp/back-2017-03-05T14:19:44/TEST/a
ls -i1 /Volumes/BackUp/back-2017-03-05T14:14:48/TEST/a
14083 /Volumes/BackUp/back-2017-03-05T14:14:48/TEST/a
ls -i1 /Volumes/BackUp/back-2017-03-05T14:19:44/TEST/a
14091 /Volumes/BackUp/back-2017-03-05T14:19:44/TEST/a
Т.е. ЖЁСТКИЕ ССЫЛКИ НЕ СОЗДАЮТСЯ, а по-новой копируются файлы.

Что я делаю не так?

P.S.

О себе:

Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64
rsync  version 3.1.2  protocol version 31
GNU bash, версия 4.4.12(1)-release (x86_64-apple-darwin13.4.0)



Последнее исправление: Cave-Canem (всего исправлений: 2)

man rsync

If file’s aren’t linking, double-check their attributes. Also check if some attributes are getting forced outside of rsync’s control, such a mount option that squishes root to a single user, or mounts a removable drive with generic ownership (such as OS X’s «Ignore ownership on this volume» option).

Используй cp -al.

legolegs ★★★★★
()

Нескромный вопрос, чем timemachine не угодила? Она вроде тоже самое делает только автоматом.

anc ★★★★★
()
Ответ на: комментарий от legolegs

Решение проблемы:

Нужно было добавить параметр --fake-super

Полный работающий скрипт:

#!/usr/local/bin/bash

Vol="/Volumes/Data_new"
mkdir $Vol
mount_afp "afp://ES:cave-canem@TC_NEW._afpovertcp._tcp.local/Data_New" $Vol
hdiutil attach "${Vol}/RAM.sparsebundle"

SOURCE="/TEST"
PATHTOBACKUP="/Volumes/BackUp"

date=`date "+%Y-%m-%dT%H:%M:%S"`

rsync -az --fake-super --link-dest=$PATHTOBACKUP/current $SOURCE $PATHTOBACKUP/back-$date

unlink ${PATHTOBACKUP}/current
ln -s  $PATHTOBACKUP/back-$date ${PATHTOBACKUP}/current

hdiutil detach $PATHTOBACKUP -force
umount -f $Vol
Результат:
ls -i /Volumes/BackUp/back-2017-03-05T19:09:30/TEST/a
14171 /Volumes/BackUp/back-2017-03-05T19:09:30/TEST/a
ls -i /Volumes/BackUp/back-2017-03-05T19:33:43/TEST/a
14171 /Volumes/BackUp/back-2017-03-05T19:33:43/TEST/a
ls -l /Volumes/BackUp/back-2017-03-05T19:33:43/TEST/a
-rw-r--r--@ 5 ES  wheel  0  5 мар 14:01 /Volumes/BackUp/back-2017-03-05T19:33:43/TEST/a

Получилась Отличная замена глючной Time Machine!

Cave-Canem
() автор топика
Ответ на: Отличная замена глючной Time Machine! от Cave-Canem

Очень удивительно, ради интереса проверил на

Darwin Kernel Version 11.4.2: Thu Aug 23 16:26:45 PDT 2012; root:xnu-1699.32.7~1/RELEASE_I386 i386
и
Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64
везде
rsync: --fake-super: unknown option

anc ★★★★★
()
Ответ на: комментарий от Cave-Canem

Обязательно проверьте! Я не шучу, золотое правило, бэкапы надо не только делать но еще и проверять.
Честно говоря ваш вариант, с одной стороны чем-то интересен как замена tm, с другой не вижу в нем смысла. Я лично делаю как бэкапы tm для версионности так и полный tar-ом с которого точно можно восстановить.

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

Родной это:

rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
У меня, как я писал выше:
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, no prealloc, file-flags,
    HFS-compression

Cave-Canem
() автор топика
Ответ на: комментарий от anc

Меня TM несколько раз серьёзно подводила, помимо неё и рассмотрел множество разных вариантов, остановился на CCC + попробую использовать этот свеженаписанный скрипт. (Ну и ТМ).

Cave-Canem
() автор топика
Ответ на: комментарий от Cave-Canem

Все верно, я к тому что не всем ваше решение подойдет (из каробки). Хотя это выходит за рамки именно вашей задачи.

anc ★★★★★
()
Ответ на: комментарий от Cave-Canem

Про tm, я в курсе, было несколько весьма «неприятных» (это еще скромно сказано) случаев, поэтому остановился на старом добром tar-е. Во всяком случае в нем я уверен, так как проверял восстановление :)

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

поэтому остановился на старом добром tar-е

Может tar и хорошо, но мой скрипт позволяет хранить версии бэкапов и не занимать много места за счет hard link. А уж надёжность rsync многократно доказана.

Cave-Canem
() автор топика
Ответ на: комментарий от anc

Кстати, я копировал на Time Capsule, а это весьма специфический NAS, думаю в других случаях можно обойтись без --fake-super

Cave-Canem
() автор топика

А вообще говоря может и захламить место. У мню как в /usr/local так и потом в /opt/local понаехало. Версий много. В этом ключе мне слака роднее, знаю кто и куда.

anc ★★★★★
()
Ответ на: комментарий от Cave-Canem

Нифига это не Unix-Way, со временем может потребоваться другая версия, которая ставиться отдельно и т.д. и .т.п

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

Я поставил порты (ручками) в /usr/local/MacPorts — точно знаю, где что.

Cave-Canem
() автор топика
Ответ на: комментарий от anc

со временем может потребоваться другая версия, которая ставиться отдельно и т.д. и .т.п

Если вы о портах, там это всё решено автоматом, если же новая версия OS, то издержки неизбежны.

Cave-Canem
() автор топика
Ответ на: комментарий от Cave-Canem

Если вы о портах, там это всё решено автоматом, если же новая версия OS, то издержки неизбежны.

Я про переезд на новую версию ос, в которой нужен новый xcode, старый потом чисти руками... это я про личный опыт. У меня (на ноуте старом 2010 год) конечно бардак исторический, создать его достаточно легко было, а вот почистить не всегда руки доходят :) На других машинках включая сервак такой фигней не страдаю :)

anc ★★★★★
()
Ответ на: Решение проблемы: от Cave-Canem

Поправка

Что бы не было бесконечной рекурсии, необходимо добавить опцию --filter="-/ /Volumes"

Итак:

#!/usr/local/bin/bash

Vol="/Volumes/Data_new"
mkdir $Vol
mount_afp "afp:/User:password@TC_NEW._afpovertcp._tcp.local/Data_New" $Vol
hdiutil attach "/Volumes/Data_New/Air_BackUp.sparsebundle"
#HOST=mymachine.example.com

SOURCE="/"
PATHTOBACKUP="/Volumes/BackUp"

date=`date "+%Y-%m-%dT%H:%M:%S"`

rsync -az --fake-super --progress   \
--link-dest=$PATHTOBACKUP/current   \
--filter="-/ /Volumes"              \
$SOURCE $PATHTOBACKUP/back-$date

unlink ${PATHTOBACKUP}/current
ln -s  $PATHTOBACKUP/back-$date ${PATHTOBACKUP}/current

hdiutil detach $PATHTOBACKUP -force
umount -f $Vol

Cave-Canem
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.