Передача близько 300 Гб файлів з одного сервера на інший


20

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

Спасибі

EDIT: Для тих, хто цікавиться, я ВАЖНО пропоную використовувати команду a screenпід час виконання такої великої rsyncкоманди. Особливо, коли може статися щось нерозумно, і ви втрачаєте зв’язок із сервером A, з якого ви запускаєте rsyncкоманду. Потім просто зніміть екран і відновіть його пізніше.


4
Ви rsyncще пробували ? Може, на невеликому наборі файлів чи так? Має бути ідеальним інструментом для цього.
slhck

Це майже напевно не найкращий інструмент для цієї роботи, але вас може зацікавити той факт, що ви можете передавати тар через ssh-з'єднання, а не стискати до файлу перед переміщенням файлу:tar cz | ssh user@example.com tar xz
Aesin

2
це може бути поза темою, але (особливо для початкового завантаження, а потім використання rsyncдля подальших оновлень): "Ніколи не занижуйте пропускну здатність універсалу, заповненого стрічками" (тобто: чи планували ви розміщення 2-го hd (або підключіть 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

так що я 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 даних, тоді вночі встановлюйте лише для читання, коли ви запускаєте його вдруге).


1
Жоден сервер не повинен жити десь там, де пропускна здатність не може обробляти 300G за розумну кількість часу ...
Dan

1
Це залежить від того, що є «розумним». Скажіть, найслабша посилання - 100 Мбіт (мені байдуже, чи це обмеження на завантаження з офісу чи завантаження в іншому). Це приблизно дозволяє 10 Мб / сек. (діл на 10 здається розумним, я знаю, що ви можете отримати трохи більше, якщо все іде ідеально. Наприклад, ніхто більше не використовує лінію для нічого). 10 МБ / сек ~ ~ 600 МБ / хв ~ ~ 36000 МБ / годину ~ ~ 36 ГБ / годину ~ ~ 300 ГБ - 8h20min. Це можна зробити протягом ночі. Це також робить багато припущень. Наприклад, якщо завантаження становить лише 2 Мбіт (у нас є офіси з такою швидкістю), це займає 50 разів більше (415 год, або 17,3 дня).
Геннес

Yikes! Так, 8-10 розумно, але я дійсно робив ряд припущень.
День

2
@Dan Якщо вимога вимагає, щоб сервер працював і обслуговував запити, насичення пропускної здатності вгору за течією, ймовірно, погана ідея. Тому вам доведеться штучно придушити швидкість передачі, щоб врахувати це.
Боб

6

Я б пішов на rsync! Я використовую його для резервного копіювання свого сервера на сторонній сервер, і він прекрасно працює. Зазвичай є кілька МБ, щоб скопіювати, але за кілька днів вона доходить до 20-30 ГБ, і вона завжди працювала без проблем.


0

rsync через NFS за допомогою гігабітного з'єднання займе близько 10 годин. Краще буде скопіювати дані на жорсткий диск і перемістити їх між серверами. Якщо вам потрібно зробити копію фактично диска, використовуйте dd або щось подібне, щоб створити неочищене зображення диска. Використання ssh (scp) викликає величезні накладні витрати. Емпірично перевірено на гігабітному з'єднанні. rsync добре допомагає здійснювати поступову синхронізацію між двома серверами, які використовуються в режимі HA або в режимі резервного копіювання. Я вважаю.


Мова та стиль цієї відповіді потребують вдосконалення.
FSMaxB

Rsync особливо великий, якщо файли можуть змінюватися під час копіювання. Просто запустіть його кілька разів. Перший раз всі дані копіюються. Другий раз лише те, що змінилося протягом першої (довгої) копії. Третій раз буде зроблено вночі або лише для читання акцій.
Геннес

will took nearly about 10h. It will be better to copy data on HDD and move them between server.за винятком того, що він знаходиться по всій країні, тому це зайняло б більше часу.
Роб

@FSMaxB: Я зроблю це пізніше, thx.
Pawel

@Rob: Я прочитав це;) що сервери знаходяться в двох різних місцях. Отже, вам потрібно прорахувати, що буде для вас краще. Подорож по країні (перевірка вартості пального тощо) або користування мережевим підключенням. Що буде корисніше.
Pawel

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 в трубах
струмінь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.