Передача мільйонів файлів з одного сервера на інший


15

У мене два сервери. В одному з них 15 мільйонів текстових файлів (близько 40 ГБ). Я намагаюся перенести їх на інший сервер. Я розглядав, як їх зашпаркувати та перенести в архів, але зрозумів, що це не дуже добра ідея.

Тому я використав таку команду:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

Але я помітив, що ця команда просто передає близько 50 000 файлів, і тоді зв’язок втрачається.

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

Це неможливо scp, оскільки це завжди починається з першого файлу.

Відповіді:


33

Як ви кажете, використовуйте rsync:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

Варіанти:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

Як говорить @aim у своїй відповіді, переконайтеся, що у вас є запис /у вихідному каталозі (і в обох теж добре).

Більше інформації зі сторінки man


1
Я пропоную додати -hпрапор для використання у читаних людьми одиниць. І якщо ви хочете більше багатослівності, у вас є кілька варіантів: -iі / або -v/ -vv.
nyuszika7h

2
Зазвичай дуже мало причин не завжди використовувати rsync замість scp. Основне його використання те саме, і воно пропонує багато додаткових зручних функцій.
pimlottc

якщо sshце не варіант для вас, і вам не потрібно або хочете шифрування, ви можете спробувати мій сценарій s3.amazonaws.com/skaperen/rsend
Skaperen

7

Просто використовуйте rsync за ssh!

rsync -av username@ip:/var/www/html/txt /var/www/html/

На чоловіковій сторінці:

-a , - архів : Це еквівалентно -rlptgoD. Це швидкий спосіб сказати, що ви хочете рекурсії і хочете зберегти майже все (при цьому -H є помітним упущенням). Єдиним винятком з вищезгаданої еквівалентності є те, коли вказано --files-from, у цьому випадку -r не мається на увазі.

-v , - багатослівний : Цей параметр збільшує кількість інформації, яку ви отримуєте під час передачі. За замовчуванням rsync працює безшумно. Single -v дасть вам інформацію про файли, які передаються, та короткий підсумок в кінці. Два варіанти -v дадуть вам інформацію про пропущені файли та трохи більше інформації в кінці. Більше двох варіантів -v слід використовувати лише якщо ви налагоджуєте rsync.

Зверніть увагу, як я використовував косої риски в кінці папок - це важливо .


Вам, мабуть, слід додати більше інформації про значення кінцевої косої риски. На rsyncсторінці керівництва: "Косою косою рисою джерела змінює цю поведінку, щоб уникнути створення додаткового рівня каталогів у пункті призначення. Ви можете вважати, що трейлінг / джерело означає" скопіювати вміст цього каталогу "на відміну від" скопіюйте каталог на ім'я ", але в обох випадках атрибути каталогу, що містить, переносяться в каталог, що містить пункт призначення."
nyuszika7h

... і значення прапорів -av?
MrWhite

0

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

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

Якщо одне з'єднання розірветься, воно знову підключиться та продовжиться. Якщо ви порушите передачу, вона пропустить існуючі файли та продовжить.

http://lftp.yar.ru/


0

Інший спосіб - шляхом передачі (необов'язково стисненого) файлу tar через ssh:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.