Найшвидший спосіб копіювання папки, яка містить багато файлів через SSH


13

Який найкращий спосіб копіювання файлів на сервері через ssh?

У моєму випадку: я говорю про дублювання магазину magento. (15000 файлів ~ 50 Мб)

cp -a source destination

Займає години ... (у моєму випадку сервер - 2,4 Xeon, 2 Гб оперативної пам’яті)

Відповіді:


19

Одне слово : rsync.

Зауважте, що якщо ви перебуваєте на повільному посиланні або сервер знаходиться під великим навантаженням, інструмент, який використовується для копіювання, не буде вузьким місцем, і будь-який спосіб копіювання все одно буде повільним.

Це має забезпечити основне використання для копіювання між вашим локальним комп’ютером та віддаленим сервером: http://oreilly.com/pub/h/38

Щоб скопіювати з локального комп'ютера на віддалений сервер (потрібно, звичайно, замінити шляхи, ім’я користувача та адресу хоста):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a архів
  • -v багатослівний
  • -z компрес
  • -e ssh "використовувати тунель SSH"

Щоб скопіювати в інший бік, переключіть контури (перший - від , другий - до ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

Але rsync корисний навіть для копіювання речей на один і той же сервер:

rsync -av /path-to/copy/from /path_to/copy/to

2
Зауважте, що @Piskvor залишив -zопцію для локального копіювання, оскільки додає зайві накладні витрати. IMHO, ви повинні використовувати лише -zпід час використання rsync через повільне мережеве посилання. Якщо ви копіюєте велику кількість даних понад 100Base-T, вам може бути непогано без цього -z. При швидкому підключенні до мережі використання компресії може прив’язати ваш процесор і погубити інші процеси.
tomlogic

@tomlogic: хороший момент - іншими словами, не використовуйте -zдля копіювання локальної мережі або копіювання в межах однієї машини; тестуйте -zкопію через Інтернет і без нього (те чи інше може бути швидшим, залежно від багатьох речей).
Пісквор вийшов з будівлі

1
Я також не можу стиснути, якщо ви знаєте, що ваші файли вже стиснуті, наприклад синхронізувати дерево папок, повне JPEG, оскільки нічого не можна отримати.
перерва лінії

Примітка: -e sshдля віддалених хостів тепер за замовчуванням, тому не потрібно явно передавати параметр.
Пісквор вийшов з будівлі

3

Інше слово: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Для однократних угод scp - це зручно. Якщо файлів багато, то rsync - хороша ідея. Якщо з'єднання припинено, rsync може вибрати місце, де воно припинилося.

Я знав, що rsync має стиснення ( -z), і щойно дізнався, що також працює scp ( -C).


Що ж, IIRC вони обидва використовують алгоритми стиснення SSH, принаймні для мережевих операцій.
Пісквор вийшов з будівлі

0

У вашому налаштуванні rsync, ймовірно, достатньо ... але, наприклад, якщо є багато невеликих файлів, можливо, швидше спочатку націлити файли, ніж передати потім через rsync. Це тому, що передача власника, часових позначок, дозволів десь важче, ніж сам файл, якщо файл невеликий. Тар об'єднає всю цю інформацію в один файл, а rsync скопіює більші блоки.

Або ще краще, якщо не потрібна безпека, використовуйте tar і nc:

За призначенням підготуйте приймаючий демон, віджати та зніміть зйомку:

nc -l -p 12345 | pigz -d | tar xvf - 

На джерелі націлюйте все, паралельно стискайте та відправляйте його до пункту призначення:

tar cvf - ./ | pigz | nc host 12345
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.