Vault Obsidiana wprost z Dropboxa (rclone mount) — alias albo usługa systemd
Vault Obsidiana trzymam w Dropboxie, ale bez klienta Dropboxa. Zamiast synchronizować kilkadziesiąt gigabajtów na dysk laptopa, montuję folder z chmury jako katalog i otwieram go w Obsidianie. Robi to rclone mount przez FUSE — jedna komenda, zero demona synchronizacji, zero kopii lokalnej.
Ten post opisuje dwa warianty: alias (prostszy, ręczny) i usługę systemd użytkownika (montuje się sama, wstaje po padzie).
Jak to działa
Dropbox (chmura)
└── folder /Obsidian (w korzeniu konta)
│
│ rclone: remote "Obsidian", typ dropbox, token OAuth
│ rclone mount → FUSE (fuse3 / fusermount3)
▼
~/Obsidian ← punkt montowania (system plików fuse.rclone)
│
▼
Obsidian otwiera ten katalog jako vault
Kilka konsekwencji tej architektury, o których warto wiedzieć przed wdrożeniem:
- Nie ma kopii lokalnej. Pliki są czytane i zapisywane przez sieć na żywo. Po odmontowaniu
~/Obsidianjest pustym katalogiem, a Obsidian nie zobaczy żadnej notatki. - Klient Dropboxa nie bierze w tym udziału. Nie musi być zainstalowany.
- Bez sieci nie ma vaulta. To główny minus względem klasycznej synchronizacji — offline pracować się nie da.
- Duże pliki i załączniki będą wolniejsze. Każde otwarcie to round-trip do Dropboxa.
- Vault można współdzielić z innymi urządzeniami przez ten sam folder w Dropboxie, ale wtedy pojawiają się pliki konfliktowe (o tym w sekcji o problemach).
Kluczowa flaga to --vfs-cache-mode writes. Rclone buforuje wtedy zapisy lokalnie (w ~/.cache/rclone/vfs/) i dopiero potem wysyła je do chmury. Bez niej Obsidian się wysypuje — otwiera pliki do zapisu i modyfikuje je losowo, czego tryb domyślny nie obsługuje.
Co zainstalować
rclone i fuse
sudo apt install -y rclone, fuse3
Fuse na 26.04 praktycznie zawsze już jest. Potrzebne binarki (fusermount3, fusermount) przychodzą razem z fuse3.
Obsidian — bierz .deb, nie AppImage
# pobierz aktualny .deb z https://obsidian.md/download , potem (zwróć uwagę na "./"):
sudo apt install ./obsidian_*_amd64.deb
apt install ./plik.deb, a nie dpkg -i — apt sam dociągnie zależności (m.in. libxss1), zamiast zostawić pakiet w stanie half-configured i wymagać ratunkowego sudo apt -f install.
Pułapka: AppImage Obsidiana na 26.04
Nie używaj go, z dwóch niezależnych powodów:
- AppImage Obsidiana jest zbudowany pod FUSE 2, a 26.04 dostarcza FUSE 3 — może się w ogóle nie uruchomić.
- Od Ubuntu 24.04 obowiązuje
kernel.apparmor_restrict_unprivileged_userns=1, co wywala sandbox Electrona w AppImage'ach (błądThe SUID sandbox helper binary was found, but is not configured correctly).Obejścia krążące po internecie (
--no-sandbox,sysctl …userns=0,chmod 4755 chrome-sandbox) osłabiają bezpieczeństwo całego systemu. Wersja.debjest wolna od obu problemów — dostarcza własny profil AppArmor, który system ładuje automatycznie przy instalacji, i nie potrzebuje żadnych sztuczek.
Czego nie trzeba: klienta Dropboxa, nautilus-dropbox (rozszerzenie GNOME, na Plasmie bezużyteczne), bindfs, sshfs, davfs2, żadnej warstwy crypt w rclone.
Konfiguracja rclone
Cała konfiguracja to jeden remote w ~/.config/rclone/rclone.conf:
[Obsidian]
type = dropbox
token = <długi JSON z tokenem OAuth>
Nazwę remote'u ustaw świadomie — jest case-sensitive i będzie się do niej odwoływać i alias, i usługa. U mnie to Obsidian (wielka litera).
Od zera
rclone config
Odpowiedzi w kreatorze:
| Pytanie | Odpowiedź |
|---|---|
n/s/q> |
n (new remote) |
name> |
Obsidian |
Storage> |
dropbox |
client_id> |
(Enter — puste) |
client_secret> |
(Enter — puste) |
Edit advanced config? |
n |
Use web browser to automatically authenticate? |
y |
| potwierdzenie | y (keep this remote) → q (quit) |
Puste client_id/client_secret oznaczają, że używasz wbudowanego, współdzielonego app ID rclone. Plus: nic nie musisz zakładać w Dropbox App Console. Minus: współdzielony app ID bywa rate-limitowany przez Dropboxa przy dużym ruchu — co wraca w sekcji o Baloo.
Autoryzację przeprowadź w graficznej sesji swojego użytkownika, nie przez sudo — inaczej token wyląduje w /root/.config/rclone/rclone.conf.
Jak wygląda callback OAuth
Rclone podnosi lokalny serwer na
http://127.0.0.1:53682/i próbuje otworzyć go w domyślnej przeglądarce przezxdg-open. Jeśli okno nie otworzy się samo (bywa tak przy Firefoksie ze snapa, który ma ograniczony dostęp do/tmpi localhostu), nie panikuj — rclone wypisze URL na konsoli. Skopiuj go i wklej do przeglądarki ręcznie, autoryzacja zadziała identycznie. Jeśli callback zostaje odrzucony, zrób autoryzację w przeglądarce niesnapowej albo trybem headless (rclone authorize "dropbox"na innej maszynie).Bez GUI w ogóle — kreator sam podpowie ścieżkę headless.
Przeniesienie ze starej maszyny
Mój przypadek to przeniesienie ze starego lapka na nowy, więc mogłem wybrać szybką opcje, bo pomija OAuth:
mkdir -p ~/.config/rclone
# skopiuj rclone.conf ze starej maszyny (scp / zaszyfrowany nośnik), potem:
chmod 600 ~/.config/rclone/rclone.conf
⚠️ Pole token to poświadczenie OAuth dające pełny dostęp do Twojego konta Dropbox. Traktuj jak hasło: nie wysyłaj mailem, nie wklejaj do czatów, ticketów ani repozytoriów, nie wrzucaj do gita. Przenoś przez scp po SSH albo na zaszyfrowanym nośniku i po skopiowaniu ustaw chmod 600.
Jeśli po przeniesieniu rclone zgłosi token expired, invalid_grant albo HTTP 401 — odśwież autoryzację bez utraty resztek konfiguracji:
rclone config reconnect Obsidian:
Sprawdzenie, że remote w ogóle istnieje:
rclone listremotes # oczekiwane: Obsidian:
rclone about Obsidian: # powinno pokazać Total / Used / Free
Sposób 1: alias w ~/.bash_aliases
Wersja, na której jechałem dość długo. Ma tę zaletę, że katalog nie jest podmontowany, jeśli go nie potrzebujesz.
Cała „magia" to jedna linia:
alias mnt_obsidian="nohup rclone mount Obsidian:Obsidian ~/Obsidian/ --vfs-cache-mode writes &"
Dopisz ją do ~/.bash_aliases i przeładuj shell. Rozbiór składowych:
nohup … &— puszcza rclone w tle i odczepia od terminala, żeby mount przeżył zamknięcie okna. Ubocznym efektem jest plik-śmieć~/nohup.outw katalogu domowym.Obsidian:Obsidian— remoteObsidian, a w nim podfolderObsidian. Pierwszy człon to nazwa remote'u, drugi to ścieżka w chmurze. Chcąc zamontować cały korzeń konta, wpisz po prostuObsidian:.~/Obsidian/— punkt montowania.
Odmontowanie:
fusermount3 -u ~/Obsidian
Zalety: dwie minuty roboty, zero plików systemowych, montujesz tylko wtedy, gdy naprawdę chcesz.
Wady: po każdym restarcie trzeba wpisać komendę ręcznie. Jak proces padnie (suspend, zerwana sieć), nikt go nie podniesie
Sposób 2: usługa systemd użytkownika
Na nowym laptopie przesiadłem się na to i żałuję tylko tego, że nie zrobiłem tego wcześniej, bo korzystam z Obsydiana często. Mount wstaje sam po zalogowaniu i sam się restartuje po wywrotce.
Gotowy plik unitu leży w snippecie na Bitbuckecie jako rclone-obsidian.service. Zapisz go jako ~/.config/systemd/user/rclone-obsidian.service — to unit użytkownika, nie systemowy. Wszystkie istotne dyrektywy omawiam zaraz niżej, więc nie musisz go czytać w ciemno.
Aktywacja:
systemctl --user daemon-reload
systemctl --user enable --now rclone-obsidian.service
systemctl --user status rclone-obsidian.service
To ostatnie polecenie od razu powie Ci, czy działa. W poprawnym stanie zobaczysz Active: active (running), a w linii Status: bieżący stan cache'u VFS, wprost od rclone — łącznie z liczbą plików czekających na wysłanie do Dropboxa.
Podgląd logów na żywo:
journalctl --user -u rclone-obsidian.service -f
Co tu jest ważne
Type=notify. Rclone obsługuje sd-notify, więc sam mówi systemd „jestem gotowy" dopiero po faktycznym zamontowaniu. Dzięki temu usługi zależne od vaulta nie wystartują za wcześnie i nie zobaczą pustego katalogu. Działa to również w rclone 1.60.1 z apt.
%h zamiast ~. Systemd nie rozwija tyldy. %h to specyfikator, który podstawia katalog domowy użytkownika — dzięki niemu ten sam plik unitu jest przenośny między maszynami i kontami.
Ścieżka absolutna do binarki. Systemd nie korzysta z PATH tak jak shell. Wybór wariantu instalacji rclone przekłada się wprost na ExecStart:
| Instalacja rclone | ExecStart |
|---|---|
| apt (Wariant A) | /usr/bin/rclone |
| instalator rclone.org (Wariant B) | /usr/local/bin/rclone |
Sprawdź swoją przez command -v rclone i wstaw dokładnie tę wartość. Analogicznie fusermount3 — na 26.04 /bin to symlink do /usr/bin, więc oba zapisy działają, ale zweryfikuj przez command -v fusermount3.
Restart=on-failure + RestartSec=10. Tego właśnie brakuje w wariancie z aliasem: gdy rclone padnie na zerwanej sieci, systemd podniesie go po dziesięciu sekundach.
ExecStop z fusermount3 -u. Bez tego przy zatrzymaniu usługi w kernelu zostałby martwy wpis mounta, a ls ~/Obsidian witałoby Cię Transport endpoint is not connected.
Montowanie bez logowania do sesji graficznej
Domyślnie usługi użytkownika startują przy logowaniu i giną przy wylogowaniu. Jeśli mount ma żyć niezależnie od sesji (np. żeby był dostępny przez SSH po restarcie), włącz linger:
sudo loginctl enable-linger $USER
Sam tego nie włączyłem — vault potrzebuję tylko wtedy, gdy siedzę przy zalogowanym pulpicie.
Alias a usługa — nie łącz ich
Kiedy usługa jest włączona, alias przestaje być potrzebny i zaczyna szkodzić: próba mnt_obsidian na już zamontowanym katalogu skończy się błędem o niepustym mountpoincie.
Który wariant wybrać
| Alias | Usługa systemd | |
|---|---|---|
| Montuje się po restarcie | ręcznie | automatycznie |
| Wstaje po padzie procesu | nie | tak (Restart=on-failure) |
| Logi | nohup.out / brak |
journalctl --user -u … |
| Działa poza sesją graficzną | nie | tak (z enable-linger) |
| Nakład pracy | jedna linia | jeden plik + enable |
| Kontrola „montuję, gdy chcę" | pełna | trzeba stop/disable |
Alias broni się, jeśli vault otwierasz od czasu do czasu i wolisz mieć świadomą kontrolę. Do codziennej pracy usługa jest wyraźnie lepsza.
KDE: wyłącz indeksowanie mounta w Baloo
To najważniejsza różnica między GNOME a KDE w całej tej konfiguracji i pierwsza rzecz do zrobienia po zamontowaniu.
Plasma uruchamia w tle indeksator plików Baloo, który domyślnie indeksuje cały $HOME. Ponieważ ~/Obsidian leży wewnątrz $HOME, Baloo potraktuje go jak zwykły katalog lokalny i zacznie przeczesywać cały vault przez sieć — czytając każdy plik, żeby zaindeksować treść. Efekty:
- ciągły, niepotrzebny transfer z Dropboxa (przy vaulcie liczonym w dziesiątkach GB to bardzo dużo danych),
- puchnący cache VFS w
~/.cache/rclone/, - ospały mount i procesy
baloo_file_extractorżrące CPU, - w skrajnym przypadku rate-limiting po stronie Dropboxa (tym łatwiejszy, że app ID rclone jest współdzielony).
Na GNOME problem w tej formie nie występował, więc łatwo się na to nadziać właśnie przy migracji.
# Plasma 6 → balooctl6 (na Plasmie 5 binarka nazywa się balooctl)
balooctl6 config add excludeFolders ~/Obsidian
balooctl6 disable && balooctl6 enable # przeładowanie konfiguracji
# sprawdzenie:
balooctl6 config list excludeFolders
balooctl6 status
Poprawny wynik:
excludeFolders:
/home/sarniak/Obsidian/
Jeśli nie ma ani balooctl6, ani balooctl — Baloo nie jest zainstalowany i temat Cię nie dotyczy. Alternatywnie przez GUI: Ustawienia systemowe → Wyszukiwanie → Wyszukiwanie plików → dodaj ~/Obsidian i przestaw na „Nieindeksowany". Można też wyłączyć indeksowanie plików w ogóle (balooctl6 disable), jeśli nie korzystasz z wyszukiwania w KRunnerze i Dolphinie.
Podpięcie vaulta w Obsidianie
Uruchom Obsidiana po zamontowaniu i w oknie powitalnym wybierz „Open folder as vault" → ~/Obsidian.
Kolejność ma znaczenie podwójnie: montuj przed startem Obsidiana, a wykluczenie z Baloo zrób przed pierwszym dłuższym otwarciem vaulta — inaczej indeksator zacznie ściągać wszystko w tle, jeszcze zanim zauważysz problem.
Wtyczek, motywów ani ustawień nie trzeba przenosić. Siedzą w ~/Obsidian/.obsidian/, czyli wewnątrz vaulta, czyli w Dropboxie — przyjadą same razem z zamontowaniem remote'u.
Weryfikacja
Wszystkie kontrole zebrałem w skrypcie obsidian-mount-check.sh w tym samym snippecie na Bitbuckecie. Uruchom go po zamontowaniu:
./obsidian-mount-check.sh
Skrypt niczego nie zmienia, nie potrzebuje sudo i kończy się kodem zero tylko wtedy, gdy przejdzie wszystkie dziesięć kontroli: obecność rclone, istnienie remote'u, odpowiedź z Dropboxa (co wyłapuje też wygasły token), katalog montowania, wpis mounta w kernelu, żywy proces rclone, niepustą zawartość vaulta, stan unitu systemd oraz dwie kontrole specyficzne dla KDE i Debiana — wykluczenie vaulta z Baloo i to, czy Obsidian pochodzi z .deb, a nie z AppImage'a. Na innych systemach te dwie ostatnie raportują „nie dotyczy" zamiast zgłaszać błąd.
Gdybyś wolał sprawdzić to ręcznie, sedno siedzi w czterech rzeczach: typ fuse.rclone dla katalogu vaulta, sensowny rozmiar w df, żywy proces rclone mount i widoczne notatki po ls. Jeśli wszystkie cztery się zgadzają — działa.
Typowe problemy
Wolne działanie, przycinanie na dużych plikach
Częściowo wpisane w architekturę — pliki lecą przez sieć, a --vfs-cache-mode writes cache'uje tylko zapisy. Na KDE najpierw sprawdź jednak Baloo i Dolphina (niżej), bo to zwykle one są winowajcą, a nie same flagi rclone. Jeśli to nie to, warto rozważyć:
--vfs-cache-mode full— cache'uje też odczyty; ponowne otwieranie plików jest znacznie szybsze, ale zużywa miejsce w~/.cache/rclone/,--dir-cache-time 24h— rzadsze odpytywanie o listing katalogów,--poll-interval 15s— jak szybko mount zauważa zmiany zrobione z innego urządzenia.
KDE: nieustanny transfer i baloo_file_extractor na CPU
Baloo indeksuje mount — wróć do sekcji o Baloo. Diagnostyka:
balooctl6 status
ps -ef | grep [b]aloo
balooctl6 config list excludeFolders
Ograniczenia (świadome kompromisy)
- Bez sieci nie ma vaulta. To fundamentalna różnica względem klienta Dropboxa czy Obsidian Sync, które trzymają kopię lokalną. Jeśli notatki potrzebujesz w pociągu, to nie jest konfiguracja dla Ciebie.
- Dane w chmurze leżą niezaszyfrowane. Można to zmienić, dokładając remote typu
crypt, ale wtedy tracisz możliwość czytania notatek przez webowy interfejs Dropboxa i z urządzeń bez rclone. - Token OAuth w
rclone.confto pełny dostęp do konta. Plik z uprawnieniami 600 to minimum; token bywa unieważniany przez zmianę hasła Dropboxa albo odebranie dostępu aplikacji, więc miej pod rękąrclone config reconnect. - Współdzielony app ID rclone bywa rate-limitowany. Przy dużym ruchu warto założyć własną aplikację w Dropbox App Console i wpisać
client_id/client_secret. - Rclone z apt jest stary. Na Ubuntu 26.04 dalej 1.60.1. Nowszy upstream ma sporo poprawek właśnie w mount/VFS.
Podsumowanie
Cały mechanizm to jedna komenda rclone mount i jeden remote w konfiguracji rclone. Alias w ~/.bash_aliases wystarcza na start i jest w zasadzie darmowy, ale po każdym restarcie przypomina o swoim istnieniu. Usługa systemd użytkownika to jeden plik więcej i jedno enable — w zamian mount pojawia się sam, sam się restartuje po padzie i loguje się do journala, gdzie da się sprawdzić, co poszło nie tak.
Jeśli robisz to na KDE, dwie rzeczy zrób od razu, bo inaczej stracisz na nich pół dnia: wyklucz vault z indeksowania Baloo i weź Obsidiana z .deb, nie z AppImage'a.
Szybka ściąga
| Krok | Polecenie |
|---|---|
| Instalacja | sudo apt install -y rclone fuse3 |
| Konfiguracja remote'u | rclone config (typ dropbox, nazwa Obsidian) |
| Punkt montowania | mkdir -p ~/Obsidian |
| Mount ręczny | rclone mount Obsidian:Obsidian ~/Obsidian/ --vfs-cache-mode writes & |
| Odmontowanie | fusermount3 -u ~/Obsidian |
| Usługa: włączenie | systemctl --user enable --now rclone-obsidian.service |
| Usługa: stan i logi | systemctl --user status rclone-obsidian / journalctl --user -u rclone-obsidian -f |
| Mount bez sesji graficznej | sudo loginctl enable-linger $USER |
| KDE: wyklucz z Baloo | balooctl6 config add excludeFolders ~/Obsidian |
| Ponowna autoryzacja | rclone config reconnect Obsidian: |
| Weryfikacja | mount \| grep rclone + df -h ~/Obsidian |