====== Synchronizace Google Drive z terminálu pomocí rclone ====== //Vytvořeno: **31.8.2026** | Aktualizováno: **~~LASTMOD~~**// [[https://rclone.org/drive/|rclone]] umožňuje z terminálu kopírovat a synchronizovat data do Google Drive včetně Google Shared Drive. Tento postup používá service account s přístupem pouze do jedné cílové složky; hodí se pro pravidelnou zálohu nebo zrcadlení dat z Linuxu. ===== Princip a oprávnění ===== Service account je samostatný technický účet Google s JSON klíčem. Je vhodný pro neinteraktivní běh na serveru nebo v plánované úloze, protože nepoužívá přihlašování uživatele v prohlížeči. ''root_folder_id'' v konfiguraci pouze určuje kořen, který rclone používá. Skutečné omezení přístupu řeší oprávnění v Google Drive: service account nesmí zůstat členem celého Shared Drive, má být nasdílený jen na cílovou složku. ===== Vytvoření service accountu v Google Cloud Console ===== Tady je konkrétní postup v [[https://console.cloud.google.com/|Google Cloud Console]]. Pro rclone není potřeba nastavovat domain-wide delegation ani přidělovat service accountu roli v IAM projektu. Přístup k datům se nastaví až sdílením složky v Google Drive. - V Google Cloud Console [[https://developers.google.com/workspace/guides/create-project|vytvoř nový projekt]], například ''firma-rclone-backup''. V horním přepínači projektů zvol **New project**, vyplň název a dokonči vytvoření. - Otevři **APIs & Services → Library**, vyhledej **Google Drive API** a klikni na **Enable**. Google tento krok popisuje v [[https://developers.google.com/workspace/guides/enable-apis|návodu na zapnutí API]]. {{.:pasted:20260831-135745.png}} - Otevři **IAM & Admin → Service Accounts** a klikni na **Create service account**. [[https://cloud.google.com/iam/docs/service-accounts-create|Google Cloud dokumentace]] tento průchod uvádí pod stejnými názvy položek. {{.:pasted:20260831-135935.png}} - Zadej název, například ''rclone-backup''. Google podle něj vytvoří ID i e-mail ve tvaru ''rclone-backup@ID_PROJEKTU.iam.gserviceaccount.com''. - Pokračuj přes **Create and continue**. Volitelné přidělení rolí pro projekt přeskoč a vytvoření dokonči tlačítkem **Done**. - V seznamu service accountů klikni na právě vytvořený e-mail, otevři záložku **Keys** a zvol **Add key → Create new key → JSON → Create**. - Prohlížeč stáhne [[https://cloud.google.com/iam/docs/keys-create-delete|JSON klíč]]. Ulož ho k rclone konfiguraci, například jako ''~/.config/rclone/service-account.json''. Tento soubor obsahuje soukromý klíč; po vytvoření jej Google už znovu nenabídne ke stažení. ===== Sdílení cílové složky ===== V Google Drive otevři konkrétní složku na Shared Drive určenou pro zálohy a přes **Sdílet** přidej e-mail service accountu. Pro zápis, čtení a případné mazání při použití ''rclone sync'' byl použit přístup **Content manager**. Pokud byl service account předtím přidán jako člen celého Shared Drive, odeber ho ze správy členů disku. Jinak bude mít přístup i mimo cílovou složku a ''root_folder_id'' nebude bezpečnostní hranice. ===== Konfigurace rclone ===== Přesnou cestu ke konfiguraci ukáže tento příkaz: rclone config file Pro běžné uživatelské spuštění bývá konfigurace v ''~/.config/rclone/rclone.conf''. Konfigurace remote pro konkrétní složku na Shared Drive vypadá takto: [gdrive-folder] type = drive service_account_file = /home/uzivatel/.config/rclone/service-account.json scope = drive team_drive = ID_CELEHO_SDILENEHO_DISKU root_folder_id = ID_CILOVE_SLOZKY ''team_drive'' je ID celého Shared Drive a přepíná rclone do režimu Shared Drive. ''root_folder_id'' je ID konkrétní cílové složky, kterou rclone považuje za svůj kořen. Obě ID jsou poslední částí URL po otevření příslušného disku nebo složky v prohlížeči. ===== Ověření omezeného přístupu ===== Pro ověření je vhodné ponechat původní remote mířící na celý disk, například ''gdrive-shared'', a vytvořit nový remote ''gdrive-folder'' s ''root_folder_id''. - Přístup k celému disku musí po odebrání service accountu z členů disku selhat nebo vrátit prázdný výsledek: rclone lsd gdrive-shared: - Přístup k povolené složce musí fungovat: rclone lsf gdrive-folder: - Nakonec je potřeba otestovat skutečný zápis a případné mazání, pokud bude použit ''rclone sync'': printf 'test\n' > /tmp/test-zapisu.txt rclone copy /tmp/test-zapisu.txt gdrive-folder: rclone lsf gdrive-folder: rclone delete gdrive-folder:test-zapisu.txt rm /tmp/test-zapisu.txt V tomto nastavení byl omezený přístup na jedinou složku ověřen v praxi. Pokud test selže, může Shared Drive zakazovat sdílení jednotlivých položek s účty, které nejsou členy celého disku. ===== Kopírování nebo synchronizace ===== [[https://rclone.org/commands/rclone_copy/|rclone copy]] přenáší jen nové nebo změněné soubory; identické soubory porovnává podle velikosti a času změny, případně kontrolního součtu. Na cíli ale nikdy nemaže soubory, které byly ze zdroje odstraněny. SOURCE_DIR="/data/co-chci-zalohovat" rclone copy "$SOURCE_DIR" gdrive-folder:aktualni \ --log-file="$HOME/.local/state/rclone-backup.log" \ --log-level INFO \ --transfers 4 \ --retries 3 ==== Proč cíl nesmí obsahovat datum ==== ''rclone copy'' je přírůstkový už sám o sobě, ale jen pokud stále porovnává stejný zdroj a stejný cíl. Cesta ''gdrive-folder:aktualni'' proto musí zůstat stejná. Nedávej do cílové cesty datum, například ''gdrive-folder:zalohy/$(date +%F)''. Rclone by každý den viděl novou prázdnou složku, neměl by s čím porovnávat a znovu by nahrál všechny soubory. Datum patří až do %%--backup-dir%%, kde se ukládají pouze nahrazené a smazané verze. [[https://rclone.org/commands/rclone_sync/|rclone sync]] vytváří zrcadlo zdroje: přenese pouze změněné soubory a na cíli odstraní to, co už ve zdroji není. Před prvním ostrým během je nutné příkaz spustit s %%--dry-run%%, protože ''sync'' může mazat data. SOURCE_DIR="/data/co-chci-zalohovat" REMOTE_AKTUALNI="gdrive-folder:aktualni" REMOTE_STARE="gdrive-folder:stare/$(date +%F)" rclone sync "$SOURCE_DIR" "$REMOTE_AKTUALNI" \ --backup-dir "$REMOTE_STARE" \ --log-file="$HOME/.local/state/rclone-backup.log" \ --log-level INFO \ --transfers 4 \ --retries 3 \ --drive-stop-on-upload-limit \ --dry-run -v Po kontrole výpisu se %%--dry-run%% odstraní. Volba %%--backup-dir%% nepřepisuje ani nemaže starou verzi natrvalo: přesune ji do ''stare/RRRR-MM-DD''. ''aktualni'' tak zůstává přesným obrazem zdroje, zatímco ''stare'' obsahuje změněné a smazané soubory. ===== Retence starých verzí ===== Složka ''stare'' roste podle množství změn. Po zvolené době retence lze staré soubory a prázdné adresáře odstranit například takto: rclone delete gdrive-folder:stare/ --min-age 90d rclone rmdirs gdrive-folder:stare/ --leave-root ===== Provozní limity Google Drive ===== Podle [[https://rclone.org/drive/|dokumentace rclone pro Google Drive]] je aktuálně možné nahrát přibližně **750 GiB za den**. Rclone tento limit označuje jako nedokumentovaný limit Google, takže se může změnit. Při dosažení limitu může běžný příkaz opakovat neúspěšné pokusy. Parametr %%--drive-stop-on-upload-limit%% rozpozná tento typ chyby a ukončí běh synchronizace. Další přenos je pak potřeba provést až po obnovení denního limitu. Pro stahování uvádí rclone limit přibližně **10 TiB za den**. Pro tento článek je důležitější uploadní limit, protože přenos probíhá z lokálního počítače na Shared Drive. ===== Další důležité chování ===== * Přírůstkovost funguje na úrovni souborů, nikoli jednotlivých změněných bloků uvnitř souboru. Pokud se změní část velkého souboru, Google Drive API vyžaduje nahrání celé nové verze souboru. * Soubory změněné nebo odstraněné při ''rclone sync'' se díky %%--backup-dir%% přesunou do ''stare/RRRR-MM-DD''. Bez něj ''sync'' maže soubory na cíli podle zdroje. * Pokud se místo service accountu použije interaktivní OAuth přihlášení v prohlížeči, je potřeba vytvořit vlastní OAuth ''client_id''. Sdílený ''client_id'' rclone se během roku 2026 ruší. Service account používající JSON klíč toto nastavení nepotřebuje. ===== Zdroje ===== * [[https://rclone.org/drive/|rclone – Google Drive backend, service account, root_folder_id, Shared Drive a limity]] * [[https://rclone.org/commands/rclone_copy/|rclone copy – kopírování bez mazání cíle]] * [[https://rclone.org/commands/rclone_sync/|rclone sync – zrcadlení a --backup-dir]] * [[https://developers.google.com/workspace/guides/create-project|Google – vytvoření Cloud projektu]] * [[https://developers.google.com/workspace/guides/enable-apis|Google – zapnutí Google Workspace API]] * [[https://cloud.google.com/iam/docs/service-accounts-create|Google Cloud – vytvoření service accountu]] * [[https://cloud.google.com/iam/docs/keys-create-delete|Google Cloud – vytvoření JSON klíče service accountu]]