Вопрос или проблема
У меня есть терабайты данных на удаленном хосте, которые я передаю.
В настоящее время я использую rsync -az
. Недавно я приобрел большой внешний жесткий диск [USB-C, Toshiba]; но, похоже, он медленнее моего внутреннего SSD.
Во время передачи, как настроить многопоэтапное копирование с удаленного хоста на внутренний SSD и внешний SSD, чтобы передавались только файлы, которые отсутствуют как на внутреннем SSD, так и на внешнем SSD, с удаленного хоста?
Если это важно: не ограничиваясь rsync
, удаленный хост – это Linux x86_64, а локальный хост – это Apple Macbook Pro с M3 Pro, работающий на macOS 15.2.
Ответ или решение
Эффективный перенос данных с удаленного хоста на два жестких диска
Перенос данных с удаленного хоста на локальную машину — это задача, которая требует внимательного подхода, особенно когда вы имеете дело с большими объемами информации. В вашем случае, вы хотите организовать многопоточный процесс копирования, чтобы передать данные с удаленного сервера на два жестких диска — внутренний SSD и внешний HDD. Мы рассмотрим, как это сделать эффективно, с использованием инструментов, доступных в Linux и macOS.
Шаг 1: Подготовка к переносу
Перед началом переноса данных убедитесь, что оба жестких диска подключены и доступны для вашего MacBook Pro. Определите пути к жестким дискам:
- Внутренний SSD:
/Volumes/SSD
- Внешний HDD:
/Volumes/HDD
Шаг 2: Синхронизация с использованием rsync
Для выполнения вашей задачи с использованием rsync
, вам понадобится сначала синхронизировать данные с удаленного хоста на внутренний SSD. Используйте следующую команду:
rsync -az --ignore-existing user@remote_host:/path/to/data/ /Volumes/SSD/
-a
— это архивный режим, который сохраняет символические ссылки, права доступа и временные метки.-z
— сжатие данных во время передачи, что может ускорить процесс.--ignore-existing
— позволяет игнорировать файлы, которые уже существуют на целевом диске.
Эта команда скопирует только те файлы, которые отсутствуют на вашем внутреннем SSD.
Шаг 3: Синхронизация с внутреннего SSD на внешний HDD
После успешного завершения первой команды, вам нужно синхронизировать данные с вашего внутреннего SSD на внешний HDD. Для этого используйте следующую команду:
rsync -az --ignore-existing /Volumes/SSD/ /Volumes/HDD/
Эта команда аналогична предыдущей, но она теперь копирует данные с вашего внутреннего SSD на внешний HDD, также игнорируя существующие файлы.
Шаг 4: Автоматизация процесса
Чтобы упростить процесс переноса, вы можете создать скрипт на Bash, который будет выполнять обе команды последовательно. Создайте файл transfer_files.sh
со следующим содержимым:
#!/bin/bash
# Перенос данных с удаленного хоста на внутренний SSD
rsync -az --ignore-existing user@remote_host:/path/to/data/ /Volumes/SSD/
# Перенос данных с внутреннего SSD на внешний HDD
rsync -az --ignore-existing /Volumes/SSD/ /Volumes/HDD/
Не забудьте сделать скрипт исполняемым:
chmod +x transfer_files.sh
Теперь вы можете запускать его по мере необходимости, просто выполняя:
./transfer_files.sh
Заключительные рекомендации
-
Мониторинг выполнения: Вы можете добавить вывод состояния выполнения каждой команды, добавив
--progress
в командыrsync
, если хотите видеть, сколько осталось скопировать. -
Использование флага
-h
: Это поможет вам видеть размер файлов в удобном формате (например, MB, GB). -
Тестирование: Перед тем как переносить огромные объемы данных, протестируйте сценарий на небольшом наборе файлов, чтобы убедиться, что все работает как задумано.
Следуя этим шагам, вы сможете эффективно и надежно перенести данные с удаленного хоста на два жестких диска, минимизируя время и ресурсы, затраченные на этот процесс.