Я пытаюсь отразить общий ресурс, смонтированный через 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
lftp
с участием mirror --dry-run --no-perms --exclude-glob="*." --exclude-glob="* " --parallel --only-newer
вариант также занимает от 9 до 12 часов. Так что альтернативы нет.
Простая копия в графическом интерфейсе или через cp
для файла размером 4,7 МБ требуется около 2–3 секунд.
Я начал rsync
с участием --dry-run
вариант. Я обновлю этот пост, как только получу результаты.
ОБНОВЛЕНИЕ 2
rsync
с участием --dry-run
работает уже более 6 часов. Думаю, можно предположить, что это займет 9 часов плюс. Единственная запись в журнале sending incremental file list
. Сегодня государственный праздник (поэтому никаких изменений файлов / каталогов), поэтому я не уверен, сколько времени потребовалось для завершения этой части процесса.ОБНОВЛЕНИЕ 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
требуется много времени для обхода дерева каталогов, иначе происходит что-то еще.