USB-Stick, SDD in Nextcloud docker einbinden

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Guten Tag allerseits!

    Mein Name ist Peter und ich bin neu hier. Danke, dass ich dabei sein darf.
    Ich bin mir nicht ganz sicher, ob mein Thema jetzt zur hardware oder software gehört.
    Ich habe jetzt verschiedene Forumseiten, Youtube-Videos und wikis gelesen. Mein Problem konnte ich damit nicht lösen.

    Meine Zielsetzung:
    Nextcloud über docker und portainer installieren und dann eine externe SSD am USB-Port anstecken. Hierauf sollen dann via vpn die Daten geschrieben werden. Nextcloud läuft auf der SD-Card, aber alle anderen Daten möchte ich auf die SSD schreiben. Eventuell mal eine zweite Festplatte dazu hängen, dann mittels Hub damit genug Strom vorhanden ist.

    Was ich bis jetzt getan habe:
    Ich habe mir vor 10 Tagen einen Raspberry 4 mit 4GB Ram gekauft (das ist nicht mein erster Raspberry). Raspberian Lite installiert, updates und upgrades gemacht, ssh aktiviert und im Anschluss Docker und Portainer installiert.
    Im Anschluss habe ich in Portainer Nextcloud installiert (Image https://hub.docker.com/_/nextcloud) Allerdings habe ich keine MariaDB oder sql angelegt sondern verwende das LiteSQL. Vielleicht schon der erste Fehler, leider kenne ich mich mit SQL-Datenbanken überhaupt nicht aus.
    Nextcloud läuft soweit und ist auch übers Handy von außerhalb erreichbar. Da der Speicher jedoch sehr gering ist habe ich zu Testzwecken einen USB-Stick angeschlossen.

    Der USB-Stick ist auf ext4 formatiert und in einem neuen Verzeichnis /media/usbstick gemountet. Habe das auch dauerhaft in die fstab Datei geschrieben, damit der mount beim reboot bleibt.

    Im Anschluss habe ich noch die Rechte geändert. Ich glaube hier liegt das Hauptproblem! (sudo chown -R www-data:www-data /media/usbstick) Das habe ich auch hier im Forum und in anderen Foren gelesen. Ich glaube, dass ich den USB-Stick oder dann die SSD noch mit dem Dockercontainer mounten muss. Ich weiß aber leider nicht wie. Außerdem habe ich immer noch Probleme die Rechte und IDs der Docker Container auszulesen, die Befehle die ich kenne (sudo docker volume inspect [volume name]; docker ps; . Vermutlich stimmen die Rechte nicht überein.
    Über Nextcloud habe ich die externen storage aktiviert und hier hätte ich dann mittels dem Mountpoint /media/usbstick den USB-Stick gerne eingebunden. Das funktioniert leider nicht.
    Was mache ich falsch?

    Vielen Dank für die Hilfe :danke_ATDE:

  • Guten Tag!


    Eine kurze Ergänzung. Ich verstehe nicht was passiert ist ich habe Zugriff auf den USB-Stick allerdings nicht so wie beabsichtigt


    Ich habe die UID des Docker Container auf der Nextcloud liegt erfragt, sowohl UID als auch Gruppe sind 33 (www-data).
    Ich habe den USB-Stick mit

    sudo chown -R www-data:www-data /media/usbstick auf die gleichen Rechte gebracht. Das Verzeichnis usbstick hat auch UID 33 und ich komme mit sudo cd /media/usbstick nicht mehr auf das Verzeichnis.

    Heute habe ich in Nextcloud bei externe storage den Pfad /media/ eingegeben und der Stick war da. Das ist aber so nicht gedacht, weil jetzt ja Nextcloud auf alle medien zugreift (soweit ich das verstanden habe). Wenn ich jetzt einen weiteren USB-Stick anhänge wird das vermutlich zu Problemen führen.

    Liege ich da richtig?


    Noch eine Frage: Der USB-Stick ist nur als Test gedacht gewesen. Wie hänge ich diesen wieder sicher aus. Ich möchte das ja auch bei meiner SSD haben. Falls ich mir den Container zerschieße, sollen die Dateien noch auf der SSD sein.


    Danke

  • Ich kenne zwar weder Nextcloud, noch Docker, aber gemountet wird üblicherweise mit "mount" und "umount" hängt die Partition wieder aus.


    Gemounted wird auf einen Mountpoint, der vom Admin mit mkdir zu erstellen ist.

    Soll auch neben root ein User mounten dürfen, ist die Option user bzw. users in den Mountbefehl aufzunehmen.

    Grundsätzlich soll nicht mit dem Device-Deskriptor (/dev/sda1), sondern mit der UUID, PARTUUID, oder dem LABEL der zu mountenden Partition gemounted werden.

    Die Option "nofail" verhindert das Anhalten des Mount Programmes beim Abarbeiten der fstab, falls das Gerät nicht angeschlossen ist.


    < man mount > und < man fstab > beschreibt die Verwendung des mount Befehles und den Eintrag in die /etc/fstab


    Die alternative Verwendung einer systemd-mount Unit ist nur für versierte Admins zu empfehlen.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Guten Tag!

    Danke für deine Antwort RTFM.
    Ich bin quasi Anfänger. Ich habe auf meinen ersten Raspberry motioneye installiert und eine Kamera vor dem Gefrierschrank aufgestellt, damit ich weiß wer mir meine Eiscreme wegfuttert. Das war einfach mal zum Probieren. Mich hat gestört, dass ich nur ein Programm darauf laufen lies. Ich habe dann die docker und Portainer Umgebung entdeckt und damit herumgespielt. Jetzt läuft motioneye und eine abgespeckte Version von Home Assistant darauf.

    Eigentlich dachte ich, dass es das Einfachste bei der ganze Sache ist. Die Festplatte formatieren und dranhängen. Aber naja...

    Meine Schritte wie ich den USB-Stick bearbeitet habe:

    • lsblk um den USB-Stick zu erkennen: bei mir sda1
    • sudo fdisk /dev/sda m p um zuerkennen ob schon etwas formatiert ist
    • g für neue partition table, n für neue Partition alles als default, w write
    • neues Filesystem draufgespielt: sudo mkfs.ext4 /dev/sda1
    • sudo mkdir /media/usbstick
    • nano /etc/fstab
    • /dev/sda1 /media/usbstick ext4 default 0 0
    • mount -a
    • ich habe dann sogar nochmal ein reboot gemacht

    Danach habe ich noch die Rechte des Docker Container ermittelt mit docker exec -u www-data NextcloudNeu id siehe Bild

    Da die Rechte des USB-Stick auf den Benutzer gelegt waren habe ich diese geändert.

    • sudo chown -R www-data:www-data /media/usbstick

    das hat geklappt siehe nächstes Bild. Da ich jetzt gelesen habe, dass ich vielleicht nochmal neue schreib- und lese-Rechte vergeben muss habe ich das auch noch gemacht.


    • sudo chmod -R 0750 /media/usbstick


    Das hat alles nicht geholfen in Nextcloud wird der USB-Stick unter externe Speicher nicht erkannt. Der Pfad ist /media/usbstick.

    Nur /media oder /media/ wird von Nextcloud akzeptiert das ist aber meinem Verständnis nach nicht richtig, weil under /media ja alle externen Datenträger hängen. Man kann so auch keine Daten hochladen.


    Ich habe wirklich viel durchgelesen und auch die Beschreibung in docker. Alles habe ich sicher nicht verstanden, weil ich zu wenig in der Materie bin. Außerdem zeigt meine Erfahrung immer wieder, dass das Lesen alleine nichts bringt, klingt alles logisch und wenn man es dann selbst nach macht funktioniert es nicht. Deshalb irgendwann einfach mal machen und schauen. Jetzt bin ich halt an einem Punkt an dem ich nicht mehr weiter komme.

    Der größte Unterschied zu den ganzen anderen Videos und Quellen, die ich bis jetzt gelesen habe, ist jener, dass ich Nextcloud über docker laufen lasse. Das erschien mir eine gute Idee, weil das Hauptprogramm kompakt in einem container ist und die Daten (Bilder,...) einzig auf der externen Festplatte liegen.

    Ich probiere weiter und sage euch Bescheid, sollte ich eine Lösung gefunden haben. Vielleicht fällt auch jemanden von hier noch etwas ein, der mit der Materie mehr vertraut ist.

    Mit freundlichen Grüßen Peter

  • Mir ist nicht ganz klar, wie du die Verzeichnisse deines NextCloud Containers auf deinen USB Stick/Drive mappst.


    Normalerweise geschieht das im Docker über sogenannte "Bind Mounts" oder "Volumes". Sie werden beim Erstellen eines Containers mit `docker create ...` oder `docker run ...`mit dem paramater --mount, oder --volume, bzw -v festgelegt. Damit lässt sich dein gewünschtes Verzeichnis auf der USB-Festplatt dem NextCloud Datenverzeichnis zuweisen.


    Der erste Start von NextCloud könnte dann irgendwie so aussehen:

    Code
    docker run -d -v /media/usbstick/var/html:/var/www/html nextcloud

    Sowas fehlt mir bei all dem was du geschrieben hast.


    Auf diese Art werden die Daten auf dem USB Stick, bzw. Festplatte/Stick beim löschen des Containers dann auch nicht gelöscht. Wie das unter Portainer bewerkstelligt wird weiss ich allerdings auch nicht, da ich Portainer nicht nutze.

  • Hallo pgloor!

    Vielen Dank für deinen Antwort.

    Ja vielleicht liegt es daran. Ich habe das ganze Mapping über Portainer gemacht. Im Prinzip geht es in Portainer gleich nur, dass man eine GUI hat. Ich bin mit der Konsole leider nicht so bewandert. Ich habe also einen neuen Container erstellt, das image von dockerhub (https://hub.docker.com/_/nextcloud) verwendet und dann die volume wie folgt angelegt (Bild von Portainer im Anhang):

    Code
    $ docker run -d \
        -v nextcloud:/var/www/html \
        -v apps:/var/www/html/custom_apps \
        -v config:/var/www/html/config \
        -v data:/var/www/html/data \
        -v theme:/var/www/html/themes/<YOUR_CUSTOM_THEME> \
        nextcloud

    Wenn ich dich richtig verstanden habe sollte ich das volume data hier ersetzen und statt

    -v data:\var/www/html/data


    das Volume so bezeichnen


    -v /media/usbstick:/var/www/html/data

    Edit: Habe ich probiert das geht nicht.

    Oder muss ich das Datenbank-Verzeichnis bei der Inititiation von Nextcloud ändern. Standardmäßig steht da ja /var/www/html/data

    Wenn ich das dann mit der SSD mache, muss diese also bevor der Container gestartet wird am Raspi hängen und gemountet sein.

    Vielen Dank

  • Ich sehe, da gibt es unter NextCloud offenbar ganz viele Verzeichnisse, die irgendwie zugeordnet werden müssen. Da ich NextCloud nicht kenne, kann ich dazu nicht viel sagen. Ich kann dir höchstens sagen, wie Docker die Daten verwaltet.


    Dazu zuerst eine kurze Erklärung. Ohne weiteres zutun verwaltet Docker seine Objekte alle unter dem Verzeichnis /var/lib/docker/. Darin gibt es verschiedene Unterverzeichnisse, wobei containers, image, network, volumes und overlay2 zu den wichtigsten gehören. Die Dateien in diesen Verzeichnisse beschreiben die Docker-Objekte, oder enthalten selber Verzeichnisstrukturen mit den zu einem Container oder einem Docker Volume gehörenden Dateien.


    Docker verwendet normalerweise zur Verwaltung des Inhalts der Container den overlay2 Storage Driver. Wird jetzt z.B. ein Container mit dem Namen mein-container angelegt, dann werden unter /var/lib/docker/containers/main-container/ diverse Dateien angelegt, die den Container beschreiben.


    Gleichzeitig werden unter /var/lib/docker/overlay2 mehrere Unterverzeichnisse mit den Verzeichnis- und Datenstrukturen innerhalb des Containers angelegt. Da diese Verzeichnisse über Schlüssel angelegt sind, ist es nicht ganz trivial, zu erklären, welches Verzeichnis zu welchem Container gehört.


    Werden im erstellten Container Dateien angelegt oder verändert, so sind die auch noch vorhanden nachdem der Container gestoppt und wieder gestartet wurde.


    Wird ein Container aber gelöscht, dann werden auch seine Verzeichisse mit allen darin enthaltenen Daten unwiederbringlich gelöscht!


    Dabei soll gleich mal gesagt werden, dass man NIEMALS in diese Verzeichnisse eingreifen sollte. Alles was sich unter /var/lib/docker/ befindet gehört Docker!!!


    Damit man seine Daten aber getrennt von Container, aber immer noch unter innerhalb des Docker Systems halten kann, gibt es die Docker Volumes. Sie befinden sich unter /var/lib/docker/volumes. Wird ein Container gelöscht, dann bleiben die Volumes immer noch erhalten und können einem anderen Container wieder zugeordnet werden. So kann ich z.B. eine alte Version eines Containers, oder eine geänderte Konfigurtion einfach durch eine neue Version ersetzen und beim Erstellen des neuen Containers das Volume wieder zuordnen. Das ist der Weg den ich meistens nutze. Das gibt mir grosse Flexibilität.


    Es gibt allerdings noch einen heiklen Punkt. Der Befehl docker volume prune löscht sämtliche zum Zeitpunkt nicht benutzten Volumes.


    Die nächste Möglichkeit, mit der man jetzt seine Daten völlig ausserhalb des /var/lib/docker/ Verzeichnisses halten kann, sind die Bind Mounts. Es mag Gründe geben --bind zu verwenden, aber ich benutze immer die Form -v /verzeichnis-auf-host/:/docker-internes-verzeichnis/, wobei die Angabe des Host-Verzeichnisses auch relativ zum Verzeichnis sein kan, aus welchem der Container gestartet wird.


    Noch kurz zu den Rechten. Es kommt jetzt drauf an wie dein Docker konfiguriert ist, bzw. wie deine Container laufen. Läuft alles privilegiert unter root ab, dann ist root sowieso der Owner und kann alles überschreiben. Läuft der Container aber unter einem unprivilegiertem User, dann muss das Verzeichnis bereits bestehen und der User muss die Rechte auf dieses Verzeichnis haben.


    Wie auch immer, das angegebene Verzeichnis muss natürlich in deinem Fall zum Zeitpunt bei dem der Container gestartet wid bereits gemountet sein und für den Zugriff als User, unter dem der Container läuft, mit allen benötigten Rechten zugänglich sein.


    Abschliessend muss ich noch erwähnen, dass ich noch nie versucht habe, Daten auf ein anderes Laufwerk, als dem auf dem auch der Container läuft, auszulagern. Ich habe leider keinen Pi zur Hand mit dem ich das gerade ausprobieren könnte.


    Wenn du dich mit Docker unsicher fühlst, dann würde ich dir raten, dir ein paar Tage Zeit zu nehmen und dich damit ganz ohne Portainer und NextCloud zu befassen. Einfach mal ein paar Container hochziehen um damit zu spielen, Ports zuweisen, Verzeichnisse mounten, Volumes und evtl. sogar Networks zu nutzen. Portainer würde ich erst nutzen, wenn ich das, was darunter liegt, verstanden habe und nicht umgekehrt. Und "last, but not least", mach dir auch Gedanken darüber, wie du deine NextCloud am besten sichern kannst.

  • Hier gibt es auch noch etwas zum Thema:

  • Um der Sache auf die Sprünge zu helfen, habe ich heute auf einer frischen 32GB µSD Karte Raspberry Pi OS (64 bit) mit Docker, sowie Portainer und NextCloud installiert. Nachdem soweit alles geklappt hat, bin ich einen Schritt weiter gegangen und habe eine freie 64 GB Partition von meiner USB SSD eingebunden. In einem letzten Schritt habe ich einen neuen NextCloud Container angelegt, bei dem ich die Konfiguration so angepasst habe, dass alle Daten von NextCloud auf der freien Partion der SSD liegen.


    Bei meinem Vorgehen habe ich möglichst alles was störenden Einfluss haben könnte bei Seite gelassen. Das heisst insbesondere, dass ich Docker als voll-privilegierten Dienst und nicht im Rootless Modus betreibe. Nicht privilegierte User, wie pi, können Docker aber trotzdem ausführen, wenn sie Mitglied der Gruppe docker sind. Das bedeutet aber auch, dass sie über Docker uneingeschränkte root-Rechte haben (was pi mit sudo ohnehin hat).


    Ähnliches gilt für Portainer und NextCloud. D.h. ich habe die Doku nicht auf sicherheits-relevante Massnahmen geprüft, die ggf zu treffen sind. Unter Portainer habe ich keine zusätzlichen User angelegt. Ich habe alles mit den Rechten eines Admins unter dem Administrations-Account gemacht, der beim ersten Login erstellt wurde. Und wiederum gilt dasselbe für NextCloud. Es gibt nur einen User und das ist der, welcher beim ersten Login angelegt wurde und Benutzer anlegen kann etc..


    Mein Vorgehen war im Einzelnen wie folgt, wobei ich bei den trivialen Dingen nicht auf Details eingehe, diese aber gerne nachliefere.


    Schritt 1: Vorbereitung Pi 4

    Ich habe eine frische 32GB µSD Karte mit Raspberry Pi OS (64 bit) bespielt, damit meinen Pi 4 gestartet, mich über ssh in einer Terminal-Situng mit dem User pi auf den Pi4 eingeloggt und den Pi mit raspi-config vorkonfiguriert (Expand Filesystem, locals, etc).


    Danach habe ich den Pi neu gestaret.


    Schritt 2: Updates und Docker installieren

    Nach dem Reboot und erneutem Login habe ich den Pi mit sudo apt update && sudo apt upgrade zuerst noch auf den neusten Stand gebracht.


    Dann habe ich mit dem Convenience-Script Docker installiert:

    Code
    pi@pi4:~ $ curl -fsSL https://get.docker.com -o get-docker.sh
    pi@pi4:~ $ sudo sh get-docker.sh


    Anschliessend habe ich die docker-Gruppe erstellt und den User pi hinzugefügt.

    Code
    pi@pi4:~ $ sudo groupadd docker
    pi@pi4:~ $ sudo usermod -aG docker $USER


    Danach habe ich den Pi wieder neu gestartet!


    Schritt 3: Docker testen

    Jetzthabe ich eine neue ssh-Termnal-Session eröffnet und sofort Docker getestet.

    Code
    pi@pi4:~ $ docker run hello-world

    Das hello-world Image wurde jetzt vom Docker Hub geholt und ist in einem neuerstellten Container mit einem zufällig gewählten Namen abgelaufen. An dieser Stelle düfen keine Fehler auftreten. Da keine Fehler aufgetreten sind, war ich bereit zur Installation von Portainer.


    Schritt4: Portainer installieren

    Als Erstes habe ich mit unter https://hub.docker.com/r/portainer/portainer-ce die Dokumentation zum Container inlusive der darin enthaltenen Verweise auf weitere Dokumentationen zu Portainer angeschaut.


    Daraus ging hervor, dass für Portainer ein Docker Volume mit dem Namen portainer_data erstellt werden sollte, so dass auch ein neuer Container mit einem aktualisierten Image oder anderen Parametern erstellt werden kann, ohne dass die Daten verloren gehen. Dieses Volume kann dann beim Erstellen des Containers verwendet werden. Es wird in der Dokumentation zudem auch die Bedeutung der sonstigen Parameter und die Verwendung der Ports erklärt.


    Also erstellte ich ein Volume und erstellte/startete einen Container mit dem Namen portainer dessen Daten im Volume portainer_data verwaltet werden.

    Code
    pi@pi4:~ $ docker volume create portainer_dataverwaltet 
    pi@pi4:~ $ docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

    Jetzt konnte ich mich mit meinem Browser im LAN mit https://pi3:9443 zum ersten Login auf den Portainer verbinden. Da Portainer ein eigenes, aber ungültiges Zertifikat verwendet, musste ich natürlich zuerst meinen Browser überlisten, damit er die Verbindung überhaupt zuliess.


    Nach der ersten Anmeldung als Administrator stand mir Portainer offen zur Verfügung und ich konnte Portainer so besser kennenlernen. Es ist sehr lange her, dass ich da zum letzten mal reinblicken konnte ;).


    Nachdem mir klar war, wie die Images geholt und unter Portainer verwaltet werden, konnte ich mich an den nächsten Schritt wagen: dem Erstellen eines NextCloud Containers.


    Schritt 5: NextCloud Container installieren und konfigurieren

    Und wieder habe ich mir als Erstes auf dem Docker-Hub unter https://hub.docker.com/_/nextcloud die Dokumentation zum Container angeschaut, wobei für mich der Abschnitt Persistent data von besonderem Interesse war.


    Da steht nämlich, unter anderem: "... /var/www/html/ folder where all Nextcloud data lives...".

    Das sagt mir, auf das Problem mit den Verzeichnissen bezogen, schon fast alles.


    Das Ziel war jetzt einen NextCloud Container mit SQLite zu erstellen, dessen Daten sich aus der Sicht des Containers im Verzeichnis /var/www/html/ befinden, das sich aber auf dem Host ausserhalb der von Docker verwalteteten Daten (unter /var/lib/docker) befinden soll.


    Um Nextcloud überhaupt mal kennen zu lernen erstellte ich im Portainer einfach mal einen neuen Container mit dem namen nextcloud aus dem oben verlinkten Image vom Docker Hub. Ich nahm keine weiteren Konfigurationen vor und liess Portainer einfach mal machen.


    Und das Ergebnis war nicht mal so schlecht. Es wurde automatisch ein Port mit einer etwas ungewohnten Port-Nummer (32767 oder so) auf den Docker internen Port 80 gemappt und es wurde ein Volume mit einer unverständlichen ID anstelle eines sinnvollen Namens erstellt. Mit der Portnummer konnte man jedenfalls zugreifen und es hat soweit alles geklappt.


    Aufgrund der gemachten Erfahrung stoppte und löschte ich den Container und erstellte ihn mit einer anderen Konfiguration neu, wobei ich drei Dinge änderte:


    1. Unter Network Ports Configuration setzte ich die Einstellung auf Manuell und erstellte einen neuen Eintrag mit Port 8080 auf der Host-Seite und Port 80 auf der Container-Seite.



    2. Unter Advanced Settings/Volumes erstellte ich einen neuen Volume mapping Eintrag vom Typ Bind mit /var/www/html auf der Container Seite und /ssd/var/www/html vom Typ Writeable auf der Host-Seite. Das Prefix /ssd habe ich nur gewählt weil es stellvertretend für meine SSD Festplatte am USB-Port stehen sollte. Es könnte auch anders heissen.



    3. Unter Advanced container settings/Restart policy setzte ich den Wert von Restart policy auf Unless Stopped. Es ist natürlich immer eine Überlegung wert, was für die Awendung am Besten ist. Gerade wenn es noch nicht rund läuft ist es natürlich doof, wenn der Container immer wieder neu gestarted wird wenn er crashed und sich dieser Vorgang dann endlos wederholt.


    Da der Container mit root-Rechten läuft, ging ich davon aus, dass damit auf der µSD-Karte ein Verzeichnis /ssd/var/www/html/ erstellt wird unterdem sich alle NextCloud Daten befinden werden. Also startete ich den Container und es funktionierte. Das Volume mit der langen ID im Namen, das mit dem alten Container erstellt wurde, löschte ich mit dem Befehl docker volume remove <name>. (wobei <name> für diese ID steht.


    Jetzt stoppte ich den Container wieder und löschte alles, was zum gegenwärtigen Zeitpunkt innerhalb des Verzeichnisses /ssd/ lag um ab jetzt, das Verzeichnis /ssd als Mount Point für die freie Partition auf meiner SSD zu benutzen.


    Im Portainer habe ich ansonsten die Container Definition so belassen wie sie ist.


    Schritt 6: SSD an USB anschliessen und fest integrieren

    Als Erstes habe ich meine SSD Festplatte an einem der USB 3.0-Ports angeschlossen. Ich wusste bereits, dass die freie 64 GB linux Partition über /dev/sda4 adressiert werden kann. Sie war zwar als Linux Partition partitioniert, hatte aber noch kein File-System. Somit erstelle ich ein ext4-Filesystem und mountete die Partition auf das leere Verzeichnis /ssd als Mount Point.


    Code
    pi@pi4:~ $ sudo mkfs.ext4 /dev/sda4
    pi@pi4:~ $ sudo mount /dev/sda4 /ssd

    Natürlich testete ich an dieser Stelle noch ob alles richtig ist und da das Verzeichnis auf der SSD mit root-Rechten beschreibbar war, löschte ich die Test-Daten wieder und unmountete die Partition wieder mit sudo umount /ssd.


    Mit lsblk -o NAME,PATH,PARTUUID versuchte ich dann zuerst die PARTUUID der Partion herauzufinden, die ich von meiner SSD mounten möchte. Das Resultat für /dev/sda4 war in meinem Fall eine PARTUUID mit dem Wert 12939a7f-04.


    Damit erstellte ich einen passenden Eintrag in der Datei /etc/fstab, so dass die Partition bei jedem Systemstart gemountet wird. Das bedeutet auch, dass ab jetzt die SSD fester Bestandteil meiner Installation ist und NICHT mehr entfernt werden darf.


    So hat danach meine /etc/fstab ausgesehen (die vierte Zeile ist neu dazugekommen).

    Code
    proc                 /proc           proc    defaults          0       0
    PARTUUID=9c174a96-01 /boot           vfat    defaults          0       2
    PARTUUID=9c174a96-02 /               ext4    defaults,noatime  0       1
    PARTUUID=12939a7f-04 /ssd            ext4    defaults,noatime  0       2
    # a swapfile is not a swap partition, no line here
    #   use  dphys-swapfile swap[on|off]  for that


    Da soweit alles geklappt hat, kam jetzt als letzter Schritt ein Neustart!


    Schritt 7: Neustart - ab jetzt mit NextCloud Daten auf SSD

    Ich hatte den Pi 4 neu gestartet und als erstes geprüft ob die Festplatte richtig gemountet wurde und bereit für den Einsatz ist.


    Dann habe ich mich im Portainer eingeloggt und den bereits fertig konfigurierten Container mit dem Namen nextcloud wieder gestartet!

    Ich war etwas versunsichert und fragte mich was passiert, da doch jetzt alle Daten weg sind und nur noch ein leeres Verzeichnis vorhanden ist.


    Aber es geschah was ich erwartet hatte. Als ich mich über das Web einloggen wollte, musste ich meinen ersten User wieder neu erstellen und alles wurde neu konfiguriert, wie nach dem ersten Start eines neuen leeren NextCloud Containers.


    Es ging dann alles ohne weitere Probleme über die Bühne und nachdem alles neu installiert war, habe ich mit sudo ls -al /ssd/var/www/html/ kontrolliert, was da vorhanden ist und es sah gut aus. Man könnte jetzt meinen, dass alles erledigt ist, aber da fehlt doch noch etwas.


    Schritt 8: Neustart wie im Echt-Betrieb

    Neustart und Test. Ja, ohne vorher die Container zu stoppen, habe ich den Raspberry Pi neu gestartet. Ich konnte mich danach problemlos wieder in den Portainer sowie meinen NextCloud Account einloggen. Die vorher im Test erstellten Dateien waren alle vorhanden und soweit scheint es gut gelaufen zu sein.


    Ich hoffe, dass das vielleicht weiterhilft. Bei Unklarheiten bin ich gerne bereit weitere Details zu liefern. Ich werde die µSD-Karte vorläufig aufbewahren, damit ich ggf. darauf zurückgreifen kann. Die SSD mit der freien Partition hängt sowieso an meinem Pi 4.


    :) _/ Peter


    P.S. Typos dürft ihr behalten

  • Guten Abend!

    Wau :) Das ist mal eine Schritt für Schritt Anleitung. Vielen Dank! Ich werde das die nächsten Tage gleich mal ausprobieren und euch Bescheid geben .

    Nochmals vielen herzlichen Dank. Peter

  • Guten Tag pgloor, Peter

    Nochmals vielen Dank für deine ausführliche Anleitung. Ich bringe es leider immer noch nicht ganz zusammen.
    Die ersten 4 Schritte habe ich bereits beim letzten Mal gleich gemacht wie du es beschrieben hast.

    Ich habe dann ebenfalls den Container von Nextcloud erstellt. Dieses Mal genau so wie du es unter 5. beschreibst.
    Ich habe den Container gestoppt und den USB Stick gemountet.


    Jetzt habe ich, glaube ich zumindest, auch verstanden wie das mit den Dateiumschichtungen passiert. Das Container-Verzeichnis /var/www/html befindet sich ja auf dem Container und hierin speichert nextcloud alle Daten. Mit dem host /ssd/var/www/html werden im Prinzip die Daten die der Container auf /var/www/html speichert auf die SSD geschrieben und fortan von dort gelesen. Deshalb musst du beim mounten der SSD auch nur auf /ssd mounten. Das heißt, wenn ich den Nextcloud-container stoppe und wieder starte findet nextcloud die Daten wieder auf der SSD. Neu anmelden muss ich mich nur, weil die Anmeldedaten nicht auf /ssd/var/www/html gespeichert werden. Habe ich das richtig verstanden?

    Da ich jetzt keinen eigenen Weg gehen wollte habe ich den USB-Stick auch auf /ssd gemountet und den Nextcloud-Container wieder gestartet und mich bei Nextcloud eingeloggt. Ich habe auf installieren geklickt und 30 min gewartet die Installation ist leider noch nicht abgeschlossen und der Raspi hat sich aufgehängt. Jetzt komme ich auch nicht mehr auf Portainer. Authentifizierungsfehler: unauthorized.


    Hätte ich beim Starten von Nextcloud bei Speicher & Datenbank-Datenverzeichnis statt /var/www/html/data das Verzeichnis auf der SSD /ssd/var/www/html oder sogar /ssd/var/www/html/data eingeben müssen?

    Ich werde jetzt Raspian nochmals aufsetzen und von Vorne beginnen.

    Noch eine andere Frage. Wenn ich das so mache wie in deiner Anleitung beschrieben habe ich die SSD dann nicht als externe Festplatte, sondern als Hauptspeicher. Idealerweise wollte ich eigentlich die SSD als externe Festplatte zu Nextcloud hinzufügen, sodass darauf keine Systemdaten liegen sondern nur meine Daten. Wenn ich sie auf ntfs Dateisystem formatiere dann könnte ich sie abstecken und an einen Windows Computer anstecken und so auch meine Daten lesen oder?
    Außerdem könnte ich gegebenenfalls noch eine 2 Festplatte hinzuhängen.
    Stelle ich mir das zu einfach oder falsch vor?


    Vielen Dank. Mit freundlichen Grüßen Peter

  • Post by pgloor ().

    This post was deleted by the author themselves ().
  • [...] Da ich jetzt keinen eigenen Weg gehen wollte habe ich den USB-Stick auch auf /ssd gemountet und den Nextcloud-Container wieder gestartet und mich bei Nextcloud eingeloggt. Ich habe auf installieren geklickt und 30 min gewartet die Installation ist leider noch nicht abgeschlossen und der Raspi hat sich aufgehängt. Jetzt komme ich auch nicht mehr auf Portainer. Authentifizierungsfehler: unauthorized.

    Ich habe keine Ahnung was da schief gelaufen ist. Das hat bei mir gerade mal ein paar Minuten gedauert. Ich kann jetzt auch nicht genau sagen wie lange das genau gedauert hat, vielleicht 3 Minuten oder weniger oder etwas mehr. Aber niemals 30 Minuten. Ich verwendete eine Samsung Portable SSD T7. Die ist recht schnell. Mit einem Stick könnte ich mir schon vorstellen, dass es länger dauert oder dass es evtl. sogar Probleme gibt.


    Noch eine andere Frage. Wenn ich das so mache wie in deiner Anleitung beschrieben habe ich die SSD dann nicht als externe Festplatte, sondern als Hauptspeicher. Idealerweise wollte ich eigentlich die SSD als externe Festplatte zu Nextcloud hinzufügen, sodass darauf keine Systemdaten liegen sondern nur meine Daten.

    Der Begriff "Hauptspeicher" passt nicht so ganz. Hauptspeicher von NextCloud, ja. ;)


    In der Konfiguration, wie ich sie beschrieben habe, liegt in der "externen" Partition alles was zu NextCloud gehört. Aus der Sicht des Containers, bzw. von NextCloud, ist das alles was im Verzeichnis /var/www/html/ liegt. Dazu gehören auch .php-Dateien, diverse Ressourcen, Apps, Libraries, Themen, etc. Im Unterverzeichnis /var/www/html/data scheinen die eigentlichen Daten und Benutzerverzeichnisse zu liegen.


    Möchte man das Datenverzeichnis vom Rest trennen, dann wäre das möglich, indem man zum Beispiel ...

    a) ein Docker Volume mit dem Namen nextcloud erstellt und eine Zuweisung des Volumes nextcloud auf /var/www/html/ macht ...

    b) mit einem Bind Mount das Verzeichnis /ssd//var/www/html/data/ dem NextCloud Verzeichnis /var/www/html/data/ zuweist.


    Dadurch würde das Datenverzeichnis vom Rest getrennt und die vermutlich eher statischen Dateien von NextCloud wären dann im Volume nextcloud persistent aufgehoben.


    Soweit ich weiss geht das, ich habe es aber nicht getestet. Theoretisch wäre es auf diese Weise möglich, den Container zu stoppen, die Festplatte zu entbinden und zu entfernen. Die Festplatte müsste wieder drin und gemountet sein, wenn immer der Container gestartet wird.

    Idealerweise wollte ich eigentlich die SSD als externe Festplatte zu Nextcloud hinzufügen, sodass darauf keine Systemdaten liegen sondern nur meine Daten. Wenn ich sie auf ntfs Dateisystem formatiere dann könnte ich sie abstecken und an einen Windows Computer anstecken und so auch meine Daten lesen oder?

    Außerdem könnte ich gegebenenfalls noch eine 2 Festplatte hinzuhängen.
    Stelle ich mir das zu einfach oder falsch vor?

    Ich würde das aus mehreren Gründen nicht in Erwägung ziehen:


    1. Ich muss jetzt zugeben, dass ich zuwenig weiss, wie NextCloud aufgebaut ist. Aber, wenn ich mir das Verzeichnis /ssd//var/www/html/data/ anschaue, dann sehe ich darin zwar ein Unterverzeichnis mit meinem User-Namen und darin die Dateien, die ich angelegt habe. Aber es liegen auch noch Dateien da, die ich nicht kenne. Auch im übergeordneten Verzeichnis gibt es nebst Logs noch eine SQLite Datenbank, deren Inhalt und Bedeutung ich nicht kenne und es gibt noch weitere Dateien, von denen ich nicht weiss, wie diese zusammenspielen. Ich kann mir aber vorstellen, dass es besser ist, den Zugriff auf die Daten NextCloud zu überlassen um nicht versehentlich etwas durcheinanderzubringen.


    2. Ich weiss nicht was passiert, wenn man versehentlich bei laufendem Container die Platte aushängt.


    3. Ich weiss jetzt auch nicht ob Docker NTFS überhaupt unterstützt. Aber das wäre relativ einfach zu klären.


    Auf gutes Gelingen !

  • Hallo pgloor!

    Vielen Dank für die Anleitung. Jetzt habe ich es geschafft, die ssd als Hauptspeicher der Nextcloud einzubinden.
    Ich weiß auch nicht was ich zuvor falsch gemacht habe.


    Vielen Dank für deine Hilfe. Richtig super von dir. Damit ist mein Hauptanliegen geklärt.

    Ich werde jetzt noch versuchen, die Festplatte als externe Festplatte zu nutzen und sie mittels dem neuen Volume einzubinden. Das würde mir irgendwie mehr zusagen und für mein Verständnis wäre es dann auch leichter eine zweite Festplatte einzubinden. Dann hat man unter dem Dateimanager der Nextcloud einen Ordner mit einem selbstgewählten Namen zum Beispiel: SSD oder dann eben SSD1, SSD2


    Wenn ich hier nochmals Fragen stellen dürfte, wäre ich sehr dankbar.

    Mit freundlichen Grüßen
    Peter

  • Guten Tag!


    Hmm, gestern ging es mit dem USB-Stick - heute mit der SSD nicht. Der USB-Stick braucht übrigens extrem lange zur Installation von Nextcloud.

    Wie bin ich mit der SSD vorgegangen:

    Ich habe Nextcloud gestoppt den /ssd Ordner und Inhalt gelöscht und dann die SSD (Samsung Evo 900 Plus, 2TB) formatiert und mit dem filesystem ext4 beschrieben. Dann habe ich die ssd gemountet unter /ssd in fstab die SSD eingebunden zum automatischen Starten, rebootet und kontrolliert ob die Festplatte gemountet ist im Anschluss habe ich den Nextcloud Container gestartet, dieser schreibt aber alles auf die Mikro-SD-Card und nicht auf die SSD.

    Was habe ich nun schon wieder falsch gemacht?


    Ich werde nun die Festplatte nochmals umounten und den Ordner /ssd nochmal löschen und den Nextcloud Container auch nochmal löschen und neu initialisieren.

    Mit freundlichen Grüßen Peter

  • Guten Tag!


    Update: Es hat geklappt. Keine Ahnung was da vorhin wieder war. Die Festplatte ist endlich einbunden (siehe Bild).

    Seltsam ist nur dass 300 GB belegt sind, obwohl diese ja formatiert ist und nichts drauf ist.

    Ich habe zu Testzwecken einen Ordner erstellt und ein Bild hochgeladen, mich dann ausgeloggt und den Raspi neugestartet. Eingeloggt. Ordner und Bild sind da.


    Was passiert jetzt wenn ich den Nextcloud Container stoppe? Ist der Ordner und das Bild dann noch da? Sollte er oder, weil der Dateimanager ja auf /ssd auf der festplatte liegt.
    Ich muss beim Neustarten des Nextcloud Containers "nur" die Benutzer neu anlegen.

    Ich danke euch nochmals für die tolle Hilfe. Ein ganz besonderes Dankeschön geht an pgloor :)

    Mit freundlichen Grüßen Peter

  • Frage rein aus Interesse: Warum nicht Nextcloud nativ auf die SSD ??

    Weitere Frage: Was für Vorteile hat Dein Weg ??

    ;) Gruß Outi :D
    Pis: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (B. Lite) / 2x Pi Zero 1.3 (B. Lite) /
    2x Pi Zero W 1.1 (B. Lite) / 1x Pi Zero 2 (noch ohne) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Bullseye 64 Bit Lite (Webserver)) / Pi 400 (Bullseye 64 Bit) / 2x Pi Pico / 2x Pi Pico W
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT
    Kameras: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye