18

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

Спасибо

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

5 ответов5

22

Просто чтобы конкретизировать ответ Саймона, 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
14

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

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

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

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

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

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

5

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

0

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .