Английский | Китайский
Кросс-платформенный инструмент реального времени для синхронизации файлов на основе Go.
Первым делом установите Go (необходима версия 1.22+), затем вы можете использовать
следующую команду для установки gofs
.
go install github.com/no-src/gofs/...@latest
Вы можете использовать скрипт build-docker.sh для сборки образа Docker, вам следует клонировать этот репозиторий и перейти в корневой путь репозитория перед запуском.
$ ./scripts/build-docker.sh
Или непосредственно получить образ Docker с DockerHub с помощью следующей команды.
$ docker pull nosrc/gofs
Для получения дополнительной информации о скриптах выпуска и Docker, см. каталог scripts.
go install -ldflags="-H windowsgui" github.com/no-src/gofs/...@latest
Пожалуйста, убедитесь, что директории источника и назначения существуют, замените следующие пути вашими реальными путями.
$ mkdir source dest
Создайте файл сертификата TLS и ключ для тестовых целей.
Файлы сертификата TLS и ключа используются только для File Server и Remote Disk Server.
$ go run $GOROOT/src/crypto/tls/generate_cert.go --host Yöntem
2021/12/30 17:21:54 wrote cert.pem
2021/12/30 17:21:54 wrote key.pem
Просмотрите наш рабочий пространство.
$ ls
cert.pem key.pem source dest
Синхронизация файлов между дисками с помощью Локального диска.
Синхронизация файлов с сервера с помощью Удаленного сервера диска и Удаленного клиента диска.
Синхронизация файлов с SFTP сервера с помощью Клиента получения SFTP.
Синхронизация файлов на SFTP сервер с помощью Клиента отправки SFTP.
Синхронизация файлов на MinIO сервер с помощью клиента MinIO Push.
Запустите Клиент задач для подписки на Сервер задач, затем получите задачу и выполните её, используя Исходный сервер как пример.
Мониторинг исходной директории и синхронизация изменённых файлов в целевой директории.Вы можете использовать флаг logically_delete
, чтобы активировать логическое удаление и избежать случайного удаления файлов. Установите флаг checkpoint_count
, чтобы использовать контрольные точки в файле для сокращения передачи незменённых фрагментов файла. По умолчанию checkpoint_count=10
, что означает наличие до 10+2
контрольных точек. Две дополнительные контрольные точки находятся в начале и в конце файла. Первая контрольная точка равна размеру фрагмента (chunk_size
) и является необязательной. Последняя контрольная точка равна размеру всего файла и является обязательной. Отступ от контрольной точки, установленный значением checkpoint_count
, всегда больше чем chunk_size
, за исключением случая, когда размер файла меньше или равен chunk_size
. В этом случае значение checkpoint_count
будет равно 0, поэтому это значение также является необязательным.
По умолчанию, если размер файла и время последней модификации исходного файла равны размеру и времени последней модификации целевого файла, то текущий процесс передачи файла игнорируется. Вы можете использовать флаг force_checksum
, чтобы принудительно включить контрольную сумму для сравнения одинаковости файлов.По умолчанию алгоритм хэширования контрольной суммы — это md5
. Вы можете использовать флаг checksum_algorithm
, чтобы изменить этот алгоритм. Поддерживаемые алгоритмы: md5
, sha1
, sha256
, sha512
, crc32
, crc64
, adler32
, fnv-1-32
, fnv-1a-32
, fnv-1-64
, fnv-1a-64
, fnv-1-128
, fnv-1a-128
.
Если вы хотите снизить частоту синхронизации, вы можете использовать флаг sync_delay
, чтобы включить задержку синхронизации. Синхронизация начнётся, когда количество событий будет равно или превышено значение sync_delay_events
, либо будет ждать интервал времени sync_delay_time
после последней синхронизации.
Вы также можете использовать флаг progress
, чтобы выводить прогресс-бар синхронизации файлов.
$ gofs -source=./source -dest=./dest
Вы можете использовать флаг encrypt
, чтобы включить шифрование и указать директорию как рабочее пространство шифрования с помощью флага encrypt_path
. Все файлы в указанной директории будут зашифрованы и затем синхронизированы в целевой путь.
$ gofs -source=./source -dest=./dest -encrypt -encrypt_path=./source/encrypt -encrypt_secret=mysecret_16bytes
Вы можете использовать флаг decrypt
, чтобы расшифровать зашифрованные файлы в указанном пути.
$ gofs -decrypt -decrypt_path=./dest/encrypt -decrypt_secret=mysecret_16bytes -decrypt_out=./decrypt_out
Сразу синхронизировать весь путь от исходной директории до целевой директории.```bash $ gofs -source=./source -dest=./dest -sync_once
### Синхронизация по расписанию
Синхронизировать весь путь от исходной директории до целевой директории согласно расписанию.
```bash
# Каждые Yöntem 30 секунд синхронизировать весь путь от исходной директории до целевой директории
$ gofs -source=./source -dest=./dest -sync_cron="*/30 * * * * *"
Запустить демона для создания подпроцессов и записи информации о PID в файл PID.
$ gofs -source=./source -dest=./dest -daemon -daemon_pid
Запустить сервер файлов для исходной и целевой директорий.
По умолчанию сервер использует HTTPS. Установите флаги tls_cert_file
и tls_key_file
, чтобы настроить сертификат и ключ. Вы можете отключить HTTPS, установив флаг tls
в значение false
, если он вам не нужен.
Если вы установите флаг tls
в значение true
, то порт по умолчанию для сервера файлов будет равен 443
, в противном случае — 80
. Вы также можете настроить порт по умолчанию с помощью флага server_addr
, например, -server_addr=":443"
.
Если вы активируете флаг tls
на стороне сервера, вы сможете контролировать, пропустят ли клиенты проверку цепочки сертификатов и имени хоста, используя флаг tls_insecure_skip_verify
, который по умолчанию установлен в значение true
.
Если вы уже активировали флаг tls
, тогда вы можете использовать флаг http3
для активации протокола HTTP/3 на стороне сервера и клиента.Должно быть установлено значение флага rand_user_count
для автоматического генерирования некоторого количества случайных пользователей или можно использовать флаг users
для настройки пользователей сервера по соображениям безопасности.
Пользователи сервера будут выводиться в лог, если вы установите значение флага rand_user_count
больше нуля.
Если вам требуется сжатие файлов, добавьте флаг server_compress
для активации сжатия ответов с использованием gzip, но это пока не быстро и может снижать эффективность передачи данных в локальной сети.
Вы можете переключаться между режимами хранения сессий для сервера файлов с помощью флага session_connection
. Поддерживаются память и Redis; по умолчанию используется память. Если вы хотите использовать Redis как хранилище сессий, вот пример строки подключения для Redis:
redis://127.0.0.1:6379?password=redis_password&db=10&max_idle=10&secret=redis_secret
.
# Запуск сервера файлов и создание трёх случайных пользователей
# Замените флаги `tls_cert_file` и `tls_key_file` реальными файлами сертификата в рабочей среде
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3
Используйте флаг max_tran_rate
для ограничения максимальной скорости передачи на стороне сервера и клиента, и это ожидаемое значение, а не абсолютное.
Например, чтобы ограничить максимальную скорость передачи до 1048576 байт, что эквивалентно 1МБ.```bash $ gofs -source=./source -dest=./dest -max_tran_rate=1048576
### Удалённый сервер файлов
Запуск удалённого сервера файлов как источника файлов.
Подробности флага `source` см. в разделе [Протокол источника удалённого сервера](#remote-server-source-protocol).
Обратите внимание, что пользователи удалённого сервера файлов должны иметь права на чтение, например, `-users="gofs|password|r"`. Вы можете использовать флаги `checkpoint_count` и `sync_delay`, как в разделе [Локальный диск](#local-disk).
```bash
# Запустите удалённый сервер диска
# Замените флаги `tls_cert_file` и `tls_key_file` своими реальными сертификатами в рабочей среде
# Замените флаг `users` сложными именами пользователя и паролями для повышения безопасности
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|r" -tls_cert_file=cert.pem -tls_key_file=key.pem -token_secret=mysecret_16bytes
Запустите удалённого клиента диска для синхронизации изменённых файлов с удалённого сервера диска.
Детали флага source
см. в разделе Протокол источника удалённого сервера.
Используйте флаг sync_once
для немедленной синхронизации всего пути с удалённого сервера диска до локального каталога назначения, как в разделе Синхронизация однократно.
Используйте флаг sync_cron
для синхронизации всего пути с удалённого сервера диска до локального каталога назначения с помощью cron, как в разделе Синхронизация cron.Используйте флаг force_checksum
для принудительного включения контрольной суммы для сравнения равенства файла, как в разделе Локальный диск.
Вы можете использовать флаг sync_delay
, как в разделе Локальный диск.
# Запустите удалённого клиента диска
# Замените флаг `users` вашими реальными именами пользователя и паролями
$ gofs -source="rs://127.0.0.1:8105" -dest=./dest -users="gofs|password" -tls_cert_file=cert.pem
Запустите Удалённый сервер диска как источник удалённого файла, затем активируйте удалённый сервер отправки с помощью флага push_server
.
Обратите внимание, что пользователи удалённого сервера отправки должны иметь права на чтение и запись, например, -users="gofs|password|rw"
.
# Запустите удалённый сервер диска и активируйте удалённый сервер отправки
# Замените флаги `tls_cert_file` и `tls_key_file` своими реальными сертификатами в рабочей среде
# Замените флаг `users` сложными именами пользователя и паролями для повышения безопасности
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|rw" -tls_cert_file=cert.pem -tls_key_file=key.pem -push_server -token_secret=mysecret_16bytes
Запустите удалённый клиент отправки данных для синхронизации изменённых файлов с Удалённым сервером отправки данных.Используйте флаг chunk_size
, чтобы установить размер блока большого файла для загрузки. По умолчанию значение chunk_size
равно 1048576
, что эквивалентно 1 МБ
.
Вы можете использовать флаги checkpoint_count
и sync_delay
аналогично локальному диску.
Дополнительное использование флагов см. в разделе Клиент удалённого диска.
# Запустите удалённый клиент отправки данных и активируйте синхронизацию локального диска, синхронизируйте изменения файлов из исходной директории до локальной целевой директории и удалённого сервера отправки данных
# Замените флаг `users` вашими реальными именами пользователя и паролями
$ gofs -source="./source" -dest="rs://127.0.0.1:8105?local_sync_disabled=false&path=./dest" -users="gofs|password" -tls_cert_file=cert.pem
Запустите клиент SFTP отправки данных для синхронизации изменённых файлов с сервером SFTP.
$ gofs -source="./source" -dest="sftp://127.0.0.1:22?local_sync_disabled=false&path=./dest&remote_path=/gofs_sftp_server&ssh_user=sftp_user&ssh_pass=sftp_pwd"
Запустите клиент SFTP получения данных для скачивания файлов с сервера SFTP в локальную целевую директорию.
$ gofs -source="sftp://127.0.0.1:22?remote_path=/gofs_sftp_server&ssh_user=sftp_user&ssh_pass=sftp_pwd" -dest="./dest" -sync_once
Запустите клиент MinIO отправки данных для синхронизации изменённых файлов с сервером MinIO.```bash $ gofs -source="./source" -dest="minio://127.0.0.1:9000?secure=false&local_sync_disabled=false&path=./dest&remote_path=minio-bucket" -users="minio_user|minio_pwd"
### Клиент MinIO получения данных
Запустите клиент MinIO получения данных для скачивания файлов с сервера MinIO в локальную целевую директорию.
```bash
$ gofs -source="minio://127.0.0.1:9000?secure=false&remote_path=minio-bucket" -dest="./dest" -users="minio_user|minio_pwd" -sync_once
Запустите сервер задач для распределения задач клиентам.
Пример с удалённым сервером диска: создайте конфигурационный файл манифеста задач, как файл remote-disk-task.yaml. Здесь определена задача синхронизации файлов с сервера.
Затем создайте конфигурационный файл содержимого задачи run-gofs-remote-disk-client.yaml, который определён в вышеупомянутом манифесте задач, и он будет выполнен клиентом. Наконец, запустите удалённый сервер диска с флагом task_conf
.
Здесь используйте conf
, чтобы упростить команду и переиспользовать конфигурационные файлы тестирования интеграции.
$ cd integration
$ mkdir -p rs/source rs/dest
$ gofs -conf=./testdata/conf/run-gofs-remote-disk-server.yaml
Запустите клиент задач для подписки на сервер задач, затем получите задачу и выполните её.
Используйте флаг task_client
, чтобы запустить клиента задач, а флаг task_client_max_worker
ограничит максимальное количество одновременно работающих рабочих процессов в стороне клиента задач.Вы можете использовать флаг task_client_labels
, чтобы определить метки клиента задач, которые используются для соответствия задачам на стороне сервера задач.
Здесь используйте conf
, чтобы упростить команду и переиспользовать конфигурационные файлы тестирования интеграции.
$ cd integration
$ mkdir -p rc/source rc/dest
$ gofs -conf=./testdata/conf/run-gofs-task-client.yaml
Если вам требуется синхронизация файлов между двумя устройствами, которые не могут установить прямое соединение, вы можете использовать обратный прокси как сервер-перехватчик. Подробнее см. также Промежуточный сервер (Релей).
Протокол источника удаленного сервера основан на URI, см. RFC Yöntem 3986.
Имя схемы — rs
.
Источник удаленного сервера использует 0.0.0.0
или другую локальную адресацию IP в режиме Удалённый сервер диска, и использует адрес IP или доменное имя в режиме Клиент удалённого диска.
Порт источника удаленного сервера, значение по умолчанию — 8105
.
Используются следующие параметры только в режиме Удалённый сервер диска:
Исправлено:
path
— фактический локальный каталог источника удалённого сервера диска
mode
— режим работы, в режиме удалённого сервера диска — server
, значение по умолчанию — режим клиента удалённого диска
fs_server
— адрес сервера файлов, например, https://127.0.0.1
local_sync_disabled
— отключение синхронизации изменений удалённого сервера диска в его локальном пути назначения, true
или false
, значение по умолчанию — false
#### ПримерНапример, в режиме Удалённого сервера диска.```text rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1 _/ _/ _/ _______________________________________________________________________/ | | | | схема хост порт параметр
### Управление API
Активируйте управляемый API на основе [Файлового сервера](#файловый-сервер) с помощью флага `manage`.
По умолчанию доступ к управляемому API предоставляется только с частных адресов и адресов loopback.
Вы можете отключить его, установив флаг `manage_private` в значение `false`.
```bash
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3 -manage
URL адрес для профилирования выглядит следующим образом:
https://127.0.0.1/manage/pprof/
Чтение конфигурации программы, по умолчанию возвращает конфигурацию в формате json
, и поддерживаются форматы json
и yaml
.
https://127.0.0.1/manage/config
Или используйте параметр format
для указания формата конфигурации.
https://127.0.0.1/manage/config?format=yaml
Используйте флаг report
для активации маршрута отчётного API и начала сбора данных отчёта, требуется также активация флага manage
.
Дополнительные сведения об отчётном API см. в разделе Отчётный API.
https://127.0.0.1/manage/report
```### Логгер
Логгер файла и консоли активируются по умолчанию, а логгер файла можно отключить, установив флаг `log_file` в значение `false`.
Используйте флаг `log_level` для установки уровня логгирования; по умолчанию установлено значение `INFO` (`DEBUG=0` `INFO=1` `WARN=2` `ERROR=3`).
Используйте флаг `log_dir` для установки директории лог-файла; по умолчанию это `./logs/`.
Используйте флаг `log_flush` для автоматического сброса логов с интервалом; по умолчанию установлено значение `true`.
Используйте флаг `log_flush_interval` для установки продолжительности интервала сброса логов; по умолчанию это `3s`.
Используйте флаг `log_event` для активации событийного логгирования, записывающегося в файл; по умолчанию установлено значение `false`.
Используйте флаг `log_sample_rate` для установки темпа выборки для выборочного логгера, значения которого находятся в диапазоне от 0 до 1; по умолчанию это `1`.
Используйте флаг `log_format` для установки формата вывода логов; текущие поддерживаемые форматы — `text` и `json`; по умолчанию используется формат `text`.
Используйте флаг `log_split_date` для разделения лог-файлов по дате; по умолчанию установлено значение `false`.
```bash
# Установите конфигурацию логгера в режиме "Local Disk"
$ gofs -source=./source -dest=./dest -log_file -log_level=0 -log_dir="./logs/" -log_flush -log_flush_interval=3s -log_event
json
и yaml
. Все поля конфигурации такие же, как и флаги, вы можете обратиться к примеру конфигурации Пример Конфигурации
или ответу API Конфигурации.
$ gofs -conf=./gofs.yaml
Вы можете использовать флаг checksum
для расчета контрольной суммы файла и вывода результата.
Флаги chunk_size
, checkpoint_count
и checksum_algorithm
действуют здесь так же, как и в разделе Локальный жесткий диск.
$ gofs -source=./gofs -checksum
$ gofs -h
$ gofs -v
$ gofs -about
gofs-webui — это веб-интерфейс для gofs
, который позволяет вам генерировать файл конфигурации gofs
через веб-интерфейс, что делает использование gofs
более удобным.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )