RSS Telegram YouTube Apple Яндекс Spotify Amazon Почта

56. rclone under the hood

16.06.2024

Скачать

К списку выпусков

Ссылки выпуска:

Что такое rclone?

rclone - это rsync для облачных хранилищ. Однако её можно использовать и для работы с локальной файловой системой. Если вы хотите из командной строки копировать, скачивать, синхронизировать и даже монтировать облачные хранилища, то rclone для этого подойдет идеально. Среди популярных бэкендов:

Несмотря на множество контрибьюторов, проект, по большей части, поддерживается одним разработчиком из UK, Ником Крей-Вудом (Nick Craig-Wood). Проект написан на Go, 44k+ звезд на GitHub, более 700 контрибьюторов.

OpenStack - это IaaS платформа, набор открытых решений, с помощью которых можно сделать своё приватное обалако вроде AWS.

Что может rclone?

Есть набор расширяющих функционал виртуальных стораджей, из которых самые интересные это:

Как используют rclone?

Самое очевидное применение - это создания резервных копий в обалчном хранилище. Есть известное правило "3-2-1", касающееся бэкапов.

  1. Хранить три копии.
  2. Две из них локально, но на разных устройствах.
  3. Одна копия должна быть в облаке.

rclone идеально подойдет для решения этих задач.

Реализация интерактивной сборки конфига в CLI

Для работы с командной строкой используется популярный репозиторий spf13/cobra (36k stars). В качестве http мультиплексора и раутера используется легковесный go-chi/chi (17k stars).

Сбор иехрархической информации организован плоско: в настоящий момент ты находишься на определенном шаге и может перейти на любой другой. Состояние сохраняется в конфигруационном файле по мере ввода данных.

Встроенный ncdu

На моем Ubuntu Desktop я использую ncdu для быстрого визуального анализа самых больших по размеру директорий/файлов и так могу быстро освободить место на жестких дисках. В rclone есть встроенный ncdu

Удаленное управление rclode через HTTP API

rclone можно запустить в режиме API сервера для приема команд, которые он будет тут же исполнять. В этом режиме можно выполнять все те же команды, что и в CLI. Например, зарегистрировать хранилище и примонтировать его.

Пакеты fs и vfs

fs - это ключевой пакет проекта и здесь определены самые важные механики работы с файловыми ситемами. Пакет vfs обеспечивает высокоуровневый функционал вокруг fs: лок файлов, символические ссылки, кеширует директории и т.д. vfs предоставляет доступ к облачным объектам похожим образом на то, как это реализовано в пакете os.

Краткое представление о том как устроено приложение можно получить глянув на типы в пакете fs. В проекте 69 имплементаций этого Файловая система - это всё, что удовлетворяет интерфейсу fs.Fs, а именно:

В пакете 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{})
}