Вопрос или проблема
Мне нужно сделать временную резервную копию примерно 1 ТБ перед перемещением локального сервера, а другое место для хранения, которое у меня есть, — это удалённый HPC кластер с достаточной квотой на хранение, но с ограничением на количество файлов, и файлов слишком много. Создание tar-файла на локальной машине слишком медленно (скорость записи?).
Так как я могу передать локальные файлы в удалённый tar-файл? Я думал смонтировать удалённую файловую систему локально (с помощью sshfs?) и затем использовать что-то вроде tar -cf /mnt/remote/backup.tar local_folder
(Должно работать, верно?). Но может ли это быть сделано без монтирования? Может быть, с помощью какого-то магического канала из ssh
, scp
и tar
?
Если я смогу это сделать, возможно ли также обновлять удалённый архив с обновлёнными локальными файлами, как это делалось бы в полноценном решении для резервного копирования? (Это не обязательно для текущей задачи.)
Ответ или решение
Перенос файлов на удалённый сервер для резервного копирования: подробное руководство
В современных IT-структурах задачи резервного копирования и переноса данных часто требуют нестандартных решений, особенно когда дело касается больших объёмов информации, таких как 1 ТБ. Давайте рассмотрим оптимальные способы переноса локальных файлов на удалённый кластер HPC без значительных потерь в скорости и с минимизацией количества файлов.
1. Проблема
Ваша задача сводится к выполнению временного резервного копирования объёма около 1 ТБ перед перемещением локального сервера. Так как вы сталкиваетесь с ограничениями по количеству файлов на удалённом сервере, важно осуществить перенос файлов в одном условном архиве. Метод создания архива на локальном сервере, как вы упомянули, оказывается недостаточно быстрым из-за низкой скорости записи. Использование механизма монтирования удалённой файловой системы (например, с помощью sshfs
) также может не оправдать ожиданий по производительности.
2. Оптимальное решение
Для решения вашей задачи идеальным подходом будет использование комбинации инструментов ssh
, tar
и gzip
, которая позволяет передавать данные «на лету», минимизируя потребность в дополнительных операциях записи на диске. Вот подробная инструкция по выполнению этой операции.
Команда для выполнения архивации и передачи файлов:
tar -czf - /path/to/local_folder | ssh user@remote_server "cat > /path/to/backup/backup.tar.gz"
Объяснение команды:
tar -czf - /path/to/local_folder
: эта часть команды создаёт сжатый tar-файл из содержимого заданной папки, где-
указывает на вывод результата в стандартный поток.|
: оператор конвейера, который передаёт данные из первой команды во вторую.ssh user@remote_server "cat > /path/to/backup/backup.tar.gz"
: через SSH вы подключаетесь к удалённому серверу, где данные будут сохранены в файлbackup.tar.gz
.cat > /path/to/backup/backup.tar.gz
: команда на удалённом сервере принимает поток данных и сохраняет его в указанном файле.
3. Обновление архива
Если вам в будущем потребуется обновить резервную копию новыми или измененными файлами, рекомендуем использовать флаг -u
для tar
. Это позволит обновить архив без необходимости создания нового файла. Пример команды для обновления:
tar -czfu - /path/to/local_folder | ssh user@remote_server "cat > /path/to/backup/backup.tar.gz"
Здесь -u
означает, что tar
будет проверять существующие файлы в архиве и обновлять их в случае изменений.
4. Заключение
Используя данный метод, вы сможете эффективно выполнить резервное копирование больших объёмов данных на удалённый сервер, избегая ограничений по количеству файлов и увеличивая скорость передачи за счёт сжатия и передачи данных в реальном времени. Проведя такую процедуру, вы будете уверены в целостности и доступности ваших данных во время переезда локального сервера.
Обязательно протестируйте процесс на небольшом наборе данных непосредственно перед выполнением с крупными объёмами, чтобы убедиться в корректности выполнения команды и производительности вашего соединения.