Ускорение rsync над кем-л.

8

Я копирую коробку Linux через SMB на NAS. Я монтирую NAS локально, а затем перезаписываю много данных (100 ГБ или около того). Я считаю, что на это уходит очень много времени: более 12 часов. Я ожидал, что будет намного быстрее, когда все будет скопировано, так как почти ничего не меняется со дня на день.

Есть ли способ ускорить это?

Я думал, что, возможно, rsync думает, что он работает с локальными жесткими дисками и использует контрольную сумму вместо сравнения времени / размера? Но я не нашел способа провести сравнение времени и даты. Что-нибудь еще, что я мог проверить?

pupeno
источник
Я также предложил бы взглянуть на NFS вместо SMB - я заметил (и, возможно, это только я), что это быстрее, чем Samba
Уоррен
К сожалению, этот NAS не имеет NFS, и пока я застрял с ним.
Пупено
Проверьте возможности NAS, используя маппер портов, например, nmap. Я столкнулся с несколькими NAS-устройствами, на которых работала собственная служба rsync, хотя в документации не упоминалось и не упоминалось в конфигурации.
Kyle__
Пожалуйста, проверьте также эту ветку ["rsync to NAS каждый раз копирует все"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis
Пожалуйста, проверьте также эту ветку [rsync to NAS копирует все каждый раз] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Ответы:

28

Я думаю, что вы неправильно понимаете алгоритм rsync и то, как этот инструмент следует применять.

Преимущество Rsync в производительности достигается за счет выполнения дельта-передач, то есть перемещения только измененных битов в файле. Чтобы определить измененные биты, файл должен быть прочитан узлами источника и назначения и контрольными суммами блоков для сравнения, чтобы определить, какие биты изменились. Это «волшебная» часть rsync - сам алгоритм rsync.

Когда вы монтируете целевой том с помощью SMB и используете rsync для копирования файлов из того, что Linux «видит» как локальный источник и локальный пункт назначения (оба смонтированы на этом компьютере), большинство современных версий rsync переключаются в режим копирования «весь файл» и отключите алгоритм дельта-копирования. Это «победа», потому что при включенном алгоритме дельта-копирования rsync будет считывать весь файл назначения (по сети от NAS), чтобы определить, какие биты файла изменились.

«Правильный способ» использования rsync - это запуск сервера rsync на одном компьютере и клиента rsync на другом. Каждая машина будет считывать файлы из своего локального хранилища (которое должно быть очень быстрым), согласовывать, какие биты файлов были изменены, и передавать только эти биты. Они, как вы используете rsync, сфабрикованы как «cp». Вы можете сделать то же самое с помощью 'cp', и это, вероятно, будет быстрее.

Если ваше устройство NAS поддерживает работу сервера rsync (или клиента), то вы в деле. Если вы просто собираетесь смонтировать его на исходном компьютере через SMB, то вы можете просто использовать «cp» для копирования файлов.

Эван Андерсон
источник
7
Ууу! Downvotes! Мне было бы любопытно услышать, почему вы отказались от ответа, учитывая его техническую точность.
Эван Андерсон
Я не могу запустить rsync сервер на NAS, иначе я бы так и сделал. Когда сервер rsync не используется, rsync может использовать контрольную сумму или размер и дату и время, чтобы узнать, изменился файл или нет. Согласно справочной странице, он будет использовать размер и дату и время по умолчанию, но мой опыт показывает, что он этого не делает, и я не вижу способа заставить его. Я вижу только способ заставить контрольные суммы. --checksum: без этой опции rsync использует «быструю проверку», которая (по умолчанию) проверяет, совпадают ли размер файла и время последней модификации между отправителем и получателем.
Пупено
Эван, дай мне пару минут, чтобы написать мой комментарий.
Пупено
2
Какое поведение вы видите, это говорит вам, что это контрольная сумма файлов? Поведение «быстрой проверки» является поведением по умолчанию, поэтому нет способа его «форсировать». Если вы не можете запустить rsync на NAS, просто используйте «cp». Это будет так же быстро или быстрее.
Эван Андерсон
Согласно тому, как я понимаю работу rsync, он должен проверить локальную дату и время, удаленную дату и время и, если они совпадают, не копировать файл. Это означает, что он не должен копировать 99% файлов, но тот факт, что для 60 ГБ требуется более 12 ч. Или около того, говорит мне, что либо копируется все (что, как вы и подразумеваете, означает, что cp будет быстрее) или что это на самом деле контрольная сумма, что означает, что она не копирует все, а загружает все.
Пупено
6

Похоже, временные метки - это ваша проблема, так как эта страница относится к:

http://www.goodjobsucking.com/?p=16

Предложенное решение заключается в добавлении

--modify-window=1

к параметрам rsync.

боб
источник
4

Да, вы можете ускорить это. Вам нужно сделать так, чтобы источник или место назначения были похожи на удаленную машину, скажем, обращаясь к ней как к « localhost:».

Вы заявили, что монтируете общий ресурс SMB локально. Это делает источник или назначение похожим на локальный путь к rsync. Страница man rsync гласит, что копии, где источником и местом назначения являются локальные пути, будут копировать весь файл. Это указано в параграфе для опции --whole-file на странице руководства. Следовательно, дельта-алгоритм не используется. Использование localhost:обходного пути « » восстановит функциональность дельта-алгоритма и ускорит передачу.

морская звезда
источник
1
Интересно, какой смысл это иметь ... rsyncиспользует отметку времени и даты, чтобы проверить, нужно ли обновлять файл. Если требуется обновление, rsync разделит файл на куски и сравнит контрольные суммы. Это означает, что он будет читать весь файл, чтобы иметь возможность сделать это. Поэтому, если у вас нет запущенного удаленно демона rsync, вам все равно нужно будет передать весь файл, чтобы выполнить чанкинг и контрольную сумму, чтобы вы могли сразу же передать его. Таким образом, описанный здесь «обходной путь» фактически ничего не покупает в этом сценарии.
TylerDurden
3

Думал, что я бы бросил свой 2р здесь.

Мой брат только что установил сетевое хранилище Buffalo в своей офисной сети. Сейчас он просматривает резервные копии за пределами площадки, так что, если офис сгорит, по крайней мере, он все еще хранит все свои деловые документы в другом месте (за много сотен миль).

Моим первым препятствием было заставить его VPS (небольшой виртуальный частный сервер Linux, ничего лишнего) подключиться как пользователь VPN к своему широкополосному маршрутизатору (для этого он использует DrayTek), чтобы он сам мог быть частью его VPN, и поэтому он может получить доступ к NAS напрямую, безопасным способом. Получил, что отсортировано и работает блестяще.

Следующей проблемой была передача файлов с NAS на сервер VPS. Я начал с монтирования Samba и столкнулся с точно такой же (или даже хуже) проблемой, которую вы описали. Я выполнил rsync в пробном режиме, и мне потребовалось более 1 часа 30 минут, чтобы выяснить, какие файлы он будет передавать, потому что, как говорит Эван, при этом методе другой конец не является rsync, поэтому ему приходится выполнять много операций. системные вызовы / чтения на монтировании Samba (через PPTP / туннельное соединение с временем прохождения туда и обратно около 40 мс). Совершенно неработоспособен.

Мало ли я знал, что Buffalo на самом деле запускает демон rsync, поэтому, используя его, весь пробный прогон занимает всего 1 минуту 30 секунд для 87k файлов общей емкостью 50 ГБ. Очевидно, что передача 50 ГБ файлов (из NAS, находящегося на широкополосной линии с исходящей пропускной способностью только 100 К / с) - это совсем другое дело (это займет несколько дней), но после завершения первоначальной rsync все инкрементные резервные копии должны быть смазка молнии (его данные не будут сильно меняться ежедневно).

Мое предложение - использовать приличный NAS, который поддерживает rsync, по причинам, указанным Эваном выше. Это решит все ваши проблемы.

parkamark
источник
+1 за сообщение о том, что в Buffalo NAS работают rsync - спасибо!
Майкл
0

Пахнет, как будто у вас дешевле NAS. Это также может быть из вашей пропускной способности сети ...

«Стандартные» потребительские NAS очень слабы, когда дело доходит до интенсивного ввода-вывода, что вы и здесь пытаетесь сделать. Это также может быть дешевый коммутатор, соединяющий ваш компьютер и NAS, который недостаточно силен для правильной обработки всех пакетов.

Антуан Бенкемун
источник
Тот же NAS, тот же коммутатор, другой компьютер под управлением Windows, резервное копирование на него, гораздо больше информации, менее чем за четыре часа.
Пупено
0

Есть два потенциальных источника проблемы: либо вы используете неверные параметры строки коммандной строки, либо ваш NAS имеет проблемы с метками времени (или обеими :-). Пожалуйста, проверьте эту тему "rsync to NAS копирует все каждый раз" для получения дополнительной информации.

dtoubelis
источник