Передача около 300 ГБ в файлах с одного сервера на другой

20

У меня есть около 200 000 файлов, которые я перенесу на новый сервер сегодня. Я ничего такого не делал раньше и хотел получить совет, как мне поступить. Я перемещаю их между двумя дистрибутивами Centos 6, и они находятся в разных местах страны. У меня недостаточно места на жестком диске на исходном сервере, чтобы собрать все каталоги и файлы в один большой архив, поэтому мой вопрос заключается в том, как мне перенести все эти файлы? Rsync? какой-то особый способ использования rsync? Любой вклад / предложения о том, как это сделать, будет удивительным.

Благодарность

РЕДАКТИРОВАТЬ: Для тех, кому интересно, я НАСТОЯТЕЛЬНО предлагаю использовать screenпри выполнении большой rsyncкоманды, как это. Особенно, когда может произойти что-то глупое, и вы потеряете соединение с сервером A, с которого вы запускаете rsyncкоманду. Затем просто отсоедините экран и возобновите его позже.

MasterGberry
источник
4
Вы уже пробовали rsync? Может быть, на небольшом наборе файлов или около того? Должно быть идеальным инструментом для этого.
slhck
Это почти наверняка не лучший инструмент для этой работы, но вас может заинтересовать тот факт, что вы можете передавать tar через ssh-соединение, а не сжимать его в файл перед перемещением файла:tar cz | ssh user@example.com tar xz
Aesin
2
это может быть не по теме, но (особенно для начальной загрузки и последующего использования rsyncдля последующих обновлений): «Никогда не недооценивайте пропускную способность универсала, полного лент» (т. е. рассматривали ли вы вопрос о размещении 2-го жесткого диска (или подключите usb2) / usb3 диск), сделайте резервную копию на нем и отправьте его через fedex в удаленное местоположение? Это может быть НАМНОГО быстрее, чем что-либо еще, и сэкономить пропускную способность для других целей.
Оливье Дюлак
У меня нет ограничений BW для одного провайдера, а для другого я не достигну этого месяца. Так что у меня нет проблем с тратой времени: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Боб

Ответы:

24

Просто чтобы конкретизировать ответ Саймона , rsyncэто идеальный инструмент для работы:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Предполагая, что у вас есть доступ по ssh к удаленной машине, вы хотели бы сделать что-то вроде этого:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

Это позволит скопировать каталог path/to/local/fooна /path/to/remote/barна удаленном сервере. Новый подкаталог с именем bar/fooбудет создан. Если вы хотите скопировать только содержимое каталога, не создавая каталог с таким именем на цели, добавьте косую черту:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

Это скопирует содержимое foo/в удаленный каталог bar/.

Несколько актуальных вариантов:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
terdon
источник
rsync -hrtplu --progressМогу ли я сделать, если я хотел бы видеть прогресс, как он идет?
MasterGberry
@MasterGberry да, точно. У меня есть скрипт резервного копирования, который запускается rsync --progress --stats -hrtl --update source destination.
Тердон
Кажется, у меня проблемы с его запуском. rsync -hrtplu --progress --rsh='ssh -p2202'это то, что я использую, и он не может подключиться. Продолжайте получать ошибку 255. Но я sshd'd в это. Итак, я знаю, что это не брандмауэр ... мне нужно также предоставить пароль через cmd? или он просто не попросит меня об этом?
MasterGberry
Сумасшедший, нвм. Я забыл об исходящем трафике на моем брандмауэре. Спасибо
MasterGberry
Важное примечание: при использовании rsync будьте особенно осторожны при использовании «--delete»: прочитайте о нем много, протестируйте другие (/ tmp / ...) папки и остерегайтесь изменений, добавляя или не добавляя в конце «/» в конце исходного dir (s) или dir назначения.
Оливье Дюлак
14

Это зависит от того, как быстро это должно быть скопировано, и сколько пропускной способности доступно.

Для плохого сетевого соединения учитывайте пропускную способность грузовика, заполненного лентами. (Читайте: отправьте 2,5-дюймовый жесткий диск по почте или просто отправьте туда сам. 300-гигабитные диски должны быть легко найдены).

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

[Редактировать] Я забыл добавить, что вы можете запустить rsync несколько раз, если ваши данные используются во время копирования.

Пример:
1) Данные используются. Rsync -> Все данные копируются. Это может занять некоторое время.
2) Запустите rsync снова, копируются будут только измененные файлы. Это должно быть быстро.

Вы можете сделать это несколько раз, пока не произойдет никаких изменений, или вы можете сделать это умным / безопасным способом, делая данные доступными только для чтения во время копирования. (Например, если он находится на используемом общем наборе, который разделяет общий доступ только для чтения. Или rsync данных, то ночью установите общий доступ только для чтения, пока вы запускаете его во второй раз).

Hennes
источник
1
Ни один сервер не должен жить где-то, где пропускная способность не может обработать 300G за разумное количество времени ...
Дан
1
Это зависит от того, что является «разумным». Скажем, самая слабая ссылка - 100 Мбит (мне все равно, является ли это пределом загрузки из офиса или загрузкой в ​​другом). Это примерно позволяет 10 МБ / с. (деление на 10 кажется разумным, я знаю, что вы можете получить немного больше, если все пройдет отлично. Например, никто больше не использует эту линию для чего-либо вообще). 10 МБ / с ~ 600 МБ / мин ~ 36000 МБ / час ~ 36 ГБ / час ~ 300 ГБ - 8 ч 20 мин. Это выполнимо в одночасье. Это также делает много предположений. Например, если загрузка составляет всего 2 Мбит (у нас есть офисы с такими скоростями), это занимает в 50 раз больше времени (415 часов или 17,3 дня).
Хеннес
Хлоп! Да, 8-10 - это разумно, но я действительно делал ряд предположений.
Дан
2
@Dan Если требуется, чтобы сервер работал и обслуживал запросы, насыщение полосы пропускания в восходящем направлении, вероятно, является плохой идеей. Таким образом, вам придется искусственно регулировать скорость передачи, чтобы учесть это.
Боб
6

Я бы пошел на rsync! Я использую его для резервного копирования моего сервера на внешний сервер, и он работает нормально. Обычно требуется скопировать несколько МБ, но в некоторые дни он достигает 20-30 ГБ и всегда работает без проблем.

Саймон
источник
0

rsync по NFS с использованием гигабитного соединения займет около 10 часов. Лучше будет скопировать данные на жесткий диск и перенести их между серверами. Если вам нужно сделать непосредственную копию диска, используйте dd или что-то в этом роде, чтобы создать сырой образ диска. Использование ssh (scp) приводит к огромным накладным расходам. Опытным путем проверено гигабитное соединение. rsync хорош для инкрементной синхронизации между двумя серверами, используемыми в HA или в режиме резервного копирования. Я предполагаю.

Pawel
источник
Язык и стиль этого ответа должны быть улучшены.
FSMaxB
Rsync особенно хорош, если файлы могут измениться во время копирования. Просто запустите его несколько раз. В первый раз все данные копируются. Второй раз только то, что изменилось во время первого (длинного) копирования. Третий раз будет сделано ночью или только для чтения.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.кроме того, что это по всей стране, так что это займет больше времени.
Роб
@FSMaxB: Я сделаю это позже, спасибо.
Павел
@Rob: я читал это;) что серверы находятся в двух разных местах. Итак, вам нужно посчитать, что будет для вас лучше. Путешествие по стране (проверка стоимости топлива и т. Д.) Или использование сетевого подключения. Что будет более полезным.
Павел
0

впервые используйте NFS и tar / untar (в этом случае NFS - самый быстрый протокол, tar для экономии пропускной способности сети за счет большей загрузки ЦП)

tar cf - * | ( cd /target; tar xfp -)

в следующий раз используйте rsync

реактивный самолет
источник
Если у вас достаточно мощности процессора, вы можете улучшить это, добавив gzip в цикл. А без NFS вы можете использовать netcat. (Или даже и то, tar -cf - * | gzip | nc -p 4567и другое nc -l 4567 | gunzip | tar xf -.
Хеннес
спасибо Хеннес, это была моя идея, но я забыл gzip в трубах
струя