SSD Abnutzung maßgeblich reduzieren


Recommended Posts

Ich habe in der Anleitung auch noch diese Erfahrung verlinkt:

https://forums.unraid.net/bug-reports/stable-releases/683-unnecessary-overwriting-of-json-files-in-dockerimg-every-5-seconds-r1079/page/2/?tab=comments#comment-15674

 

Und zwar als Warnung, dass man wirklich nur "/tmp" eines Containers in eine RAM-Disk packt. Dieser User "hat nicht gehört" und hat "/run/postgresql" in eine RAM-Disk gepackt und damit eine Datenbank in einem Container zerschossen.

Link to comment

Hallo und gleich vielen Dank für die guten Erklärungen.

Bisher habe ich folgende Container die in /tmp/ schrieben identifiziert und die Temporären Dateien auf den RAM umgeleitet:

  • linuxserver/nextcloud (schreibt bei mir am häufigsten)
  • dlandon/logitechmediaserver
  • linuxserver/unifi-controller
  • diyhue/core

Das klappt auch bei allen Dateien welche in /tmp/ geschrieben gut.

 

Sehe gerade auch, dass mgutt noch einmal darauf hingewiesen hat, dass man wirklich nur "/tmp" eines Containers in eine RAM-Disk packt.

Dies deckt sich mit meinen Erfahrungen für /var/log/ - ist aber zum Glück nichts kaputt gegangen:

 

Bei Dateien in /var/log/ verstehe ich das Muster des host path nicht wirklich.

 

Während für den LMS diese Einstellung ohne Probleme funktioniert:

grafik.png.19de0103ccee0655f20eeeba6a6901ad.png

 

Läuft das gleiche Schema bei OnlyOffice in Probleme, egal was ich probiere, da der Container hier hängt:

Starting RabbitMQ Messaging Server rabbitmq-server

 

2021-08-27 09:08:12.530607232 +0200 /var/lib/docker/overlay2/*/merged/var/log/rabbitmq/[email protected]
2021-08-27 09:08:12.530607232 +0200 /var/lib/docker/overlay2/*/diff/var/log/rabbitmq/[email protected]

Da dieser Docker aber nicht so häufig auf die SSD schreibt lass ich die Versuche auch /var/log umzuleiten.

 

mgutt Lösung für den proxy sieht ja z.B. so aus - also landet alles nicht wie beim LMS im Ordner /logs sondern in /tmp in spezifischen Docker Ordner im RAM:

grafik.png.706d878864aeb21fe2bf17a04e1a8db6.png

Wenn ich das richtig verstehe ist bei /var/log das Einschneidende, die richtige Zielordner oder Ordnerstruktur im /tmp/ abzubilden oder?

 

Grüße

 

Gilladur

 

Edited by gilladur
Link to comment
3 hours ago, gilladur said:

Läuft das gleiche Schema bei OnlyOffice in Probleme, egal was ich probiere, da der Container hier hängt:

 

 

Dann nutzt der Container vermutlich die log-Dateien - warum auch immer - um überhaupt funktionieren zu können. Du könntest die Dateien manuell in das RAM-Disk Verzeichnis kopieren, aber schlussendlich ist das vergebene Lebensmühe, denn sobald der Server neu startet, wird ja /tmp geleert und der Container würde nicht mehr gehen.

 

 

Du merkst selbst, dass /var/log auch für "statische" Dinge gedacht sein kann. Was du mal testen könntest. Start den Container, öffne dessen Konsole und schau mal welche es Unterordner darin gibt:

ls -la /var/log

 

 

Ist es zB nur dieses rabbitmq, dann könntest du mal im Ziel deiner RAM-Disk diesen Ordner erstellen:

mkdir -p /tmp/onlyoffice/var/log/rabbitmq

 

Und dann verlinkst du /var/log mit /tmp/onlyoffice/var/log

 

Wenn es noch mehr Unterordner in /var/log gibt, erstellst du auch die mal. Vielleicht will der Container wirklich nur die Existenz des Unterordners und nicht die log-Datei als solches.

 

3 hours ago, gilladur said:

Wenn ich das richtig verstehe ist bei /var/log das Einschneidende, die richtige Zielordner oder Ordnerstruktur im /tmp/ abzubilden oder?

Nein völlig egal. Ich hätte es auch so machen können:

image.png.310e94ec562554a56d3f2ad28bf43c8f.png

 

Das wirkliche Ziel von /var/log kennt der Container nicht. Für ihn existiert nur /var/log.

 

Man darf nur nicht hingehen und Pfade überschneiden lassen:

image.png.6c5a97d0f450475aa56c3272c3176245.png

 

In dem Fall würde der Container im Pfad /data/logs sonst den Unterordner "bob" mit dem Inhalt von /var/log sehen.

 

 

  • Like 1
Link to comment

Das Kommando aus Punkt 4 gibt jetzt verständlichere Ergebnisse aus, in dem auch der jeweilige Pfad ausgegeben wird:

 

527804214_2021-08-2812_28_03.png.91319916f7c35cd752f34d60775f9ed1.png

 

Damit sollte es nun einfacher sein den jeweiligen Ordner zuzuordnen.

 

@T0a  /var/lib/docker/containerd/daemon/io.containerd.metadata.v1.bolt/meta.db habe ich auch. Ich habe mir mal den Inhalt der Datei angeschaut und sie enthält Infos zu verschiedenen Containern. Das ist also eine Datei vom Docker Dienst selbst und diese lassen wir lieber in Ruhe. Das selbe gilt für die Datei /var/lib/docker/network/files/local-kv.db. Allerdings werden beide Dateien bei mir nur selten überschrieben. Daher kein Grund sie überhaupt in den RAM auszulagern.

 

Das was in /var/lib/docker/volumes geschrieben wird, ist dagegen von einem Container selbst. Ich vermute, dass du einen Container hast, der im "Extra Parameters" Feld einen Befehl wie "--mount source=foo,target=/bar" nutzt. Dann erstellt Docker nämlich eine separate "Festplatte", die dann in "/var/lib/docker/volumes abgelegt wird. Ich habe das bei meinem Unifi-Controller Container getestet:

image.png.47bded65a724da89bbe98f7b387578c7.png

 

Dadurch schreibt Unifi nun in den Pfad:

/var/lib/docker/volumes/test/_data/hsperfdata_abc/296

 

Mit dieser Technik kann man wohl mehrere Container auf das selbe Verzeichnis zugreifen lassen.

 

Komisch ist nur, dass bei dir kein Name, sondern eine ID im Pfad steht.

 

EDIT: Ah ok. Wenn man keinen Namen festlegt, dann erstellt er das mit einer zufälligen ID:

image.png.a737d53d9b642bbb5a3cb58ff89cb8f2.png

 

/var/lib/docker/volumes/d8c9fdca9be08d2b85fba7b061d868a29a585e4c085635a074f2b5093dd79162/_data/hsperfdata_abc/297

 

Mal sehen ob ich das irgendwie zuordnen kann...

 

EDIT: Ok, gespeichert wird das in der /var/lib/docker/containers/<containerid>/config.v2.json. Da gibt es doch bestimmt ein Docker Kommando für....

 

Link to comment

Ich habe mir den Fall nun etwas genauer angesehen. Es handelt sich bei dem Volume, welches sich nicht zuordnen laesst, um Redis. Den Grund feur die Datei kannst du hier nachlesen.

 

2021-08-28 12:46:51.018237367 +0200 /var/lib/docker/volumes/23b5360adabd40ddfef437d4e5702c7e07af7f578b3b2a538378c2ea8e61a964/_data/dump.rdb

 

========================================================================================================                                                                           
Redis                           /var/lib/docker/(btrfs|overlay2)/.../57b5a1df778859ae545e595b285381e7f585eb547a6f731016c832cbd4072ce8                                                                              
db390ed2556d                    /var/lib/docker/containers/db390ed2556d6cbdb41f7400615ece4cd5bf749a4309edeb67544c06efedb9ee 

 

Ich starte den Redis Container (von jj9987) mit 'redis-server --requirepass "secret"' als Post Arguments. Der Container wird fuer paperless-ng benoetigt. Ich schaue gerade in der Dokumentation von Redis, ob und wie man das Interval fuer das Snapshot Feature anpassen kann. In der Standard-Konfiguration wird die Datei alle 30 Sekunden geschrieben. Fuer die Anwendung paperless-ng ist es IMHO nicht noetig Daten in Redis dauerhaft zu persistieren.

 

Edit: Der Befehl schaltet das Feature ab:

 

redis-server --requirepass "secret"  --save ''

Wahrscheinlich muss man dann auch die Datei "dump.rdb" loeschen, sonst laed Redis bei jedem Start veraltete Daten.

 

Mir sind die Implikationen auf paperless-ng jedoch noch nicht bewusst. Ueber "--save" kann man auch die Frequenz einstellen. Der Befehl "--save 60 1000" speichert z.B. das Dataset alle 60 Sekunden, wenn sich 1000 Keys geaendert haben.

 

Laut diesem Artikel, wird der Snapshot nur so haeufig durchgefuehrt, wenn viele Daten durch Redis verarbeitet werden. Aktuell verarbeite ich aber keine Daten aktiv durch paperless-ng. Ich vermute, dass das Scheduling der Worker Tasks Ursache ist.

Edited by T0a
Link to comment
3 minutes ago, T0a said:

Ich starte den Redis Container (von jj9987) mit 'redis-server --requirepass "secret"' als Post Arguments.

Und sonst gibt es keine Parameter? Ok, dann erstellt wohl redis über die Konfigurationsdatei selbst dieses anonyme Volume.

 

 

Das passende Kommando habe ich jetzt auch:

 

csv="CONTAINER;PATHS\n"; for f in /var/lib/docker/image/*/layerdb/mounts/*/mount-id; do subid=$(cat $f); idlong=$(dirname $f | xargs basename); id="$(echo $idlong | cut -c 1-12)"; name=$(docker ps --format "{{.Names}}" -f "id=$id"); [[ -z $name ]] && continue; csv+="\n"$(printf '=%.0s' {1..30})";"$(printf '=%.0s' {1..104})"\n"; [[ -n $name ]] && csv+="$name;" csv+="/var/lib/docker/(btrfs|overlay2)/.../$subid\n"; csv+="$id;"; csv+="/var/lib/docker/containers/$idlong\n"; for vol in $(docker inspect -f '{{ range .Mounts }}{{ if eq .Type "volume" }}{{ .Destination }}{{ printf ";" }}{{ .Source }}{{ end }}{{ end }}' $id); do csv+="$vol\n"; done; done; echo ""; echo -e $csv | column -t -s';'; echo "";

 

Ergebnis:

image.png.9e57ff3d7eefd8199e869747658376e3.png

 

 

Jetzt kann also auch jeder solche Pfade dem jeweiligen Container zuordnen.

 

Link to comment
8 minutes ago, mgutt said:

Und sonst gibt es keine Parameter? Ok, dann erstellt wohl redis über die Konfigurationsdatei selbst dieses anonyme Volume.

 

Das passende Kommando habe ich jetzt auch:

[...]

 

Nein, keine weiteren Parameter ausser die Post Arguments wie oben angegeben. Habe den aktualisierten Befehl ausprobiert und kann nun alle Volumes und Container zuordnen. Vielen Dank!

Edited by T0a
Link to comment

So und auch gleich mal das find Kommando optimiert, so dass es das "diff" und "merge" Verzeichnis nicht mehr ausgibt und auch nur noch die Uhrzeit:

 

find /var/lib/docker -type f -not -path "*/diff*" -print0 | xargs -0 stat --format '%Y:%.19y %n' | sort -nr | cut -d: -f2- 2> /dev/null | head -n30 | sed -e 's|/merged|/...|; s|^[0-9-]* ||'

 

 

Beispiel:

image.thumb.png.96e26a5d0383948e0120ab68a5c651c4.png

  • Like 1
Link to comment
  • 2 weeks later...

Herzlichen Dank @mgutt für die geniale Anpassung!
 

Eine Verständnisfrage: Ich habe alles so gemacht wie beschrieben. Die Logfiles vom Container Seafile habe ich auf /tmp/seafile/log gemountet. Hab dahingehend auch keine Schreibzugriffe mehr. Darüber hinaus sehe ich nach reboot in rc.docker usw. die eingefügten Zeilen und dass ein tmpfs auf /var/lib/docker/containers liegt. Passt also alles. 

 

Nun zeigt mir der Befehl folgendes: (Ist soweit ja auch alles korrekt, du hast ja geschrieben, dass wir die ignorieren können, da wir das weggemountet haben.

 

find /var/lib/docker -type f -not -path "*/diff*" -print0 | xargs -0 stat --format '%Y:%.19y %n' | sort -nr | cut -d: -f2- 2> /dev/null | head -n30 | sed -e 's|/merged|/...|; s|^[0-9-]* ||'


12:07:22 /var/lib/docker/containers/feef8c6c57761a42b20ce7b85bee71cd8a7134e7054a63c319eda02f09e1d419/hostconfig.json
12:07:22 /var/lib/docker/containers/feef8c6c57761a42b20ce7b85bee71cd8a7134e7054a63c319eda02f09e1d419/feef8c6c57761a42b20ce7b85bee71cd8a7134e7054a63c319eda02f09e1d419-json.log
12:07:22 /var/lib/docker/containers/feef8c6c57761a42b20ce7b85bee71cd8a7134e7054a63c319eda02f09e1d419/config.v2.json

 

 

Allerdings sehe ich auch immer dann wenn das im Log auftritt, dass ich ein WRITE auf meinem Cache habe. Sodass ich nun nicht weiß, ob das passt, oder ob da wirklich 0kb stehen sollte.. Ich habe nur einen Container laufen. Nur diese Ausgabe und sonst wird nichts anderes geschrieben. Zumindest laut den Logs.

 

/edit: mit --no-healthcheck wird hingegen tatsächlich absolut nichts geschrieben.

 

LG und herzlichen Dank

Edited by MiniKahn
Link to comment

Servus,

 

diesen hier: https://hub.docker.com/r/flowgunso/seafile-client/

 

Healthcheck Datei aus dem Container:

Spoiler
#!/usr/bin/env python3

# Docker Seafile client, help you mount a Seafile library as a volume.
# Copyright (C) 2019-2020, [email protected]
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

# Given a path to a valid Seafile confdir and a repository, check the
# synchronization status and otherwise the transfer status of that
# repository.

import argparse
import os
import sys

import seafile


if __name__ == "__main__":
    # Parse Seafile's confdir and repository ID to check.
    parser = argparse.ArgumentParser(description="Check the status of a synced repository.")
    parser.add_argument('repository_id',  type=str, help="Repository ID to check the status of.")
    parser.add_argument('-c', '--confdir', type=str, required=True, help="Seafile configuration directory to load the Socket from.")
    args = parser.parse_args()

    # Instanciate Seafile RPC.
    seafile_socket = os.path.join(args.confdir, "seafile.sock")
    if not os.path.exists(seafile_socket):
        raise Exception("Could not find a Seafile socket at {}".format(args.confdir))
    seafile_rpc = seafile.RpcClient(os.path.join(args.confdir, "seafile.sock"))

    # Fetch the sync task of the repository.
    repository_sync_task = seafile_rpc.get_repo_sync_task(args.repository_id)
    if repository_sync_task is not None:
        sync_state = repository_sync_task.state
        msg = "Repository synchronization state: {}".format(sync_state)
        if sync_state == "error":
            raise Exception(msg)
        else:
            print(msg)
            sys.exit(0)

    # Fetch the transfer task of the repository.
    repository_transfer_task = seafile_rpc.find_transfer_task(args.repository_id)
    if repository_transfer_task is not None:
        transfer_state = repository_transfer_task.state
        msg = "Repository transfer state: {}".format(transfer_state)
        if transfer_state == "error":
            raise Exception(msg)
        else:
            print(msg)
            sys.exit(0)

    raise Exception("Could not find any information about any repository synchronization or transfer tasks.")

 

Hilft das etwas? Ansonsten stell ich gern alles zur Verfügung, inklusive xml und einer seafile-test-repo

 

LG

 

/edit 08.09.2021 12:15

 

Ich habe nun einen eigenen Docker Cointainer erstellt auf Basis des oben genannten Images.

Diesen habe ich so modifiziert, dass es mir möglich war, .ccnet/logs in UNRAIDs /tmp zu mounten. (So kann ich die Logs als Write absolut ausschließen)
(Dies war ohne Modifikation nicht möglich, da durch mounten von .ccnet/logs seafile-cli dachte, dass schon Configs bestehen - und startete deshalb nicht.

 

Dennoch habe ich nach wie vor periodisch alle 30 Sekunden einen Write auf meinem Cache.

 

Output in UNRAID:

find /var/lib/docker -type f -not -path "*/diff*" -print0 | xargs -0 stat --format '%Y:%.19y %n' | sort -nr | cut -d: -f2- 2> /dev/null | head -n30 | sed -e 's|/merged|/...|; s|^[0-9-]* ||'

12:15:33 /var/lib/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/hostconfig.json
12:15:33 /var/lib/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f-json.log
12:15:33 /var/lib/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/config.v2.json


csv="CONTAINER;PATHS\n"; for f in /var/lib/docker/image/*/layerdb/mounts/*/mount-id; do subid=$(cat $f); idlong=$(dirname $f | xargs basename); id="$(echo $idlong | cut -c 1-12)"; name=$(docker ps --format "{{.Names}}" -f "id=$id"); [[ -z $name ]] && continue; csv+="\n"$(printf '=%.0s' {1..20})";"$(printf '=%.0s' {1..100})"\n"; [[ -n $name ]] && csv+="$name;" csv+="/var/lib/docker/(btrfs|overlay2).../$subid\n"; csv+="$id;"; csv+="/var/lib/docker/containers/$idlong\n"; for vol in $(docker inspect -f '{{ range .Mounts }}{{ if eq .Type "volume" }}{{ .Destination }}{{ printf ";" }}{{ .Source }}{{ end }}{{ end }}' $id); do csv+="$vol\n"; done; done; echo ""; echo -e $csv | column -t -s';'; echo "";

====================  ====================================================================================================
Z_Seafile_Desktop     /var/lib/docker/(btrfs|overlay2).../b7798914f61c28221cdf268a18b447cb48b6dfbd416bbb2680603a9cc5fb9999
dffe492d2e58          /var/lib/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f

 

 

Und innerhalb des Cointainers:

find / -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head -100

ganz viel von: /proc/.... 
2021-09-08 12:15:36.339192185 +0200 /proc/1203/cgroup
2021-09-08 12:15:36.339192185 +0200 /proc/1203/auxv
2021-09-08 12:15:36.339192185 +0200 /proc/1203/arch_status
        2021-09-08 12:15:33.186228187 +0200 /home/seafuser/.ccnet/logs/seafile.log
2021-09-08 12:06:49.456146159 +0200 /proc/21/task/26/fdinfo/25
2021-09-08 12:06:49.456146159 +0200 /proc/21/fdinfo/25
2021-09-08 12:06:49.455146170 +0200 /proc/21/task/25/fdinfo/25
2021-09-08 12:06:49.455146170 +0200 /proc/21/task/24/fdinfo/25

und irgendwann dazwischen dann

 

Die Uhrzeiten stimmen auf die Sekunde überein. In diesem Moment wird der Healthcheck ausgeführt, da dieser in den Log schreibt.

In dem Moment geht auch der Write des Cache an. Da der Log auf /tmp gemountet ist, wird es nicht der .log sein, welcher hier geschrieben ist.

Es müssen andere Dateien (die drei die eben oben angezeigt werden) sein.

 

Ich habe aber alles so angepasst wie im Eingangs-Post beschrieben. Auch die RAM-Disk wird so angelegt wie hier angezeigt: 

(siehe Anhang) .... ach und reboot wurde durchgeführt...

 

In find /mnt/cache/  wird ebenfalls keine andere Datei angezeigt die beschrieben wird.

Ausschließlich hostconfig.json und die zwei -json.log von oben...

 

Was kann ich noch tun? @mgutt

Teamviewer und co gerne.

 

2021-09-08 12_32_48-UNRAID.png

2021-09-08 12_34_06-UNRAID.png

2021-09-08 12_34_37-UNRAID.png

2021-09-08 12_35_54-.png

Edited by MiniKahn
Neue Informationen
Link to comment

Hatte es oben gerade Editiert.

 

root@Tower:~# find /mnt/cache/ -type f -not -path "*/diff*" -print0 | xargs -0 stat --format '%Y:%.19y %n' | sort -nr | cut -d: -f2- 2> /dev/null | head -n30 | sed -e 's|/merged|/...|; s|^[0-9-]* ||'
12:39:08 /mnt/cache/docker/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/hostconfig.json
12:39:08 /mnt/cache/docker/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f-json.log
12:39:08 /mnt/cache/docker/docker/containers/dffe492d2e5893875caa5164af76d6a33c7b67a6982b3f4b8e1defeda7d3415f/config.v2.json

 

Ich schaue im GUI wenn ein WRITE zu sehen ist, dann den Befehl... Und das kommt dabei raus.

 

In der Docker Ansicht ist auch "Einfache Ansicht" gewählt. Falls das noch ein Grund sein könnte. Keine Ahnung...
 

Edited by MiniKahn
Link to comment

Moin,

danke für die gute Anleitung 😊.

 

 

Ich habe aber dennoch ein paar Tipps/fragen, sollte jemand die gleichen Probleme wie ich haben.

Ich hatte bei dem Wechsel von dem Datei System, das Phänomen, dass der Mover zwar die SSD leer gemacht hat (also unter den Freigabe Einstellungen von „bevorzugt“ auf ja gestellt) aber als ich dann fertig war hat der Mover diese nicht wieder zurück kopiert. Laut Mover Logs: zu wenig Speicher, oder es waren schlicht alle freigaben weg 😐.

Nach einem Neustart (hatte ich hier irgendwo im Forum gelesen) war wieder alles da und der Mover ging.

 

Ich hatte dann aber dennoch ein wenig rumprobiert da mich das stutzig gemacht hatte. Wenn ich die daten erst mit dem Mover ins Array gepackt und dann die SSD formatiert habe und die Freigabeeinstellungen wieder auf „bevorzugt“ gestellt wurden und ich dann aber NICHT sofort den Mover gestartet habe, sondern das NAS Komplet neugestartet, traten die besagten Fehler nicht auf.

Darauf kann ich leider mir keinen Reim machen.

 

Unraid version: 6.10-rc1

Link to comment

Am Rande: Ist /var/lib/docker/containers intern / symlink der selbe Pfad wie /mnt/cache/docker/docker ??

 

1825711078_2021-09-0816_16_05-Tower_DockerSettings.thumb.png.8f2bdda103bc1e11f26e92c692b129ec.png

 

bei find /var/lib/docker und /mnt/cache/docker werden mir nämlich die selben Dateien zur selben Zeit angezeigt. Nur eine Frage :D Sorry wenn es irgendwo offensichtlich steht 😅

Für /var/lib/docker wird das ja in /tmp geschrieben. Aber für /mnt/cache/docker ja nicht? 

Keine Ahnung, sorry...

Edited by MiniKahn
Link to comment
5 hours ago, MiniKahn said:

Ich schaue im GUI wenn ein WRITE zu sehen ist, dann den Befehl... Und das kommt dabei raus.

 

Komisch. Ja dann würde ich doch mal mit Teamviewer drauf schauen wollen.

 

1 hour ago, MiniKahn said:

Am Rande: Ist /var/lib/docker/containers intern / symlink der selbe Pfad wie /mnt/cache/docker/docker ??

Ja genau. /var/lib/docker verlinkt entweder auf /mnt/cache/docker/docker oder es mountet /mnt/cache/docker/docker.img, je nachdem was man nutzt.

Link to comment

@mgutt gerne morgen jederzeit. Hab Urlaub ;) Am besten per PM, dass der Thread frei bleibt. Das Ergebnis kann ich / können wir ja dann hier posten.


@Anym001 dadurch ist einfach die Aufteilung eleganter. Da ich kein docker Image nutze, sonder die Ordnerstruktur, habe ich alle Docker Sachen im Docker Ordner. Und diese dort nochmal sortiert nach appdata/ docker-Instanz usw.

 

Edited by MiniKahn
Link to comment
5 hours ago, Anym001 said:

Warum eigentlich zweimal docker im Pfad?

Bei mir ist „nur“ /mnt/cache/docker eingestellt.

Im Menü kannst du die Docker Dateien löschen. In deinem Fall würde vermutlich der ganze Share gelöscht werden. Der doppelte Docker Unterordner ist dann die selbe Ebene wie vorher das docker.img. so könnte man im Härtefall schnell zurück zum docker.img und löscht das nicht verstehentlich mit. Aber vom Prinzip natürlich alles egal, wenn man weiß was man tut.

Link to comment
On 8/18/2021 at 10:15 AM, mgutt said:

Gegenmaßnahmen

 

Was können wir nun dagegen tun:

  1. Docker vom docker.img auf "Directory" umstellen (ja, "/docker/docker/" ist richtig!):
    image.png.f1e9edbfe3bb537d0799625edffdda4e.png
    Damit reduzieren wir schon mal die Write Amplification, da das Schreiben einer kleinen Zeile in eine log/json-Datei mehr Datenblöcke im docker.img ändern kann, als das beim direkten Zugriff auf die Datei der Fall ist.
    Hinweis: Dadurch werden alle Custom Networks und Container gelöscht. Diese können dann einfach (ohne Datenverlust) über Apps > Previous Apps wieder installiert werden (Custom Networks müssen natürlich vorher neu erstellt werden! Geht übrigens auch per Kommandozeile)
    Bonus: Wer den Share "system" beim Cache auf "Prefer" gestellt hat, der sollte auch gleich den Pfad auf /mnt/<cache-pool-name>/docker/docker ändern. Grund: Die CPU wird bei /mnt/user... mehr belastet.

....wenn man die Docker neu aufbaut, wird aber die dann aktuelle Version installiert.

Leider habe ich da ein paar am Start, die ich nicht updaten will/kann...

 

....gibt es gar eine Chance die bestehenden Docker aus dem IMG in den Ordner zu migrieren?

Link to comment

...tja, als das template erstellt wurde waren die alle "latest" und ich müsste mit ner Lupe nach dem passenden Datum und tag suchen ;-)

 

Was wäre mit Docker export / import der relevanten lokalen Image?

Alse

- alle Container stoppen

- alle relevanten Images mit "export" sichern (CLI oder Portainer)

- von IMG auf Ordner umstellen

- alle lokalen Image-Backups wieder importieren

- ....fertsch

 

?

Link to comment
11 hours ago, MiniKahn said:

@Anym001 dadurch ist einfach die Aufteilung eleganter. Da ich kein docker Image nutze, sonder die Ordnerstruktur, habe ich alle Docker Sachen im Docker Ordner. Und diese dort nochmal sortiert nach appdata/ docker-Instanz usw.

Das verstehe ich nicht, wäre der richtige/logischere pfad nicht /mnt/cache/system/docker oder /mnt/user/system/docker

 

Was sortierst du in dem Ordner?

Der /mnt/user/appdata Ordner wäre dediziert für Docker sachen gedacht das nicht irgendwas gemischt wird mit dem Docker Ordner.

 

6 hours ago, Ford Prefect said:

....wenn man die Docker neu aufbaut, wird aber die dann aktuelle Version installiert.

Leider habe ich da ein paar am Start, die ich nicht updaten will/kann...

Sollte aber nicht der Fall sein wenn du auf "Add Container" klickst auf der Docker seite weil dort dein individuelles template gespeichert ist und wiederhergestellt wird.

Link to comment
52 minutes ago, ich777 said:

Das verstehe ich nicht, wäre der richtige/logischere pfad nicht /mnt/cache/system/docker oder /mnt/user/system/docker

 

Was sortierst du in dem Ordner?

Der /mnt/user/appdata Ordner wäre dediziert für Docker sachen gedacht das nicht irgendwas gemischt wird mit dem Docker Ordner.

Guten Morgen,

 

ich habe mir einen extra Share angelegt, unabhängig von system und appdata, welche alle Docker Dateien gebündelt auf einem Fleck sortiert. Ich verstehe den Punkt, das wohl von Seiten unraid system für docker, und appdata für docker- appfiles gedacht ist, finde es aber angenehmer das in einem komplett eigenen Share zu haben.

 

Dadurch ist, wie gesagt, nicht alles auf verschiedene Shares verteilt. Meine Container usw. richte ich alle händisch auf die entsprechenden Pfade ein. Finde ich so angenehmer und sehe keinen Nachteil.

Sollte es einen Nachteil geben, gerne immer her damit. Kann es ja jederzeit anpassen. Die Dinge sind ja schnell passend verschoben.


Liebe Grüße 

 

Link to comment
6 minutes ago, MiniKahn said:

Meine Container usw. richte ich alle händisch auf die entsprechenden Pfade ein

Du kannst in den Docker einstellungen den standard pfad abändern nur so als hinweis falls du ein anderes verzeichnis als appdata für die persistent container dateien verwendest.

 

7 minutes ago, MiniKahn said:

komplett eigenen Share

Yep, genau deswegen gibts den system share. Aber sei dahingestellt. ;)

 

7 minutes ago, MiniKahn said:

Die Dinge sind ja schnell passend verschoben.

Naja verschieben, wenns um den docker ordner selbst geht kann es schon ein wenig länger dauern da die einzelnen layer oft schon ziemlich viele dateien enthalten aber wie oben schon geschreiben deine templates sind schnell wiederhergestellt mit dem "Add Container" auf der Docker seite und die sind meistens schneller gepullt als verschoben. :)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.