Drücke „Enter”, um zum Inhalt zu springen.

OneDrive auf Linux Server als Speicherplatz einbinden

Manuel 20

Die letzten Tage war ich mit dem Thema beschäftigt, wie ich möglichst viel Speicherplatz für einen vernünftigen Preis bekomme und diesen unter Linux als Ablage für Backups usw. nutzen kann. Ich nutze schon seit einiger Zeit HiDrive von Strato, dennoch habe ich mal weiter geforscht und bin dabei auf Office365 gestoßen.

Office 365 hat man wohl eher auf dem Schirm, wenn es darum geht, stets aktuell mit dem heimischen Office zu bleiben. Es hat aber auch Speicherplatz inbegriffen und nicht gerade wenig: Pro Benutzer werden einem jeweils 1 TB an Speicherplatz angeboten.

Was sich in der Theorie ganz gut anhört, und in der Praxis unter Windows auch ganz gut ist, stellt eine Herausforderung unter Linux dar, zumindest wenn man von der Konsole aus arbeitet. Nach etwas Tüfteln und Ausprobieren bin ich aber auf eine Lösung gekommen, auch wenn mir noch Erfahrungswerte fehlen bei der Zuverlässigkeit.

Ich beschreibe mal die Wege, die Herausforderungen und meine Lösung:

Zugriff via davfs2

Kennt man sich etwas unter Linux aus und beschäftigt man sich mit Office365 OneDrive, liest man schnell, dass es die Möglichkeit gibt, über das WebDAV Protokoll auf die Dateien zuzugreifen. In der Regel funktioniert der Zugriff auf WebDAV unter Linux, wenn auch nicht immer performant oder ohne Komplikationen. Im Fall OneDrive haben wir es mit Komplikationen zu tun: Nutzt man das verbreitete FUSE Modul davfs2, erhält man beim Versuch die Freigabe einzuhängen, eine Fehlermeldung:

root@vmm-h01:/# mount -tdavfs,rw,_netdev -vv https://d.docs.live.net/xxxxxxxxx /media/cdrom
/sbin/mount.davfs: das Einhängen schlug fehl;
302 Found

Um es kurz zu machen: Auf diversen Seiten wird beschrieben, wie man den „persönlichen“ Pfad ermittelt um via WebDAV zugreifen zu können. Verwendet man den mit dem Modul, gibt es einen Redirect (HTTP Status Code 302), mit dem das Modul nicht umgehen kann.

Es gibt einige Bug Reports zu dem Thema auf der Internet-Seite von davfs2, aber keine wirklich einfachen Lösungen oder solche, die bereits eingeflossen wären in davfs2. Da das alles für mich nach zu viel Gefriemel ausgesehen hat, keine Lösung die ich weiterverfolgt habe.

Man liest, dass wohl das Einbinden unter Gnome oder KDE mit deren eigenen WebDAV Modulen wohl funktioniert, da ich aber den Zugriff „headless“ auf einem Server einrichten möchte, keine Option für mich.

Zugriff via RClone

Auf einer Internet-Seite bin ich auf eine Beschreibung gestoßen, wie sich OneDrive alternativ einrichten lässt, und zwar mit der Software RClone.

Die Einrichtung mit der Software ist tatsächlich auch recht einfach. Es empfiehlt sich, von der RClone die aktuellste Version herunterzuladen. Bei meinen Tests mit der bei mir in Debian 9 vorhandenen Version hatte ich Probleme, die mit der aktuellen Version nicht auftraten.

Dazu habe ich in meinem Fall die aktuelle Version 1.46 auf dem Server heruntergeladen und anschließend installiert mit

apt install /tmp/rclone-v1.46-linux-amd64.deb

und mit

rclone config

die Konfiguration gestartet. Es wird dann ein Menü angezeigt:

root@vmm-h01:/# rclone config
Current remotes:

Name Type
==== ====

n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q>

Ruf dann den Punkt „New remote“ auf durch drücken der Taste n + ENTER. Anschließend werden ein paar Fragen gestellt, die man wie nachfolgend zu sehen beantwortet (in dem Beiespiel benenne ich die Verbindung „onedrive-laufwerk“):

e/n/d/s/q> n
name> onedrive-laufwerk
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> onedrive
Microsoft App Client Id - leave blank normally.
client_id>
Microsoft App Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code…

An dem Block folgt eine kleine aber keine wirklich große Herausforderung: RClone möchte, dass du eine URL aufrufst, die aber nur lokal auf dem Server (=127.0.0.1) erreichbar ist. Hierfür greifen wir auf Trick 17 zurück, wir tunneln via SSH einfach den Port auf den heimischen Rechner mit Internet-Browser und rufen dort die Adresse auf. Hierfür nutze ich im Beispiel PuTTY, das geht aber prinzipiell auch mit jedem anderen SSH Client, der das Tunneln von Ports erlaubt.

Auf folgendem Screenshot sieht man, wie in der SSH Verbindung noch ein Tunnel für die URL eingerichtet wird, die von RClone angezeigt wird. Wichtig ist hierbei der Port sowie die Adresse 127.0.0.1.

PuTTY Einstellungen

Hat man sich erfolgreich via SSH verbunden, kann man im lokalen Browser von dem Rechner von dem man sich aus verbunden hat, identisch die Adresse aufrufen, die RClone anzeigt. Hat man dort dann bestätigt dass man den Zugriff erlaubt, geht es auch schon weiter auf der Konsole:

Got code
2019/03/10 14:49:26 Failed to save new token in config file: section 'onedrive-laufwerk' not found
--------------------
[onedrive-laufwerk]
client_id =
client_secret =
token = {"access_token":".............","token_type":"bearer","refresh_token":".............","expiry":"2019-03-10T15:49:26.85383504+01:00"}

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
onedrive-laufwerk onedrive

e) Edit existing remote
n) New remote
d) Delete remote
s) Set configuration password
q) Quit config
e/n/d/s/q>

Das war es an der Stelle mit der Konfiguration, mit q kann man dann RClone verlassen. Jetzt kann man auch schon testen, ob alles wie gewünscht funktioniert. Dafür ruft man auf:

rclone mount onedrive-laufwerk: /mnt

Das bedeutet in dem Fall, dass die auf den Namen onedrive-laufwerk eingerichtete Verbindung auf das Verzeichnis /mnt eingehängt wird. In einem zweiten Shell-Fenster kann man dann auch mal auf /mnt zugreifen und sollte die Inhalte von OneDrive sehen können.

Mit CTRL+C kann man dann dann den Test abbrechen.

Jetzt fehlt eigentlich nur noch eine Sache: Automatisches Einbinden der Freigabe beim Systemstart.

Hierfür rufst du die Seite https://github.com/rclone/rclone/wiki/rclone-mount-helper-script auf und speicherst das Skript am Seitenanfang auf dem Zielrechner ab. Ich habe es bei mir mit dem Namen rclonefs unter /usr/local/bin abgelegt und anschließend natürlich noch die Datei mit chmod 755 ausführbar gemacht.

Jetzt kannst du in der Datei /etc/fstab einen Eintrag wie folgt hinzufügen:

rclonefs#onedrive-laufwerk:/  /mnt/onedrive-laufwerk  fuse config=/root/.rclone.conf,allow-other,default-permissions,max-read-ahead=16M 0 0

Zu beachten ist, dass unter /mnt das Verzeichnis onedrive-laufwerk angelegt wurde, in welches dann die OneDrive-Freigabe rein gemountet wird und der Pfad zur Konfigurationsdatei, hier /root/.rclone.conf angegeben wird.

Das war es dann auch soweit: Bei mir wird jetzt alles eingebunden und ich kann den Speicherplatz nutzen 🙂

  1. Andreas Fragnicht Andreas Fragnicht

    Vielen Dank, der Artikel war sehr hilfreich.
    Meine Distri hat allerdings etwas mehr Ordnung in den Konfigurationen deswegen lautet der Pfad für die fstab bei mir /root/.config/rclone/rclone.conf
    Nur für den Fall, dass jemand da Probleme hat.

  2. Sebastian Sebastian

    Vielen Dank für den Artikel! Hat mir geholfen das letzte Quäntchen meiner Backup Konfiguration fertigzustellen! 🙂

  3. Chris Chris

    Sehr interessanter Artikel, vielen Dank! Ich versuche das Ganze auf einem Raspberry Pi 3B. Das Aufsetzen und manuelle Mounten klappt auch prima, ist sogar noch etwas einfacher, da der Pi ja auch eine GUI hat und man den Browser aufrufen kann.
    Was jedoch nicht klappt, ist der Automount per /etc/fstab. Aus dem Syslog erkennt man leider die Ursache nicht, dort steht, dass /mnt/onedrive-laufwerk gemountet wurde…
    Irgendwelche Ideen?

    • Manuel Manuel

      Wichtig wäre, dass du das erwähnte Skript rclone-fstab-mount-helper-script angelegt und auf ausführbar gesetzt hast. Sollte das soweit passen, kannst du mal probieren, auf der Kommandozeile mit
      mount -a
      das Mounten der RDrive fstab Eintrages zu erwzeingen und dann kannst du schauen, was passiert. Fehlermeldungen solltest du möglicherweise mit
      dmesg
      oder
      tail -200 /var/log/syslog bzw tail -200 /var/log/messages
      finden können.

      • Chris Chris

        mount -a funktioniert. Ein Hinzufügen von

        @reboot (sleep 30; mount -a)&

        in die /etc/crontab führt dann auch dazu, dass nach Boot gemountet wird, Problem gelöst.

        Ich versuche das Ganze in Kombination mit rsync als Backup-Ziel eines Synology-NAS, da dessen Hyper Backup von Hause aus kein Onedrive unterstützt. Mit meinem Onedrive for Business Account funktioniert das aber leider nicht zuverlässig, weder auf dem Pi (dort gar nicht) noch auf einem Rootserver (dort extrem langsam). Möglicherweise hat rsync Probleme mit per rclone eingebundenen Verzeichnissen, habe leider noch keine Lösung.

  4. Stephan Stephan

    Via Webbrowser habe ich Einsicht (Leserechte) in ein OneDrive vom Verein. Dazu habe ich keine Login Credentials (weder vom Verein noh von O365/MS).

    Meine Frage ist nun: wie lautet die Anwendung von rclone, um auch ohne Credentials eine Einblendung in den Linux Dateisystembaum herzustellen? (RO, wie z.B. eine CD-ROM)

    —–
    Mein Workaround war, den Link „Download as Zip“ solange zu unteruchen bis ich ihn mit CURL einsetzen konnte. „war“, weil das OD-System nicht in der Lage ist „grosse“ Dateien rauszugeben: der Transfer der Zipdatei bricht cloudseitig einfach nach 4GB ab… 🙁

  5. Manfred Manfred

    Hallo,
    es ging alles super lt. der Beschreibung bis zu dem Befehl:
    Use auto config?
    *say y of not sure
    dies führte ich aus,
    dann folgte ein neues Fenster im Browser mit folgender Meldung:
    unautorized_client: The client dors not exist or is not enabled for consumers. If you are the application developer, configure a new application through the App registrations in the Azure portal at https://go.microsoft.com/fwlink/?linkid=2083908.

    Jetzt bräuchte ich weitere Hilfe um das Einbinden von OneDrive bzw. Office 365 personal abzuschließen, was muss ich tun?

    Vielen Dank für die Unterstützung im Voraus

  6. Alexander Alexander

    Sehr gute Anleitung. War mit webdav verzweifelt, rclone lief problemlos nach der Anleitung.

    Einzig Verzeichnisse, die mir von Dritten geteilt wurden sehe ich nach dem mounten nicht. Gibt es Tipps, wie man die angezeigt bekommt?

  7. Lisan Lisan

    Ich komme an einer Stelle nicht weiter.

    rclone mount onedrive: /mnt
    2020/07/22 13:48:09 Fatal error: Directory is not empty: /mnt If you want to mount it anyway use: –allow-non-empty option

    pi@Plex-Imperium:~ $ rclone mount onedrive: /mnt –allow-non-empty
    2020/07/22 13:48:43 mount helper error: fusermount: user has no write access to mountpoint /mnt
    2020/07/22 13:48:43 Fatal error: failed to mount FUSE fs: fusermount: exit status 1

    Irgendwelche Ideen?

    • Manuel Manuel

      Also wie die Meldung schon sagt, liegen irgendwelche Dateien oder Verzeichnisse in /mnt weshalb sich RClone weigert, das Ziel dort einzubinden. Solltest du prüfen, was dort liegt, ob es wichtig ist oder nicht. Das kann ich schlecht beurteilen 😉

      • Lisan Lisan

        Ich wollte dem ganzen nun so entgehen:

        mkdir /mnt/onedrive

        Danach habe ich noch einmal den Befehl ausgeführt.

        rclone mount onedrive: /mnt/onedrive

        Danach passiert leider nicht mehr. Dann bleibt nurnoch mit STRG ^ C abzubrechen.

        Leider bin ich nicht sehr bewandert mit Linux :/

        • Manuel Manuel

          Tut mir leid, aber auf die Entfernung kann ich dir ohne weitere Informationen leider schlecht weiterhelfen. Ggf. findest du bei rclone etwas dazu, wie du z.B. ein Debugging aktivieren kannst um zu sehen, was passiert (oder auch nicht)

    • Manuel Manuel

      Der Pfad hat sich leicht verändert gehabt, habe ihn aktualisiert! 🙂

  8. Chris Chris

    Hi, ich stecke an einem blöden Problem ganz am Anfang fest – wie muss der Browser für den Proxybetrieb konfiguriert werden? Insbesondere – welcher port?

    Putty konnte ich konfigurieren, wie auf dem Bild angezeigt und kann mich auch im Server einloggen.

    Aber die Proxy-Konfiguration im Browser verlangt ja auch einen port. Habe 53682 probiert im Foxyproxy (Firefox) – kein Erfolg. In den Proxyeinstellungen des IE kann man nur einen vierstelligen port angeben.

    Wäre sehr dankbar für einen Hinweis!
    Danke
    Chris

  9. Joe Joe

    Servus!
    Diese Anleitung ist eigentlich spitze, ich bekomme vieles hin, lediglich der Mount mit den Dateien erscheint nicht – Ordner bleibt leer!

    Letztlich frage ich mich, ob die Installation von RCLONE und der Eintrag zu OneDrive mit Root erfolgen muss, ober das ganz mit dem gewöhnlichen Standardnutzer funktioniert?

    • Lucius Lucius

      Hallo Joe,
      vielleicht bist du ja in die gleiche Falle gelaufen wie ich zuerst. Die mount-Synopsis lautet:
      rclone mount remote:path /path/to/mountpoint [flags]

      Wichtig ist ‚:path‘. Wenn ich also ein remote ‚rmt‘ eingerichtet habe, könnte ein mount-befehl dafür so gehen:
      rclone mount rmt:/ /mnt

      Ich hatte zunächst ‚rmt‘ statt ‚rmt:/‘ versucht und hatte dann ohne Fehlermeldung ein leeres Dateisystem am mount-point.

  10. Frank Frank

    Leider bekomme ich nur folgende Fehlermeldung wenn ich in der Konsole den Prozess anstoße:
    „didn’t find section in config file“

    • FRank FRank

      Ich muss mich korrigieren, das war mein Fehler, hab die Bezeichnung nicht angepasst.
      Nach dem Anpassen dann das: „Fatal error: failed to mount FUSE fs: fusermount: exit status 1“

  11. Luicius Luicius

    Hallo Nerd,
    wollte einfach nur danke sagen! Ich kannte rclone vorher nicht und muss sagen, ich bin begeistert! Habe es inzwischen ohne größere Problem für MS-Onedrive und google photos ausprobiert. Ohne Leute wie Dich, die ihre findings auch veröffentlichen, würde ich mich wahrscheinlich immer noch mit irgendwelchen dubiosen webdav-Schnittstellen beschäftigen, um an meine cloud-Daten ranzukommen.
    An dieser Stelle (wenn es erlaubt ist) auch großen Dank an die rclone-Leute. Bislang kann ich nur sagen: ein feines Stück Software. Vielleicht noch eine Meldung einbauen, wenn der mount-Befehl ins Leere führt.

Schreibe einen Kommentar zu Sebastian Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.