Verzeichniss von Festplatten schreiben - geht das noch übersichtlicher

  • hi,


    ich möchte den Inhalt von meinen usb/sata Festplatten - zur besseren Übersicht - in jeweils eine der platte zugeordneten Datei schreiben ;) Das funktioniert manuell schon recht gut. Nur wird derzeit die Festplatte nicht eindeutig ausgewertet, sondern sich am automatisch gemounteten /dev/sdx orientiert.



    Wenn nach den reboot (oder usbunmount) eine andere platte die selbe sdx bezeichnung bekommt wird die vorhanden Datei aber überschrieben obwohl es nicht zur Festpaltte passt. Da muss also für den brauchbaren Einsatz ne andere lösung her. (wahrscheinlich über fdisk -l den disk ident. auswerten)


    Wie wertet man übersichtlich die Unterschiedlichen disk identiver aus? Oder gibt es nur die Möglichkeit das für jede Platte einzeln mit ner if then Abfrage zu machen und dann wieder die ca. 15 Zeilen.. und weiter zur nächsten Platte...


    Gruss Lexi


    ps. es geht mir nicht um das mounten der platten, das läuft schon automatisch ;)


    edit : topic angepasst

  • Du kannst tune2fs einsetzen.


    1. Namen für Partition vergeben
    tune2fs -L dein-plattenname /dev/sde1


    2. Namen checken:
    dumpe2fs -h /dev/sde1 | grep name


    3. Via Name mounten
    in /etc/fstab eintragen
    LABEL= dein-plattenname /dein-mountpoint ext3 acl,user_xattr 1 1


    4. Mounten
    mount -a


    Auch nach Reboot wird die Platte gemountet.

  • hi,


    wahrscheinlich hätte mein erster post und das Topic besser beschrieben werden können ;)


    Vorrangig geht es mir um die "wiederholungen" im script. Mal mein derzeitiges :



    ab der Zeile 40 "wiederholt sich das ganze ja "fast" da gibt es doch bestimmt bessere Möglichkeiten? Die das ganze dann noch besser erweitern lassen wenn ne weitere Platte hinzu kommt?


    @ geronimo


    ja ist da. Du fragst wegen den eindeutigen zuordnen? Der disk identifer von fdisk ist kürzer und damit funktioniert es derzeit ganz gut. Naja wenn mehr als eine platte drann ist dann geht das noch schief...


    @ frank-km


    1 und 2 wäre ne alternative scheint aber nicht mit jeder partition klar zu kommen. Mounten geschieht eh schon automatisch. Und ob das mit Namen gemountet wird ist mir egal.


    Gruss Lexi


    ps. hat zufällig noch einer ne idee um die $LS1-$LS5 zu optimieren

  • Hi,
    interessant!


    Ich habe mir in Perl mal was aehnliches gebastelt, Basis ist ein einfaches 'find /video -iname *.rec' um alle Filme zu finden (von den bereits gemounteten Platten).
    Dann kann man in Perl sehr einfach den kompletten Pfad in seine einzelnen Bestandteile zerlegen (Trenner ist '/') und dann weiter verarbeiten (bei mir Erzeugung eines .html Files).
    In Perl waere das Problem mit LS1...LS5 wahrscheinlich einfacher (und universeller!) zu loesen.


    Gruss,
    - berndl

  • Moin,


    Zitat

    Der disk identifer von fdisk ist kürzer und damit funktioniert es derzeit ganz gut. Naja wenn mehr als eine platte drann ist dann geht das noch schief...


    Weiß nich ...
    ... ich lese daraus, dass es eben nicht funzt.


    Ich habe so ein Wechselplattenrack, bei dem ich zur Laufzeit Platten ein- und ausschalten, bzw. wechseln kann - das hat mich anfangs auch etwas Arbeit gekostet. Genau wie die vielen USB-Teile, die mal hier, mal da eingesteckt werden und jeweils andere devices erhalten.


    Seit ich /dev/disk/by-uuid/... verwende, ist mit dem Kwatsch schluss. Jetzt kann ich auch Skripte zwischen den Rechnern portieren und die laufen gleichermaßen.


    Zitat

    Vorrangig geht es mir um die "wiederholungen" im script.


    Hm, je nachdem, was Dir wichtiger ist. Wenn Du, vom OSD gelöschte Aufnahmen, die sich noch auf Platte befinden rausfiltern möchtest, ist die Methoden von berndl gut.
    Ich habe seinerzeit mit 'find /video0 -name index.vdr -print' gearbeitet. Damit findet man garantiert nur VDR-Aufnahmen, muss aber selbst schauen, ob das Verzeichnis bereits eine Löschkennung enthält.


    Ich habe es zwar auch mit perl gemacht, sollte aber auch mit bash Mitteln gehen.
    sed und Co ist Dein Freund.
    Was mir beim bashen sehr geholfen hat war: http://tldp.org/LDP/abs/html


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Ich würde die usb platten mit
    device=$(hwinfo --usb|grep "scsi"|cut -d " " -f5|cut -d "," -f1|uniq)
    ermitteln und die
    wiederholenden sachen in einer for schleife unterbringen.
    In der schleife kan man ja testen ob z.B. $i gemountet ist.
    mount | grep $i && ... usw


    Im übrigen kriegt man über den ablauf des skripts eine menge herraus.
    wen man am anfang des skripts
    set -x
    hinzufügt

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

  • Zitat

    mount | grep $i && ... usw


    ein grep von /proc/mounts dürfte noch etwas schneller sein ...


    die hwinfo der usb-platten läßt sich übrigens auch aus /proc auslesen ;)

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • ok mit proc/mounts hast du recht.


    ich habe schonmal versucht usb zuverlässig zu ermitteln aber hier
    http://vdr-portal.de/board/thread.php?threadid=74380&hilightuser=6502


    ich würde wieder auf hwinfo setzen

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

  • Hi Dauser,


    sorry, der Fred ist an mir vorbei gegangen :(


    Allerdings ist es *imho* schon was anderes, ob Du genau wissen willst, was für ein Device es ist, oder "einfach" eine Platte zuverlässig zu infizieren.
    Du hast sicher recht, die Ausgaben von hwinfo zu parsen dürfte portabler sein, als /proc selbst aus zu werten - ich schätze, hwinfo wird letztlich auch nix anderes machen.


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • hi,


    habe gestern mal wieder etwas weiter getestet. Habe mal ne for schleife und by-uuid auswerten probiert. Das funktioniert auch schon im reinen teststadium ganz gut ;)



    nur wäre es schöner wenn man in Zeile 12 for i in 1 2 3 4 ....; do einsetzen könnte (oder auch a b c d ..) und zum Beispiel in Zeile 15 dann den Name der dazugehörigen Platte auswerten könnte "echo $FP$iN erkannt"


    Gibt es Möglichkeiten mit klammern, ', " oder was weis ich das umzusetzen?


    Zitat

    Im übrigen kriegt man über den ablauf des skripts eine menge herraus.
    wen man am anfang des skripts
    set -x
    hinzufügt


    Danke, das ist echt hilfreich ;) Schon oft gesehen (auskommentiert) und nie drumm gekümmert was sich dahinter verbirgt.


    Gruss Lexi

  • Hi,
    hmm, ich versteh' glaube ich doch noch nicht ganz, was du machen willst. Willst du von ein paar Platten (die, wie oben geschrieben schon gemounted sind) "nur" einen Dump mit 'ls' machen? Und wenn die gemounted sind, haengen die alle unter einem gleichen Mountpoint? (z.B. /mnt)


    Dann kannst du doch ein 'ls -lR /Pfad > temp.txt' machen oder ein 'find /Pfad -iname *.* > temp.txt'. Dann hast du alles in einem Rutsch in einer Datei stehen und kannst die weiter verarbeiten. Und die Zuordnung, welcher Pfad welcher Platte entspricht bekommst du ja z.B. aus der /etc/fstab.


    Habe ich das richtig verstanden?


    Gruss,
    - berndl

  • Zitat

    nur wäre es schöner wenn man in Zeile 12 for i in 1 2 3 4 ....; do einsetzen könnte (oder auch a b c d ..) und zum Beispiel in Zeile 15 dann den Name der dazugehörigen Platte auswerten könnte "echo $FP$iN erkannt"


    Meinst Du sowas:

    Code
    devDir='/dev/disk/by-uuid'
    
    
       for i in $(ls $devDir); do 
          echo "aktuelle Platte ist: $i"; 
    
    
       done


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Zitat

    Original von berndl
    Hi,
    hmm, ich versteh' glaube ich doch noch nicht ganz, was du machen willst. Willst du von ein paar Platten (die, wie oben geschrieben schon gemounted sind) "nur" einen Dump mit 'ls' machen? Und wenn die gemounted sind, haengen die alle unter einem gleichen Mountpoint? (z.B. /mnt)


    fast Richtig, es kann aber mal nur eine zusätzliche Platte am System dran/drin (usb/wechselrahmen) sein, oder auch mahl mehrere.


    Zitat

    Original von berndl
    Dann kannst du doch ein 'ls -lR /Pfad > temp.txt' machen oder ein 'find /Pfad -iname *.* > temp.txt'. Dann hast du alles in einem Rutsch in einer Datei stehen und kannst die weiter verarbeiten.


    naja, wenn alle platten drann sind würde das so gehen ;) wenn nur eine nicht angeschlossen ist fehlt so aber deren Inhaltsverzeichniss. Von daher hätte ich das gerne in extra Dateien geschrieben und die eindeutig zugeordnet.


    Zitat

    Original von berndl
    Und die Zuordnung, welcher Pfad welcher Platte entspricht bekommst du ja z.B. aus der /etc/fstab.


    bei gen2vdr werden die platten automatisch über das script /_config/bin/usb_mount.sh erkannt (insofern das aktiviert wurde) Das möchte ich auch beibehalten. Mit der fstab ist da nichts.


    Gruss Lexi

  • Zitat

    Original von geronimo


    Meinst Du sowas:

    Code
    devDir='/dev/disk/by-uuid'
    
    
       for i in $(ls $devDir); do 
          echo "aktuelle Platte ist: $i"; 
    
    
       done


    Gruß Geronimo


    es soll noch eine Lösung gefunden werden um das erstelle Inhaltsverzeichniss jeweils in eine namentlich bessere zuordenbarkeit zu bekommen. Ist hier aber auch erst mal egal werde das für diesen Fall dann am ende des scripts die dateinamen umbenennen lassen. Aber generell würde mich das schon interessieren warum das mit "$FP$iN" nicht klappt und wie man das ändern könnte ;)


    Gruss Lexi


  • ok, dann nehme ich alles zurueck und behaupte das Gegenteil :o)
    Meine Perl-Loesung hilft dir dann auch nicht weiter. Und zu shell-Scripten kann ich nu wirklich nix sinnvolles beitragen.


    Gruss,
    - berndl

  • Hi lexi,


    manchmal bin ich so neben der Spur, dass ich garnicht merke, wenn ich mit beiden Füßen auf der Leitung stehe.


    Hast Du dir iafs schon mal angeschaut?


    Hatte ich "eigentlich" für genau den Zweck geschnitzt.
    Wäre interessant zu hören, wenn Du es schon ausprobiert hast, warum, bzw. was nicht duht, und ob sich da nicht was machen ließe ...


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Hi lexi,


    um Deine Frage auch noch zu beantworten, hier ein kleines Beispiel, wie Du mehrere Variablen in einer Schleife verändern könntest ...


    Es gibt dabei mehrere Stolperfallen:

    • Du brauchst für den Zugriff auf ein Array-Element die Syntax mit den geschweiften Klammern
    • der Zähler muss mit let erhöht werden


    Was Du machen wolltest ist das geschachtelte Auflösen von Variablen. Das geht auch, ist aber schwieriger, weil Du da mit subshells arbeiten musst.
    Ich denke mit dieser Schleifenart kommst Du rel. einfach und doch elegant zum Ziel.




    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • So, habe die andere Konstruktion wieder gefunden.


    Ich hatte es bei meinem Installateur verwendet, aber wenn man sowas nicht regelmäßig braucht, ist's auch schnell wieder vergessen.
    Muss mich übrigens korrigieren - das mit der subshell war ein anderes Problem.


    Nun denn, hier also die Variante, mit der Du Deine Variablen hochzählen kannst:



    Der Knackpunkt liegt bei der Verwendung von eval und dem doppelten Dollar, wobei der erste "entschäft" werden muss - deshalb der Backslash.



    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!