Назад | Перейти на главную страницу

Linux: rsync для зеркалирования SMB при монтировании на локальный диск очень медленный

Я пытаюсь отразить общий ресурс, смонтированный через SMB, в локальный каталог. Общий ресурс размещен на сервере Windows 2016, к которому у меня нет доступа и я не могу установить какие-либо инструменты. Поэтому все, что у меня есть, - это доля SMB.

Общая папка содержит около 350 ГБ данных, в основном это небольшие файлы (4 МБ). Каждую ночь rsync jobs запускается и передает все обновления в локальный каталог. На это уходит много времени. Отправка инкрементного списка файлов занимает от 10 до 15 минут (мне нужно это проверить), но затем rsync необходимо передать пару МБ (примерно 20 файлов, измененных за ночь) - колоссальные 12 часов.

Может, у меня недопонимание, как rsync работает. Но у меня сложилось впечатление, что после получения списка дополнительных файлов rsync может определить, какие файлы нужно передать. Итак, все, что осталось, - это выбрать измененные файлы и передать их, что не должно занимать больше, чем от пары минут до одного часа.

Мне удалось снизить время передачи с 12 до 9 часов, установив общий ресурс SMB с actimeo=600 вариант. Но это все равно займет гораздо больше времени, чем ожидалось.

Итак, это крепление (на Synology NAS):

mount -t cifs //remote.server/share /volume1/sysadmin/share -o vers=3.0,username=john,password='***',domain=EXAMPLE,ro,soft,uid=1026,forceuid,gid=100,forcegid,addr=remote.server,file_mode=0777,dir_mode=0777,iocharset=utf8,nocase,cache=none,noserverino,actimeo=600

И это работа rsync:

rsyncOptions=(
    --delete
    --human-readable
    --itemize-changes
    "--modify-window=1"
    --partial
    --protect-args
    --recursive
    --stats
    --times
    --verbose
)
rsyncExclusions=(
    --exclude=.DS_Store
    --exclude=.Trash
    --exclude=.TemporaryItems
    --exclude=._*
    --exclude=.AppleDB
    --exclude=.AppleDouble
    --exclude=__MACOSX
    --exclude=.AppleDesktop
    --exclude=.~lock*
    --exclude=.fseventsd
    --exclude=.lock
    --exclude=.afpDeleted*
    --exclude=.smbdelete*
    --exclude=.TEMP_*
    --exclude=@eaDir
    --exclude=Thumbs.db
    --exclude='* '
    --exclude='*.'
)
/usr/bin/rsync "${rsyncOptions[@]}" "${rsyncExclusions[@]}" "/volume1/sysadmin/share/" "/volume1/share/

Вот статистика последней синхронизации:

Number of files: 571170
Number of files transferred: 279
Total file size: 351.95G bytes
Total transferred file size: 387.34M bytes
Literal data: 387.34M bytes
Matched data: 0 bytes
File list size: 25.95M
File list generation time: 0.526 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 413.57M
Total bytes received: 223.89K

sent 413.57M bytes  received 223.89K bytes  13.11K bytes/sec
total size is 351.95G  speedup is 850.56

Как я мог ускорить перевод? Возможно, другие инструменты, такие как lftp больше подходят для этого ... Любые указатели приветствуются.

ОБНОВЛЕНИЕ 1

ОБНОВЛЕНИЕ 2

ОБНОВЛЕНИЕ 3

При включенном дополнительном ведении журнала результат выглядит следующим образом:

2019/10/04 04:00:03 [20771] building file list
2019/10/04 05:42:16 [20771] .d..t...... dir1/
2019/10/04 05:42:17 [20771] >f+++++++++ dir1/file1
2019/10/04 05:42:44 [20771] .d..t...... dir1/subdir1/
2019/10/04 05:42:44 [20771] >f.st...... dir1/subdir1/file1
2019/10/04 05:43:19 [20771] >f..t...... dir1/subdir1/file2
2019/10/04 05:43:20 [20771] >f.st...... dir1/subdir1/file3
2019/10/04 05:43:20 [20771] .d..t...... dir1/subdir2/
2019/10/04 05:43:21 [20771] >f+++++++++ dir1/subdir2/file1
2019/10/04 10:16:38 [20771] .d..t...... dir2/subdir1/

...

Обратите внимание на огромный промежуток времени между dir1 и dir2, либо rsync требуется много времени для обхода дерева каталогов, иначе происходит что-то еще.