
У меня есть скрипт резервного копирования, который использует rsync -avz --link-dest=$oldbkp $source $newbkp
в своей основе. Проблема в том, что rsync часто не распознает, что файл в $source
не изменился, и поэтому он просто копирует его в $newbkp
вместо того, чтобы жестко связать его с $oldbkp
. Еще одна озадачивающая вещь заключается в том, что он непоследователен - есть некоторые файлы, где жесткая связь работает как и ожидалось. Раздел резервного копирования - ntfs.
Как вы можете видеть, резервное копирование всего через час после предыдущего занимает целых 2 ГБ новых данных, хотя содержимое практически не изменилось (это мой домашний ПК).
$ du -hsc 20170424-1559 20170424-1724
2.6G 20170424-1559
2.1G 20170424-1724
4.6G total
Я попробовал stat
несколько примеров. Это неудачная жесткая ссылка (sha256 одинаков для всех):
$ stat 20170424-1559/Documents/depeche
File: 20170424-1559/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 811h/2065d Inode: 140380 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 17:14:00.271104500 +0200
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2017-04-24 15:59:44.407252700 +0200
Birth: -
$ stat 20170424-1724/Documents/depeche
File: 20170424-1724/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 811h/2065d Inode: 361117 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 17:24:55.732080500 +0200
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2017-04-24 17:24:55.736274500 +0200
Birth: -
$ stat ~/Documents/depeche
File: /home/marek/Documents/depeche
Size: 21400 Blocks: 48 IO Block: 4096 regular file
Device: 2ah/42d Inode: 4397 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-03-07 09:51:07.681090473 +0100
Modify: 2016-08-01 16:30:38.000000000 +0200
Change: 2016-11-06 19:58:14.053859011 +0100
Birth: -
Это успешная жесткая ссылка (sha256 одинаковы):
$ stat 20170424-1559/Documents/ios7bkplist.txt
File: 20170424-1559/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 344437 Links: 4
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 15:59:44.574850700 +0200
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2017-04-24 17:24:56.022250400 +0200
Birth: -
$ stat 20170424-1724/Documents/ios7bkplist.txt
File: 20170424-1724/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 344437 Links: 4
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-04-24 15:59:44.574850700 +0200
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2017-04-24 17:24:56.022250400 +0200
Birth: -
$ stat ~/Documents/ios7bkplist.txt
File: /home/marek/Documents/ios7bkplist.txt
Size: 1983 Blocks: 8 IO Block: 4096 regular file
Device: 2ah/42d Inode: 4413 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ marek) Gid: ( 1000/ marek)
Access: 2017-02-28 20:03:32.858085513 +0100
Modify: 2016-04-04 22:03:55.000000000 +0200
Change: 2016-11-06 19:58:14.550522987 +0100
Birth: -
По сути то же самое происходит, когда я использую -c
rsync для принудительной проверки длительных файлов.
Есть ли что-то, что я упускаю из виду?
решение1
Проблема заключается в следующем (из man rsync
):
... Файлы должны быть идентичны по всем сохраненным атрибутам (например,разрешения, возможно право собственности) для того, чтобы файлы были связаны между собой.
В вашем случае права доступа к файлам следующие (из ваших примеров):
Access: (0644/-rw-r--r--) # hardlink failed (original)
Access: (0777/-rwxrwxrwx) # hardlink failed (backup)
Access: (0777/-rwxrwxrwx) # hardlink created (original)
Access: (0777/-rwxrwxrwx) # hardlink created (backup)
Например
$ chmod 777 A/file
$ rsync -az A/ B/
$ chmod 644 A/file
$ rsync -az --link-dest=$PWD/B/ A/ C/
результаты в
$ du -hsc A B C
965M A
965M B
965M C
2.9G total
в то время как сброс разрешений до исходных приводит к
$ chmod 777 A/file
$ rsync -az --link-dest=$PWD/B/ A/ D/
$ du -hsc A B D
965M A
965M B
4.0K D
1.9G total
Вы можете попробовать с каким-нибудь файлом заставить это работать (я полагаю, с --size-only
, который должен пропускать файлы одинакового размера).
Вам следует попытаться выяснить, изменились ли права доступа после последнего резервного копирования, или, если нет, то почему изменились права доступа в вашем каталоге резервных копий.