Daten auf externer Platte werden bei Neustart gelöscht

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • JonBovi
    Smart Home'r
    • 13.09.2016
    • 42

    #1

    Daten auf externer Platte werden bei Neustart gelöscht

    Hallo zusammen,
    ich habe LoxBerry V2.2.1.2 auf einem RPi4 laufen.

    Da ich auch noch einen kleinen Linuxserver rennen habe dachte ich, ich häng beim LoxBerry noch eine externe Platte dran und nutze den LoxBerry auch noch um Backups zu erstellen.

    Dazu habe ich eine 500GB Platte über USB angesteckt, und in /etc/fstab einen mountpoint eingetragen:
    Code:
    PARTUUID=abcdef... /mnt/backup-offsite ext4 defaults,noatime,nofail 0 0
    Auf der Platte liegt ein Script, dass über rsync Daten von besagtem Server auf die Platte holt.
    Das Script habe ich in
    Code:
    crontab -e
    zum täglichen Ausführen eingetragen.

    Jetzt zum eigentlich Problem, das ganze lief einige Tage ohne Probleme. Heute habe ich mal einen reboot vom LoxBerry gemacht und mit Erstaunen festgestellt, dass die externe Platte bis auf mein Script komplett leer war. Und auch der crontab Eintrag ist verschwunden.

    Durch Experimentieren bin ich draufgekommen, dass die Platte offenbar nach dem Booten geleert wird (also ich konnte wirklich zusehen wie die Dateien immer weniger wurden).

    Ich nehme mal an dass mir da irgendeine LoxBerry Logik dazwischenfunkt, kann das sein?
    Zugegeben, das Ganze geht am gedachten Einsatzzweck des LoxBerrys vorbei, aber ich dachte mir, wenn die Hardware schon da ist, warum nicht mit nutzen...


  • svethi
    Lebende Foren Legende
    • 25.08.2015
    • 6344

    #2
    Also um das für mich nochmal klarzustellen … Du hast an Deinen Loxberry eine extern Festplatte angeschlossen. Diese Platte hast Du nicht über die Loxberryverwaltung eingebunden sondern direkt im System eingetragen und der Mountpoint liegt außerhalb des Loxberry-Homedir. Du hast auf dieser Festplatte ein eigenes Script, was das Backup durchführt. Habe ich das soweit richtig verstanden?
    Wenn ja … Der Loxberry weiß überhaupt nichts von der Platte und Du nutzt auch keine Scripts des Loxberry, wie sollen denn die Loxberry-Scripts denn da dazwischen funken? Es gibt auch keinen Tools auf dem Loxberry, die alles Mointpoints durchforsten, speichern was drauf ist um dann alles was neu dazugekommen ist wieder zu löschen. Unmounte doch mal die exteren Platte und schau dann in den Mountpoint. Eventuell hast Du ja beim Eintragen in die fstab danach vergessen die Platte dann noch zu mounten oder es ist beim mounten etwas schief gegangen. Zu crontab -e … da wird die Crontab des Users aufgerufen, welcher den Befehl aufgerufen hat. Bist Du sicher, dass Du jetzt als der selbe User angemeldet warst? Im Falle von loxberry könnte es sehr gut sein, dass der Loxberry seine Configuration selbst verwaltet und aus einer Config heraus neu schreibt.
    Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

    Kommentar

    • JonBovi
      Smart Home'r
      • 13.09.2016
      • 42

      #3
      Zitat von svethi
      Also um das für mich nochmal klarzustellen … Du hast an Deinen Loxberry eine extern Festplatte angeschlossen. Diese Platte hast Du nicht über die Loxberryverwaltung eingebunden sondern direkt im System eingetragen und der Mountpoint liegt außerhalb des Loxberry-Homedir. Du hast auf dieser Festplatte ein eigenes Script, was das Backup durchführt. Habe ich das soweit richtig verstanden?
      Genau richtig.

      Mir ist noch was augefallen, ich glaube es hat garnicht unbedingt mit meinem Mountpoint in der fstab zu tun. Der Loxberry mounted die Platte nämlich auch automatisch als /media/usb. Allerdings direkt auf /media/usb, nicht in einem Unterverzeichnis, so wie ich es auf Screenshots schon gesehen habe.

      In den USB Datenträgern wird mir folgendes angezeigt:
      Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Bildschirmfoto vom 2022-05-27 16-22-29.png Ansichten: 0 Größe: 44,1 KB ID: 348562

      Man beachte den Device Name. Das ist das Script, das auf der externen Platte liegt (und die einzige Datei die nach dem reboot übrig bleibt).

      Ich habe auch ein wenig im Loxberry Source Code gelesen und in der loxberryinit.sh folgendes gefunden:

      Code:
      # Remove old mountpoints from AutoFS and USB automount (in case they were not
      # unmounted correctly and di not exist anymore)
      echo "Cleaning old mount points...."
      for folder in /media/usb/*
      do
      if [ -d ${folder} ]
      then
      if ! mount | grep -q ${folder}
      then
      rm -r ${folder} > /dev/null 2>&1
      fi
      fi
      done
      Wenn ich das jetzt richtig interpretiere, sollte die Platte eigentich nicht direkt in /media/usb sondern einem Unterordner eingebunden werden. Und deshalb löscht die loxberryinit.sh alle Unterordner auf der Platte. Was meinst du?

      Den crontab Eintrag habe ich als root gemacht.

      Kommentar


      • Prof.Mobilux
        Prof.Mobilux kommentierte
        Kommentar bearbeiten
        Er löscht alles in /media/usb, was ein Verzeichnis ist und aktuell nicht gemounted ist. Und er mounted normalerweise auch nichts, was schon manuell über die fstab gemounted ist.

        Seltsam auch, dass hier read only gemounted ist.

      • svethi
        svethi kommentierte
        Kommentar bearbeiten
        Viel seltsamer ist, dass er keinen Ordner für das Laufwerk anlegt und dafür eine Datei mit dem Namen. Meine Vermutung ist, dass da selbst partitioniert wurde und Informationen nicht angegeben wurden. Daher hat er wahrscheinlich keinen Namen. Des Weiteren vermute ich, dass der Eintrag in die fstab gemacht und gemountet, aber nicht neu gestartet wurde. Daher gabs halt zusätzlich diesen „kaputten“ mount. Möglich wäre sonst noch, dass die Probleme bei der Benennung auch dafür sorgen, dass er nicht erkennt, dass das Laufwerk schon in der fstab gemountet wurde und es nochmals mountet.

      • JonBovi
        JonBovi kommentierte
        Kommentar bearbeiten
        svethi, ja richtig, ich habe mit gdisk partitioniert und mit mkfs.ext4 das Dateisystem erstellt. Label habe ich keines vergeben (ist ja grundsätzlich nicht muss).

        Den Eintrag in der fstab hat er nicht erkannt, weil die PARTUUID nicht ausgelesen wurde (wie ich im Post unten beschrieben hab).
    • JonBovi
      Smart Home'r
      • 13.09.2016
      • 42

      #4
      Ich habe jetzt noch weiter gegraben und folgendes festgestellt in der sbin/usb-mount.sh:

      In der Funktion do_mount() wird festgelegt, unter welchem /media/usb/ Ordner das Laufwerk gemountet werden soll. Dazu wird die Variable ID_FS_LABEL bzw. ID_FS_PARTUUID verwendet.

      In Zeile 36 werden diese Variablen befüllt:
      Code:
      # Get info for this drive: $ID_FS_LABEL, $ID_FS_UUID, $ID_FS_TYPE $ID_FS_PARTUUID
      eval $(blkid -o udev ${DEVICE})
      Code:
      blkid -o udev /dev/sda1
      liefert bei mir folgendes zurück:

      Code:
      ID_FS_UUID=3da855ac-...
      ID_FS_UUID_ENC=3da855ac-...
      ID_FS_TYPE=ext4
      ID_FS_PARTLABEL=Linux filesystem
      ID_FS_PARTUUID=9775dbed-...
      Wenn ich das ganze mit eval ausführe, bekomme ich einen Fehler:
      Code:
      root@loxberry:~ # eval $(blkid -o udev /dev/sda1)
      -bash: filesystem: command not found
      Offenbar kommt eval mit dem Leerzeien im PARTLABEL nicht klar.

      Da ich kein ID_FS_LABEL habe und ID_FS_PARTUUID erst nach dem "Fehlereintrag" aufgelistet ist, haben beide Variablen keinen Wert und DEV_LABEL ist dadurch leer. Somit ergibt
      Code:
      MOUNT_POINT="/media/usb/${DEV_LABEL}"
      den Mointpoint /media/usb

      Zusammen mit loxberryinit.sh wie im vorigen Post beschrieben ergibt sich dann, dass beim Reboot alle Verzeichnisse vom externen Laufwerk gelöscht werden.

      Als Gegenprobe habe ich ein ext4 Label gesetzt und das Leerzeichen im ID_FS_PARTLABEL entfernt:
      Code:
      tune2fs -L backup-offsite /dev/sda1
      
      gdisk /dev/sda
      c 1
      Linux_filesystem
      Code:
      blkid -o udev /dev/sda1
      liefert jetzt folgendes:
      Code:
      ID_FS_LABEL=backup-offsite
      ID_FS_LABEL_ENC=backup-offsite
      ID_FS_UUID=3da855ac-...
      ID_FS_UUID_ENC=3da855ac-...
      ID_FS_TYPE=ext4
      ID_FS_PARTLABEL=Linux_filesystem
      ID_FS_PARTUUID=9775dbed-...
      und mit eval tritt kein Fehler mehr auf. Nach einem Neustart des Loxberrys wird die externe Platte jetzt nicht mehr eingebunden, weil es den fstab-Eintrag gibt (so wie es sein soll). Wenn ich den fstab-Eintrag entferne wird sie als /media/usb/backup-offsite eingebunden und die Daten bleiben nach einem Neustart erhalten.

      Zusammengefasst, das Problem tritt auf, wenn es kein FS_LABEL gibt und PARTLABEL ein Leerzeichen enthält (was gdisk beim Partitionen glaube ich standardmäßig so macht).

      Möglich dass das mit NTFS-Platten in dieser Konstellation so nie auftritt. Aber ich finde es trotzdem riskant in loxberryinit.sh die Ordner in /media/usb einfach zu löschen. Vielleicht wäre es besser wenn man vorher prüft ob die Ordner auch leer sind?


      Kommentar

      • svethi
        Lebende Foren Legende
        • 25.08.2015
        • 6344

        #5
        Scheint dann ja ein blöde Verkettung zu sein. Du hast manuell Partitioniert und gelabelt, das System konnte damit nichts anfangen und hat es blöd gemountet und die Loxberry-Scripts konnte daraus auch nur Murks machen, haben den Mount nicht sehen können und daher „Überbleibsel“ gelöscht. Der Loxberry ist für Leute konzipiert, die sowas alles nicht selber können und daher auf solche Tools angewiesen sind. Erst Recht soll es möglichst alles automatisch gehen. Daher muss man leider irgend einen Tod sterben. Von einer derartigen Verkettung ist bisher auch nichts bekannt.
        Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

        Kommentar

        • Prof.Mobilux
          Supermoderator
          • 25.08.2015
          • 5051

          #6
          Das mit eval und Leerzeichen ist schon doof. Das sollte eigentlich gehen. Kann man blkid irgendwie beibringen das in Quotes zu setzen?

          ich habe dazu ein Issue angelegt: https://github.com/mschlenstedt/Loxberry/issues/1320
          Zuletzt geändert von Prof.Mobilux; 28.05.2022, 15:07.
          🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


          LoxBerry - Beyond the Limits

          Kommentar

          • Prof.Mobilux
            Supermoderator
            • 25.08.2015
            • 5051

            #7
            JonBovi Kannst du bitte einmal folgenden Befehl ausführen und den Output hier posten: blkid -o export /dev/sda1
            🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


            LoxBerry - Beyond the Limits

            Kommentar

            • JonBovi
              Smart Home'r
              • 13.09.2016
              • 42

              #8
              Hier der Output:
              Code:
              DEVNAME=/dev/sda1
              UUID=3da855ac-...
              TYPE=ext4
              PARTLABEL=Linux\ filesystem
              PARTUUID=9775dbed-...
              (im Ursprungszustand, also mit Leerzeichen im PARTLABEL und ohne FSLABEL)

              Kommentar


              • svethi
                svethi kommentierte
                Kommentar bearbeiten
                Interessant ist aber auch, dass es partitionlables gar nicht wirklich gibt und das von unterschiedlichen Systemen unterschiedlich gehandhabt wird. Alle Platten, die ich hier getestet hab, haben gar keins. Der key wird gar nicht erst ausgegeben

              • JonBovi
                JonBovi kommentierte
                Kommentar bearbeiten
                svethi, keine Ahnung, ich partitionier unter Linux eigentlich immer so:
                gdisk /dev/sdx
                o (neue GPT)
                n (neue Partition)
                Typ 8300 (Linux filesystem, Standardwert bei gdisk)

                und anschließend mkfs.ext4 /dev/sdx1

                Ich wüsste jetzt nicht dass an meinem Vorgehen irgendwas besonders wäre.
            • svethi
              Lebende Foren Legende
              • 25.08.2015
              • 6344

              #9
              Das Problem scheint tiefer zu gehen. Lt Manpage vom blkid sollte udev key="Value" liefern. Zudem soll es angeblich spaces durch underlines ersetzen. Macht es auch nicht. Zudem ist udev auf deprecated gesetzt. Prof.Mobilux da muss wohl ein Einzeiler her 😂
              Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

              Kommentar

              • Prof.Mobilux
                Supermoderator
                • 25.08.2015
                • 5051

                #10
                JonBovi Das sieht besser aus. Zwar auch ohne quotes, aber dafür escaped. Probierst du den Befehl mal mit „eval“? Wenn das funktioniert, dann kann ich es schnell reparieren.

                interessant, dass er jetzt das Label nicht mehr mitliefert. Bei mir wird das mit „export“ auch angezeigt (heißt nicht mehr FS_LABEL sondern nur noch LABEL)
                Zuletzt geändert von Prof.Mobilux; 29.05.2022, 10:29.
                🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                LoxBerry - Beyond the Limits

                Kommentar


                • svethi
                  svethi kommentierte
                  Kommentar bearbeiten
                  Er hat kein Label. Daher auch das Problem

                • Prof.Mobilux
                  Prof.Mobilux kommentierte
                  Kommentar bearbeiten
                  Ach so. Oben war es noch ID_FS_LABEL=backup-offsite

                • JonBovi
                  JonBovi kommentierte
                  Kommentar bearbeiten
                  Ganz am Anfang hatte ich kein Label (wodurch der Fehler aufgetreten ist). Das Label habe ich zum Testen gesetzt (siehe #4).
              • JonBovi
                Smart Home'r
                • 13.09.2016
                • 42

                #11
                Ohne FS_LABEL:

                Code:
                root@loxberry:~ # blkid -o export /dev/sda1
                DEVNAME=/dev/sda1
                UUID=3da855ac-xyz
                TYPE=ext4
                PARTLABEL=Linux\ filesystem
                PARTUUID=9775dbed-xyz
                root@loxberry:~ # eval $(blkid -o export /dev/sda1)
                root@loxberry:~ # echo $PARTUUID
                9775dbed-xyz
                root@loxberry:~ # echo $PARTLABEL
                Linux filesystem
                Funktioniert also und die Variablen werden korrekt gesetzt.

                Mit FS_LABEL:

                Code:
                root@loxberry:~ # tune2fs -L "backup-offsite" /dev/sda1
                tune2fs 1.44.5 (15-Dec-2018)
                root@loxberry:~ # blkid -o export /dev/sda1
                DEVNAME=/dev/sda1
                LABEL=backup-offsite
                UUID=3da855ac-xyz
                TYPE=ext4
                PARTLABEL=Linux\ filesystem
                PARTUUID=9775dbed-xyz
                root@loxberry:~ # eval $(blkid -o export /dev/sda1)
                root@loxberry:~ # echo $LABEL
                backup-offsite
                root@loxberry:~ # echo $PARTLABEL
                Linux filesystem
                root@loxberry:~ # echo $PARTUUID
                9775dbed-xyz
                Funktioniert auch!

                Kommentar


                • svethi
                  svethi kommentierte
                  Kommentar bearbeiten
                  Damit kann man ja schonmal was anfangen
              • Prof.Mobilux
                Supermoderator
                • 25.08.2015
                • 5051

                #12
                JonBovi Super, danke. Das heißt die Variablen werden direkt gesetzt ohne dass du eval verwendest? Kannst du den Befehl trotzdem auch nochmal mit eval testen, ob das Leerzeichen jetzt funktioniert?

                Edit: Wer lesen kann ist klar im Vorteil Hast du ja längst gemacht….
                Zuletzt geändert von Prof.Mobilux; 29.05.2022, 15:23.
                🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                LoxBerry - Beyond the Limits

                Kommentar

                • Prof.Mobilux
                  Supermoderator
                  • 25.08.2015
                  • 5051

                  #13
                  JonBovi Bitte ersetze einmal das vorhandene usb-mount.sh durch diese neue Version (Owner und Berechtigungen beachten!): https://raw.githubusercontent.com/ms...n/usb-mount.sh

                  Dann mal bitte Deinen eigenen Eintrag aus der fstab herausnehmen (nicht nur auskommentieren, sondern komplett die Zeile entfernen). Dann Reboot. Der LoxBerry sollte Deine Platte unter /media/usb mounten.

                  Dann kannst Du Deinen eigenen Eintrag einmal wieder in der fstab hinzufügen und rebooten. Der LoxBerry sollte nun die Platte nicht mehr unter /media/usb automatisch mounten.
                  🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


                  LoxBerry - Beyond the Limits

                  Kommentar


                  • JonBovi
                    JonBovi kommentierte
                    Kommentar bearbeiten
                    Super, werde es heute Abend wenn ich wieder zu Hause bin testen!
                • JonBovi
                  Smart Home'r
                  • 13.09.2016
                  • 42

                  #14

                  mit Label:
                  Platte wird unter /media/usb/backup-offsite eingebunden -> OK

                  ohne Label:
                  Platte wird unter /media/usb/9775dbed-xyz eingebunden -> OK

                  mit Mountpoint in /etc/fstab:
                  Platte wird nicht doppelt gemounted -> OK

                  Sieht gut aus
                  Danke für den schnellen Fix!

                  Kommentar

                  Lädt...