rclone - это rsync для облачных хранилищ. Однако её можно использовать и для работы с локальной файловой системой. Если вы хотите из командной строки копировать, скачивать, синхронизировать и даже монтировать облачные хранилища, то rclone для этого подойдет идеально. Среди популярных бэкендов:
Несмотря на множество контрибьюторов, проект, по большей части, поддерживается одним разработчиком из UK, Ником Крей-Вудом (Nick Craig-Wood). Проект написан на Go, 44k+ звезд на GitHub, более 700 контрибьюторов.
OpenStack - это IaaS платформа, набор открытых решений, с помощью которых можно сделать своё приватное обалако вроде AWS.
sync
позволяет однонаправленную
и двунаправленную синхронизацию
Есть набор расширяющих функционал виртуальных стораджей, из которых самые интересные это:
crypt
добавляет слой шифрования;
union
позволяет создать синтетический сторадж, объединяющий несколько других стоарджей для
чтения и записи;
Самое очевидное применение - это создания резервных копий в обалчном хранилище. Есть известное правило "3-2-1", касающееся бэкапов.
rclone
идеально подойдет для решения этих задач.
Для работы с командной строкой используется популярный репозиторий spf13/cobra
(36k stars).
В качестве http мультиплексора и раутера используется легковесный go-chi/chi
(17k stars).
Сбор иехрархической информации организован плоско: в настоящий момент ты находишься на определенном шаге и может перейти на любой другой. Состояние сохраняется в конфигруационном файле по мере ввода данных.
На моем Ubuntu Desktop я использую ncdu
для быстрого визуального анализа самых больших
по размеру директорий/файлов и так могу быстро освободить место на жестких дисках. В rclone есть
встроенный ncdu
rclone можно запустить в режиме API сервера для приема команд, которые он будет тут же исполнять. В этом режиме можно выполнять все те же команды, что и в CLI. Например, зарегистрировать хранилище и примонтировать его.
fs
- это ключевой пакет проекта и здесь определены самые важные механики работы с
файловыми ситемами. Пакет vfs
обеспечивает высокоуровневый функционал вокруг fs: лок файлов,
символические ссылки, кеширует директории и т.д. vfs предоставляет доступ к облачным
объектам похожим образом на то, как это реализовано в пакете os.
Краткое представление о том как устроено приложение можно получить глянув на типы в пакете fs
.
В проекте 69 имплементаций этого
Файловая система - это всё, что удовлетворяет интерфейсу fs.Fs
, а именно:
метод List
);
NewObject
);
Put
);
Mkdir
);
Rmdir
).
В пакете vfs
главный интерфейс - это Node:
type Node interface { os.FileInfo IsFile() bool Inode() uint64 SetModTime(modTime time.Time) error Sync() error Remove() error RemoveAll() error DirEntry() fs.DirEntry VFS() *VFS Open(flags int) (Handle, error) Truncate(size int64) error Path() string SetSys(interface{}) }