Найшвидший спосіб передати 55 Гб зображень на новий сервер


64

На даний момент у мене є два сервери CentOS. Мені потрібно знати, як і яким найшвидшим способом було б "смолати" каталог директорій із зображеннями та SCP?

Це найшвидший спосіб, який я щойно запропонував, тому що таргінг триває вічно ... Я запустив команду:

tar cvf imagesbackup.tar images

І я збирався просто обрізати це.

Повідомте мене, якщо є швидший шлях. У мене віддалений / SSH доступ до обох машин.


12
Sneakernet?
Нік T

Відповіді:


98

Замість використання tar для запису на локальний диск, ви можете писати безпосередньо на віддалений сервер по мережі за допомогою ssh.

server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"

Будь-яка рядок, що слідує за вашою командою "ssh", запускатиметься на віддаленому сервері замість інтерактивного входу. Ви можете передавати вхід / вихід до цих віддалених команд і через SSH так, як якщо б вони були локальними. Введення команди в лапки дозволяє уникнути плутанини, особливо при використанні перенаправлення.

Або ви можете витягнути файл tar на іншому сервері безпосередньо:

server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"

Зверніть увагу на рідко використовуваний -Cваріант. Це означає "спочатку змінити цей каталог, перш ніж робити що-небудь".

Або, можливо, ви хочете "витягнути" з цільового сервера:

server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")

Зауважте, що <(cmd) конструкція нова для bash і не працює в старих системах. Він запускає програму і посилає вихід на трубу, і замінює цю команду в команду так, ніби це файл.

Я міг би просто так написати наступне:

server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")

Або наступним чином:

server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination

Або ви можете врятувати себе від горя і просто скористатися rsync:

server1$ rsync -az ./path server2:/destination/

Нарешті, пам’ятайте, що стискання даних перед передачею зменшить вашу пропускну здатність, але при дуже швидкому з'єднанні це може фактично змусити операцію зайняти більше часу . Це пов’язано з тим, що ваш комп’ютер може не в змозі стиснутись досить швидко, щоб не відставати: якщо стиснення 100 МБ займе більше часу, ніж потрібно для відправлення 100 МБ, то швидше надіслати його нестисненим.

Крім того, ви можете розглянути можливість трубопроводів gzip самостійно (а не використовувати параметр -z), щоб ви могли вказати рівень стиснення. Я мав досвід, що при швидких мережних з'єднаннях зі стислими даними використання gzip на рівні 2 або 3 (за замовчуванням - 6) дає найкращу загальну пропускну здатність у більшості випадків. Так:

server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"

Rsync прекрасно працював - стискає на льоту, копіює цілі папки, відновлює за розірваним посиланням. Все в одну просту команду. Любіть це. Ось такі варіанти, які мені здаються корисними: z: компресія r: рекурс = копіювання підпапки v: багатослівна. Приклад моєї команди Rsync: rsync -azvr / src-path / username @ dest_server: / dest / path /
Бастіон

68

Мені б сподобатись синхронізувати це над собою - це стискає і добре обробляє втрати зв'язку.


14
rsync - це саме правильний інструмент.
Багатий

4
+1 - Так, rsync!
Еван Андерсон

1
+1, просто купувати. Плюс мені дуже подобається rsync.
Стівен у понеділок

1
Але при використанні rsync вам доведеться все одно стискати дані вручну (якщо ви хочете зберігати свої дані стиснуті)
wlk

Як можна зберігати стиснуті файли (файли) за допомогою rsync?
Dolan Antenucci

12

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

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

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

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

Я б використовував такий спосіб:

md5sum /images/* > md5sum.txt
scp -r images/* user@host:/images/

На новому сервері

md5sum /images/* > md5sum_new.txt

І тоді просто diff. А оскільки scp підтримує стиснення на льоту, немає необхідності в окремих архівах.

Редагувати

Я зберігатиму інформацію про MD5, оскільки вона була корисною для ОП. Але один коментар вразив мене новим розумінням. Тож трохи пошуку надали цю корисну інформацію. Зверніть увагу, що сюжетом тут є SFTP, а не безпосередньо SCP .

На відміну від FTP, SFTP додає накладні витрати для передачі файлів. Коли файл передається між клієнтом та сервером, він розбивається на менші шматки, які називаються "пакетами". Наприклад, припустимо, що кожен пакет становить 32 КБ. Протокол SFTP робить контрольну суму на кожен файл 32 КБ під час його надсилання та включає цю контрольну суму разом з цим пакетом. Одержувач отримує цей пакет і розшифровує дані, а потім перевіряє контрольну суму. Сама контрольна сума "сильніша", ніж контрольна сума CRC32. (Оскільки SFTP використовує 128-бітну або більш високу контрольну суму, таку як MD5 або SHA, і оскільки це робиться для кожного пакету, відбувається дуже детальна перевірка цілісності, яка виконується в рамках передачі.) Таким чином, протокол сама по собі повільніше (через додаткові накладні витрати), але успішне завершення передачі означає, фактично,


Дуже дякую, чим займається md5sum? і що відрізняється? Дякую, виконуючи зараз!
Andrew Fashion

2
md5sum (або md5) приймає контрольну суму файлів. Diff шукає відмінності у файлах (man diff). Контрольна сума створює рядок, хеш, що якщо файл буде змінено під час транзиту ... трохи перевернуто, помилка ... не збігатиметься, коли ви знову перейдете з іншого боку. Для великих файлів у вас підвищена ймовірність помилок. Ось чому, коли ви бачите сайти, які дозволяють завантажувати файли .iso, вони часто мають контрольну суму MD5 для порівняння завантаженого файлу, щоб переконатися, що він збігається та не є пошкодженим.
Барт Сільверстрім

3
scp зашифрований і гарантує цілісність лінії. Є ще невеликий шанс, що дані пошкодилися в пам'яті або на диску, звичайно, але це досить рідко.
Райан Бейр

1
Чи справді накладні витрати контрольних сум SFTP мають значення в будь-якому практичному розумінні? Я не можу так собі уявити. 4 байти на кожні 32768 не здаються значущими. Це 128 кБ на ГБ. Називати це "повільніше" видається завищенням будь-чого, крім нудного теоретичного сенсу.
підкреслюй_d

8

На додаток до пропозиції md5sum Pacey, я використовую наступне:

У пункті призначення: nc -w5 -l -p 4567 | tar -xvf -

Потім на джерело: tar -cvf - /path/to/source/ | nc -w5 destinationserver 4567

Це все ще tar / untar, і шифрування немає, але це безпосередньо на інший сервер. Почніть їх обидва в тандемі ( -w5дає 5 грацій.) І стежте за тим, як він проходить. Якщо пропускна здатність обмежена, додайте -z до дьогтю на обох кінцях.


1
Я думаю, що це навпаки, спочатку він повинен виконати в пункті призначення (відкрити гніздо), а потім на джерело (відправити)
Димитріос Мітріотис

замість сервера призначення я просто поставлю root@1.1.1.1?
Andrew Fashion

Ні, просто IP. netcat не використовує протокол, відмінний від TCP :) Ця команда також буде найшвидшою з усіх команд, наведених вище. В джерелі є рівно одне читання на файл, точний мінімальний мережевий трафік для передачі файлів і рівно одна запис на файл у пункті призначення. Якщо у вас є запасні цикли процесора, додавання прапора -z (для стиснення) пришвидшить його ще більше, оскільки потрібно перенести менше мережевих даних.
Джефф МакДжункін

@ user36845 - Правда. Я не мав на увазі хронологію із упорядкуванням вище, але ви маєте рацію, спочатку потрібно відкрити розетку. Я відредагую його для уточнення. :)
SmallClanger

Я не впевнений, чому ssh / scp обмежувались від 125 Мб / с до 133 МБ / с, але netcat може передавати ці дані зі швидкістю ~ 380 Мб / с легко (те саме посилання)
ThorSummoner

1

Один момент - не всі хости мають rsync і, можливо, хости можуть мати різні версії tar. З цієї причини можна рекомендувати в якості першого порту дзвінка використовувати cpio, що нехтується часто.

Ви можете cpio over ssh, щоб зробити спеціальну реплікацію структур файлів / директорій між хостами. Таким чином, ви маєте тонший контроль над тим, що надсилається над баченням, як вам потрібно "годувати" cpio, nom-nom. Це також більш портативний аргумент, cpio не сильно змінюється - це важливий момент, якщо ви доглядаєте за кількома хостами в неоднорідному середовищі.

Приклад копіювання / експорту / домашньої та підкаталовок на віддалений хост:

cd /export/ find . home -print | cpio -oaV | ssh 10.10.10.10 'cd /export/home; cpio -imVd'

Вищенаведене копіюватиме вміст / export / home та будь-які підкаталоги до / export / home на віддалений хост.

Сподіваюся, це допомагає.


Він згадав, що це два ящики CentOS, тож вони мали б rsync та файли сумісні версії tar. Такі інструменти, як rsync, були створені для заміни таких інструментів, як cpio :). Ви не можете "відновити" cpio, принаймні, не знаючи, з чого саме потрібно почати, і відфільтрувати свою інформацію як потрібно. Що зайвий час. Сказавши це, корисна інформація для «старих» ящиків UNIX :)
Rafiq Maniar

Так, цей cmmand втратив мене ха-ха
Ендрю Мода

1

У вас є ssh доступ, у вас є доступ до rsync.

rsync -av -e ssh /storage/images/ user@[ip or domain name]:/storage/images/

або

rsync -av -e "ssh -l user" /storage/images/ [ip or domain name]:/storage/images/

Якщо ви отримаєте помилку на кшталт "помилка rsync: деякі файли не вдалося перенести (код 23) на main.c (977) [sender = 2.6.9]", перевірте свого користувача та групи між серверами; у вас може виникнути невідповідність.

Використовуйте опцію rsync "-z", якщо ви хочете, щоб rsync стискав передачу. Цей параметр використовуватиме більше процесора, але меншу пропускну здатність, тому пам’ятайте про це.

Існує варіант "- прогрес", який дасть вам відсоток перерахованого, що дуже добре, якщо вам подобається така річ.


0

Вони перебувають у спільній мережі замість того, щоб Інтернет потребував для передачі файлів? NFS або FTP можуть бути набагато швидшими, ніж накладні витрати SCP, хоча ви б втратили шифрування під час передачі.


різні сервери у віддалених місцях
Andrew Fashion

0

Або ви завжди можете використовувати смолисті труби:

(cd /path && tar -cjf - * ) | ssh user@host 'tar -xjf - -C /path'

'j' = bzip2, ви можете використовувати 'z' для gzip або --lzma, якщо ваш tar підтримує його.

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