Jeffrey Cross
Jeffrey Cross

Підказка Linux: дуже швидка копія файлу мережі

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

Проблема полягає в тому, що при використанні scp або rsync для копіювання файлів з одного комп'ютера на інший існує певна кількість накладних витрат. Це не є проблемою в більшості випадків, але якщо ви намагаєтеся дублювати десятки тисяч файлів (думати, сервер або резервну копію бази даних), то накладні витрати на файл можуть реально скласти. Рішення полягає в тому, щоб скопіювати файли в єдиний потік, що зазвичай означає їх накладання на одному сервері, копіювання архіву, а потім видалення записів на пункт призначення. Якщо ви не використовуєте диск на 50% на вихідному сервері, це може призвести до втрати місця.

Brett Jones має альтернативне рішення, яке використовує зручну утиліту netcat:

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

Це вимагає netcat на обох серверах.

Коробка призначення: nc -l -p 2342 | tar -C / target / dir -xzf - вихідне поле: tar -cz / source / dir | nc Target_Box 2342

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

Однак, якщо ви перебуваєте в незахищеній мережі, ви все одно можете хотіти, щоб ваші дані були зашифровані в дорозі. Ви можете виконати одне і те ж завдання над ssh:

Запустіть це на машині призначення: cd / path / to / extract / to / ssh [захищена електронна пошта]-tar -cz -C / source / path / * ’| tar -zxv

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

Маршрут ssh трохи повільніше, ніж використання netcat, через накладні витрати на шифрування, але це все одно швидше, ніж scping файлів окремо. Вона також має додаткову перевагу, що потенційно може бути сумісна з серверами Windows, за умови, що на вашому сервері Windows є декілька інструментів UNIX, таких як ssh і tar, які використовують доступні зв'язані двійкові файли cygwin.

Швидке копіювання файлів - Linux!

Поділитися

Залишити Коментар