Передайте 15 ТБ крихітних файлів


79

Я архівую дані з одного сервера на інший. Спочатку я розпочав rsyncроботу. На це знадобилося 2 тижні, щоб створити список файлів лише для 5 ТБ даних і ще тиждень для передачі 1 ТБ даних.

Тоді мені довелося вбити роботу, оскільки нам потрібно трохи часу на новому сервері.

Було домовлено, що ми будемо орієнтуватися на нього, оскільки нам, ймовірно, не потрібно буде звертатися до нього знову. Я думав розбити його на шматки 500 Гб. Після того як я tarце тоді я збирався скопіювати це наскрізь ssh. Я використовую tarі , pigzале це все ще надто повільно.

Чи є кращий спосіб це зробити? Я думаю, що обидва сервери є на Redhat. Старий сервер - Ext4, а новий - XFS.

Розміри файлів коливаються від кількох кбіт до декількох МБ, і 24 мільйони jpegs в 5 ТБ. Тому я здогадуюсь приблизно 60-80 мільйонів за 15 ТБ.

редагувати: Після гри з rsync, nc, tar, mbuffer та pigz протягом декількох днів. Вузьким місцем буде IO диска. Оскільки дані наводяться на 500 дисках SAS та близько 250 мільйонів JPG. Однак зараз я дізнався про всі ці приємні інструменти, які я можу використовувати в майбутньому.


1
можливий дублікат linux до linux, 10TB передача?
D34DM347

2
Одним із варіантів є створення стислих файлів tar на зовнішньому диску та переміщення їх до нової системи. Додатковий диск пришвидшить створення файлів tar (не записуватиметься на існуючі диски в системі, можливо, намагаючись прочитати з них 15TB) і не зв’яже новий сервер.
Брайан

4
Чи є кращий спосіб це зробити? - Так, реплікація DFS для Windows Server 2012 R2 підготувала б це приблизно за 10 годин . І він синхронізував би зміни та вибирав там, де він припинився після перезавантаження.
TessellatingHeckler

27
@TessellatingHeckler: ви пропонуєте OP перейти з Redhat до Windows перед архівацією?
Томас Веллер

12
@ThomasWeller Вони запитали "чи є кращий спосіб?", І є. Я не рекомендую, щоб вони використовували кращий спосіб. Вони вільно використовувати команди в трубі, яка не може відновитись через переривання, не перевірятиме вміст файлу, не може повідомити про стан копіювання, не може використовувати скопійовані раніше блоки, щоб уникнути копіювання частин файлів, не має явних підтримує копіювання з низьким пріоритетом, не може бути призупинено, не згадується про копіювання ACL-файлів, і для його запуску потрібен хтось, хто залишиться ввійти. Однак будь-хто інший, хто слідує за цим, може зацікавитись або запропонувати сказати "x робить це в Linux".
TesselilingHeckler

Відповіді:


64

У мене були дуже хороші результати , використовуючи tar, pigz(паралельний GZIP) і nc.

Джерело машини:

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

Машина призначення:

Для вилучення:

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

Щоб зберегти архів:

nc source_machine_ip 9876 > smallstuff.tar.gz

Якщо ви хочете побачити швидкість передачі, просто перейдіть pvпісля pigz -d!


3
FYI, ви можете замінити pigzз gzipабо видалити його повністю, але швидкість буде значно повільніше.
h0tw1r3

10
Як це можна прийняти, якщо ОП вже пробували tarі pigz? Я не розумію ...
Томас Веллер

5
@ThomasWeller звідки ти взяв, що його судили pigz? Від питання, схоже , він тільки намагався до rsyncсих пір, і з урахуванням використання tarдля поділу і розшарування даних. Особливо, якщо він не використовував -z/ --compressoption на rsync, pigzтеоретично це може суттєво допомогти.
Doktor J

1
@ThomasWeller так, справді я вже пробував смолу та pigz, але не nc. Я використовував ssh, тому це додало значно більше накладних витрат.
lbanz

2
@lbanz це просто означає, що tarне виробляє дані досить швидко, pigzщоб використовувати багато процесора для стиснення. Читання безлічі невеликих файлів передбачає набагато більше системних викликів, набагато більше запитів на диск та набагато більше накладних витрат на ядро, ніж читання такої ж кількості байтів великих файлів, і схоже, що ви просто обмежуєте вузькі місця на фундаментальному рівні.
панночки

21

Я б дотримувався рішення rsync. Сучасний (3.0.0+) rsync використовує інкрементальний список файлів, тому йому не потрібно будувати повний список перед передачею. Тому перезапуск не вимагатиме, щоб ви знову переносили цілу передачу у разі неприємностей. Розщеплення передачі на каталог верхнього або другого рівнів оптимізує це ще більше. (Я використовую rsync -a -Pта додаю, --compressякщо ваша мережа повільніше, ніж ваші диски.)


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

18
Знайдіть (або побудуйте) статично пов’язаний бінарний файл rsync та просто запустіть його з дому. Сподіваємось, це не зруйнує ніяких гарантій.
Фокс

Як щодо unison? Як вона порівнюється rsync?
Гвінет Левелін

15

Налаштуйте VPN (якщо його Інтернет), створіть віртуальний привід певного формату на віддаленому сервері (зробіть його ext4), змонтуйте його на віддаленому сервері, потім встановіть його на локальному сервері (використовуючи протокол рівня блоків, як iSCSI ) та використовуйте dd або інший інструмент рівня блоків для здійснення передачі. Потім ви можете скопіювати файли з віртуального накопичувача на реальний (XFS) диск у власні зручності.

Дві причини:

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

3
Обхід файлової системи добре. Копіювання блокового рівня файлової системи, встановленої для читання-запису, є дуже поганою ідеєю. Спочатку відключіть або змонтуйте лише для читання.
JB.

Маючи копію 15TB-копії. Це означає, що новому серверу потрібно мінімум 30.
Артур Кей

3
Якщо сервер використовує LVM, можна зробити знімок файлової системи лише для читання та скопіювати її. Пробіл розміщений лише для змін у файловій системі, які відбуваються під час зчитування знімка.
liori

9

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


2
Це приблизно 1PB 2TB накопичувачів, так що це занадто багато.
lbanz

3

Використовуйте mbuffer, і якщо він знаходиться в захищеній мережі, ви можете уникнути кроку шифрування.


3

(Можна отримати багато різних відповідей. Ось ще одна.)

Створіть список файлів за допомогою find -type f(це має закінчитися через пару годин), розділіть його на невеликі шматки та перенесіть кожен фрагмент, використовуючи rsync --files-from=....


3

Ви розглядали кросівки? Маючи на увазі, я маю на увазі перенести все на той же привід, а потім фізично перемістити цей диск.

близько місяця тому Samsung представила накопичувач на 16 ТБ (технічно це 15,36 ТБ), що також є SSD: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -drive-16tb

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


2

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

Якщо ні, перевірте рішення netcat + tar + pbzip2 , адаптуйте параметри стиснення відповідно до свого обладнання - перевірте, що таке вузьке місце (CPU? Network? IO?). Pbzip2 добре охоплює всі процесори, забезпечуючи кращу продуктивність.


lzma ( xz) декомпресується швидше, ніж bzip2, і працює на більшості вхідних даних. На жаль, xzфункція багатопотокових записів ще не реалізована.
Пітер Кордес

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

Так, моя думка була прикро, що немає однопотокової багатопотокової lzma. Хоча для цього випадку використання передачі цілих файлових систем даних pigzбуде проблематичним. бути найповільнішим компресором, який ви хочете використовувати. Або навіть lz4. (Є lz4mtдекілька потоків для одиночного потоку. Він не працює дуже ефективно (породжує нові теми дуже часто), але він отримує суцільне прискорення)
Пітер Кордес

2

Ви використовуєте RedHat Linux, тому це не застосовуватиметься, але як інший варіант:

Я мав великий успіх у використанні ZFS для зберігання мільйонів файлів, оскільки вставки - це не проблема.

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

ZFS - це насамперед файлова система Solaris, але її можна знайти в ілюмінаціях (відкритий вилок Sun's OpenSolaris). Я знаю, що також було багато удачі у використанні ZFS під BSD та Linux (використовуючи FUSE?) - але я не маю досвіду пробувати це.




-1

Ви можете зробити це лише за допомогою tar і ssh:

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

Або, якщо ви хочете зберегти окремі файли:

tar zcf - <your files> | ssh <destination host> "tar zxf -"


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