====== 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]]