Linux Knoppix 8.5, wie erkenne ich ob SDA die INTERNE DISK ist?

Flexibel

Active member
Registriert
7 März 2007
Beiträge
4.053
Ich mache ja mit Linux und DD Datensicherungen.

UPDATE: Im Beitrag #5 habe ein Hilfsprogramm (von mir) veroeffentlicht

Man geht einfach davon aus, dass SDA die interne Festplatte im X260 ist.

Aber kann man das noch irgendwie ueberpruefen welche DISK am USB haengt?

x260_Knoppix_8-3_lsblk.jpg

SDB ist ja eine Kopie von SDA, deshalb erkenne ich keinen einzigen Unterschied. Und bei RM ist auch keine 1, obwohl die DISK ja am USB im Prinzip entnehmbar ist. Aber ich kenne bei LINUX nur sehr wenige Befehle. Evtl. kann mir da ja noch geholfen werden.
 
Zuletzt bearbeitet:
Z. B. dmesg und im Bereich von SDA nach Typ und Seriennummer schauen, das lässt sich eindeutig zuordnen. Wenn Smarttools installiert sind, könnte man da auch schauen, smartctl -i /dev/sda
 
TLP – tlp-stat -d –fragt es so ab:
Code:
udevadm info -q property /dev/sda | grep -E 'ID_PATH|ID_BUS'
Beispielausgabe für eine SATA-SSD:
ID_BUS=ata
ID_PATH=pci-0000:00:1f.2-ata-1
ID_PATH_TAG=pci-0000_00_1f_2-ata-1
Für USB steht in den Strings statt "ata" dann "usb" bzw. für NVMe "nvme".
 
Deine Ausgabe Stammt von lsblk oder? Du kannst da einfach die Option "Tran" für das Transport Protokoll dranhängen:
Code:
lsblk -o +TRAN


udev generiert normalerweise verschiedenste Alias-Geräte im Verzeichnis /dev/disk/ Interessant für dich wäre vor allem "path":
Code:
ls -l /dev/disk/by-path/
 
Erstmal ein DANK an alle.

Ich bin seit den Tipps fleissig am programmieren und wollte mich melden, wenn ich fertig bin.

udevadm info -q property /dev/sda | grep -E 'ID_PATH|ID_BUS'

Gefaellt mir sehr gut, habe ich uebernommen und ATA und USB aus der Antwort rausgeschnitten.

Deine Ausgabe Stammt von lsblk oder?

Richtig - gut erkannt!


Durch diesen Tipp kann ich jetzt allerdings einige Programmzeilen wieder entfernen. Meine Abfrage vorher sagte auch nur ATA oder USB, jetzt wird auch SATA angezeigt.

Meine kompakte Uebersicht werde ich jetzt wohl so lassen, aber den Befehl habe ich mir schon notiert!

Jetzt ueberlege ich und probiere schon, ob ich LSBLK genau sagen kann welche Spalten ich haben moechte, aber noch kein Erfolg;-)
- NAME, TRAN, SIZE, RM und das nur von SDA, SDB, ..., SDF

Code:
Hier die Loesung: lsblk -o NAME,RM,SIZE,TRAN

Knoppix wollte einige Befehle nicht umsetzen, zur Zeit probiere ich es auf UBUNTU MATE 18.04. Knoppix 8.3 habe ich, Knoppix 8.5 ist aber schon bestellt. Dann wird noch einmal auf Knoppix 8.5 getestet.

Hier im Bild steht MINT, es ist aber MATE, hatte ich in der VM nur falsch eingetragen;-)

Bildschirmfoto zu 2019-07-17 23-51-36_klein.png

Und jetzt noch uebersichtlicher gemacht! - (lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT)

Bildschirmfoto zu 2019-07-18 03-16-04_klein.png

Diese Ansicht habe ich mir zusammenprogrammiert!

UPDATE Version: 190731, habe mal meinen neuen CODE hier reingestellt

Code:
#!/bin/bash
# Ingo Volmarstein - (190718) 190731
# Es werden nur die Disk angezeigt, die ich benoetige!
# chmod +x copy.sh - damit sich die Datei per bash copy.sh starten laesst

# copieren von Disk zu Disk
# Uebersichtliche Anzeige der angeschlossenen Datentraeger (Disk)
# lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT - extern

  finaletool="  " # ON - Dann verschwindet nur unten die Auswahl
 statusmount="  " # ON - MOUNTPONTs werden angezeigt
statussdcard="  " # ON - SD-Card anzeigen
 statusoptid="  " # ON - Optische Disk werden angezeigt
  statustran="  " # ON - lsblk -o +TRAN, alles wird ausfuehrlich angezeigt 
   statusiso="  " # ON - ISOs werden angezeigt in einem Verzeichnis
    statusls="  " # ON - ls Verzeichnis wird angezeigt in einem Verzeichnis

# Leerzeichen an die Befehlszeile Anpassung!
copytext="$USER@$HOSTNAME"
copyzahl=$( echo -n "$copytext" | wc -c )
copyzahl=$( expr $copyzahl - 10 )
copyspace=""
for (( k=1; k<$copyzahl; k++ )); do
       copyspace="$copyspace"" "
done

function jumpto
{
    label=$1
    cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
    eval "$cmd"
    exit
}

start:
# Erstellen des Arrays txtlsblk um die lsblk Zeilen unten zu durchsuchen
if [ "$statusmount" == "ON" ]; then
IFS='
' txtlsblk=($(lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT))
else
IFS='
' txtlsblk=($(lsblk -o NAME,RM,SIZE,TRAN))
fi
laengelsblk=${#txtlsblk
[*]} # Anzahl der Eintraege

# Ueberschrift - ist ja immer in null;-)
ausgabeanzahl=0
ausgabe[ausgabeanzahl]=${txtlsblk[0]}

# Alles (sda-sdh, mmcblk0, mmcblk1 und sr0 - sr3) suchen, mit und ohne optische Disk
forsuche=(sda sdb sdc sdd sde sdf sdg sdh)
if [ "$statussdcard" == "ON" ]; then
       forsuche+=(mmcblk0 mmcblk1)
fi
if [ "$statusoptid" == "ON" ]; then
       forsuche+=(sr0 sr1 sr2 sr3)
fi

for isuche in ${forsuche
[*]}
do
    isuchelaenge=$( echo -n "$isuche" | wc -c )
    if [ "$isuchelaenge" -gt "5" ]; then
    echo "isuchelaenge = $isuchelaenge"
           aktuellsda="$isuche"
           aktuellsdalaenge="7"
           isuchemount="${isuche}p1"
           aktuellsdalaengemount="9"
    else
           aktuellsdalaenge="3"
           isuchemount="${isuche}1"
           aktuellsdalaengemount="4"
           
           # suche ob sda - sdh und sr0 - sr3 vorhanden sind (ATA, USB)
           aktuellsda=$(udevadm info -q property /dev/$isuche | grep -E 'ED_PATH|ID_BUS')
           IFS="="
           set -- $aktuellsda
           aktuellsda=${2:0:$aktuellsdalaenge} # 2. Wort ($2) - Zeichen 0 bis 3
           
           # - extern - Hervorhebung nur wenn es USB ist und MOUNTPOINT inaktiv
           if [ "$aktuellsda" == "usb" ] && [ "$statusmount" != "ON" ]; then
                  laufwerk="- extern"
           else
                  laufwerk=" "
           fi
    fi

    if [ "$aktuellsda" == "ata" -o "$aktuellsda" == "usb" -o "$aktuellsda" == "mmcblk0" -o "$aktuellsda" == "mmcblk1" ]; then
          # Suchen der Disk in der Array txtlsblk Tennung = IFS Blank
          for (( k=0; k<$laengelsblk + 1; k++ )); do
                 IFS=" "
                 set -- ${txtlsblk[k]}
                 vergleich=${1:0:$aktuellsdalaenge} # 1. Wort ($1) - Zeichen 0 bis Variable
                 if [ "$vergleich" == "$isuche" ]; then
                        ausgabeanzahl=$( expr $ausgabeanzahl + 1 )
                        ausgabe[ausgabeanzahl]="${txtlsblk[k]} $laufwerk"
                 fi
          done
          # Bei MOUNTPOINT ON wird zusaetzlich sda1, sda2, ... gesucht
          if [ "$statusmount" == "ON" ]; then
                 for (( k=0; k<$laengelsblk + 1; k++ )); do
                        IFS=" "
                        set -- ${txtlsblk[k]}
                        vergleich=${1:2:$aktuellsdalaengemount} # 1. Wort ($1) - Zeichen 2 bis Variable
                        if [ "$vergleich" == "$isuchemount" ]; then
                        ausgabeanzahl=$( expr $ausgabeanzahl + 1 )
                        ausgabe[ausgabeanzahl]="${txtlsblk[k]}"
                        fi
                 done
          fi
    fi
done

clear

echo "-----------------------------------------------------------------------------"
echo "Programm: copy.sh              Knoppix 8.5 - 190222              IKa - 190731"
echo "-----------------------------------------------------------------------------"
echo "            $statusmount - m - MOUNTPOINTs anzeigen          $statustran - t - lsblk -o +TRAN"
echo "            $statussdcard - s - SD-Card anzeigen              $statusls - l - ls Files anzeigen"
echo "            $statusoptid - o - Optische Disk anzeigen        $statusiso - i - ISOs anzeigen"
echo "-----------------------------------------------------------------------------"

# Ausgabe
if [ "$statustran" == "ON" ]; then
      lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT
else
      # Ausgabe der gesammelten Daten
      for (( a=0; a<$ausgabeanzahl + 1 ; a++)); do
             echo "${ausgabe[a]}"
      done
fi

if [ "$statusls" == "ON" ]; then
       Verzeichnis=($(pwd))
       VerzSpaceZahl=$( echo -n "$Verzeichnis" | wc -c )
       VerzSpaceZahl=$( expr 63 - $VerzSpaceZahl)
       VerzSpace=""
       for (( k=1; k<$VerzSpaceZahl; k++ )); do
              VerzSpace="$VerzSpace"" "
       done
       echo "$VerzSpace Verzeichnis: $Verzeichnis"
       ls
fi

if [ "$statusiso" == "ON" ]; then
       ls -lh *.iso
fi

if [ "$finalecopy" != "ON" ]; then
       echo " "
       read -p "ENTER um Befehl einzugeben - oder Auswahl: " Auswahl
       case "$Auswahl" in
         m) if [ "$statusmount" == "ON" ]; then
                       statusmount="  "
            else
                       statusmount="ON"
            fi
            statustran="  "
            jumpto start
            ;;
         s) if [ "$statussdcard" == "ON" ]; then
                       statussdcard="  "
            else
                       statussdcard="ON"
            fi
            statustran="  "
            jumpto start
            ;;
         o) if [ "$statusoptid" == "ON" ]; then
                       statusoptid="  "
            else
                       statusoptid="ON"
            fi
            statustran="  "
            jumpto start
            ;;
         t) if [ "$statustran" == "ON" ]; then
                       statustran="  "
            else
                       statustran="ON"
            fi
            statusmount="ON"
            statusoptid="ON"
            statussdcard="ON"
            jumpto start
            ;;
            i) if [ "$statusiso" == "ON" ]; then
                       statusiso="  "
            else
                       statusiso="ON"
            fi
            jumpto  start
            ;;
         l) if [ "$statusls" == "ON" ]; then
                       statusls="  "
            else
                       statusls="ON"
            fi
            jumpto start
            ;;
       esac
       finalecopy="ON"
       jumpto start
fi
echo " "
echo "$copyspace               sudo dd if=/dev/s.. of=/dev/s.. bs=1M & pid=$""!"
exit 0

Wer es kuerzer und besser programmiert - bitte posten!

Wer noch Tipps hat, bitte posten.
 

Anhänge

  • Bildschirmfoto zu 2019-07-18 01-38-56_klein.png
    Bildschirmfoto zu 2019-07-18 01-38-56_klein.png
    21,4 KB · Aufrufe: 14
Zuletzt bearbeitet:
Wer es kuerzer und besser programmiert - bitte posten!

Da brauchst du gar nichts scripten. Setze einfach den Schalter 'd' wenn du nur die Hauptlaufwerke anzeigen möchtest. RM (removable) ist ja außerdem schon ein Indikator, daß es sich um ein externes Laufwerk handelt.
Code:
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT

Oder du extrahierst die Infos direkt aus /dev/disk/ und /sys/block/
 
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT

Guter Befehl, aber "loop0 bis loop7 und sr0" benoetige ich nicht, macht mir die Anzeige zu unuebersichtlich;-)

Ich wollte jetzt mit DD einen USB-Stick zu einem anderen USB-Stick kopieren.
Da fehlte mir jetzt der MOUNTPOINT.
Starte ich: bash copy.sh
- wird mir nur sda, sdb, sdc, sdd, sde und sdf angezeigt, wenn vorhanden.
Starte ich: bash copy.sh m
- wird mir sda & sda1, sdb & sdb1, .... angezeigt, wenn vorhanden und mit MOUNTPOINT.

Bekommt man das auch direkt hin, ohne (loop0 - loop7 und sr0)?

Mir gefaellt es sehr gut, dass ich nur die benoetigten Eintraege anzeigen kann. Davon will ich nicht mehr weg.

Die Knoppix DVD 8.5 ist ausverkauft. Ein ISO habe ich leider noch nicht gefunden. Wenn die Zeitung ausverkauft ist koennte ja das ISO im Internet stehen. So gehen viele von Knoppix weg.
 
Zuletzt bearbeitet:
Bekommt man das auch direkt hin, ohne (loop0 - loop7 und sr0)?

wenn du nur bestimmte Laufwerke ausgeben möchtest kannst du diese anhängen
Code:
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT /dev/sda /dev/sdb


oder auch
Code:
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT /dev/sd[a-f]


du kannst auch unerwünschte Zeilen der Ausgabe mit grep entfernen
Code:
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT | grep -vE "loop|sr0"


Ich wollte jetzt mit DD einen USB-Stick zu einem anderen USB-Stick kopieren.
Da fehlte mir jetzt der MOUNTPOINT.
wenn du mit dd kopierst solltest du die Laufwerke vorher umounten, somit haben sie dann auch keinen mount point mehr.
 
Die Knoppix DVD 8.5 ist ausverkauft. Ein ISO habe ich leider noch nicht gefunden. Wenn die Zeitung ausverkauft ist koennte ja das ISO im Internet stehen. So gehen viele von Knoppix weg.
Meine Knoppix-DVD 8.5 ist aus dem letzten Linux-Magazin (Zeitschrift). Wenn Du magst, kann ich Dir das als ISO zukommen lassen...
 
lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT | grep -vE "loop|sr0"

DANKE! - Super!

Da benoetige ich mein Programm schon nicht mehr;-)

Meine Loesung ist nun, je nachdem was ich machen moechte:

Code:
lsblk -do NAME,SIZE,TRAN /dev/sd[a-f]

# Alternativ

lsblk -do NAME,RM,SIZE,TRAN,MOUNTPOINT /dev/sd[a-f] /dev/sd[a-f]1

UPDATE - Schade - funktioniert leider nicht mit Knoppix 8.5, da werden nicht vorhandene Disk [a-f] angemeckert.

Code:
| grep -vE "loop|sr0"
ist überflüssig, denn Du läßt lsblk sowieso nur /dev/sd[a-f] anzeigen.

Wurde deshalb jetzt weggelassen!
/UPDATE


wenn du mit dd kopierst solltest du die Laufwerke vorher umounten, somit haben sie dann auch keinen mount point mehr.

Komme ich dann nicht durcheinander mit den Disk?
Nach dem unmount ist SDA, SDB, usw. noch vorhanden und ansprechbar um DD anzuwenden?
 
Zuletzt bearbeitet:
Wieso sollten die Disk-Devices nach dem Unmount weg sein? Wie wolltest Du sie bzw. die Devices der Partitionen denn erneut mounten?

Nach dem Unmount ist lediglich unterhalb des Mountpoints nichts mehr zu sehen.

ps. das
Code:
 | grep -vE "loop|sr0"
ist überflüssig, denn Du läßt lsblk sowieso nur /dev/sd[a-f] anzeigen.
 
Zuletzt bearbeitet:
Die Lösung mit /dev/disk/by-label/eindeutiges-Label-verpasst wurde doch eigentlich mehr oder weniger schon genannt?

Alles andere scheint mir zu umständlich?
 
Nach dem unmount ist SDA, SDB, usw. noch vorhanden und ansprechbar um DD anzuwenden?
Ja, ein umount hängt nur das Dateisystem aus, so daß du nicht mehr auf Verzeichnisse und files zugreifen kannst. Das Blockgerät selbst (z.B. /dev/sda) bleibt weiterhin vorhanden und du kannst eine 1:1 Kopie davon machen.
dd arbeitet auf Sektorebene und greift auf Rohdaten des Laufwerks zu ohne vom Dateisystem abhängig zu sein. Wenn dein Dateisystem gemountet ist, dann könnte es sein, daß einige files gecacht wurden und somit noch gar nicht nicht auf das Laufwerk geschrieben worden sind. Daher immer umounten bevor du mit dd kopierst.

Führe nach dem Beschreiben eines Laufwerks mit dd auch immer 'sync' aus. Damit stellst du sicher, daß nicht nur alle Daten eingelesen wurden sondern auch tatsächlich geschrieben worden sind.
 
Zuletzt bearbeitet:
Führe nach dem Beschreiben eines Laufwerks mit dd auch immer 'sync' aus.

Danke fuer die Tipps, damit muss ich mich aber spaeter beschaeftigen.
Wenn Du ein Beispiel posten wuerdest, wie der Befehl anzuwenden ist,
brauche ich nicht so lange im Internet suchen;-)


Meine Knoppix-DVD 8.5 ist aus dem letzten Linux-Magazin (Zeitschrift). Wenn Du magst, kann ich Dir das als ISO zukommen lassen...

Ich DANKE Dir, fuer die schnelle Hilfe.

Leider muss ich jetzt zurueck rudern. Knoppix 8.5 meckert ueber sd[b-f] wenn sie nicht vorhanden sind. Schade, bei UBUNTU MATE 18.04.2 funktionierte es tatellos. Da mein altes Programm ohne Probleme mit Knoppix 8.5 funktioniert bleibe ich nun erstmal dabei. Vorteil von Knoppix 8.5 ist auch, dass man es sehr leicht auf dem USB-Stick bekommt und damit 32-bit und 64-bit Systeme booten kann.
 
Zuletzt bearbeitet:
Keine Anzeige und keine Fehlermeldung unter:
- Knoppix 8.5
- UBUNTU MATE 18.04.2
 
Noch besser das dd mit oflag=direct aufrufen, dann wird direkt geschrieben ... ;)
 
Noch besser dürfte oflag=dsync sein (dann wird nämlich immer noch der page cache genutzt, aber nach jedem Block geflusht). Könnte etwas performanter sein. Bei direct wird das Caching so weit wie möglich komplett übergangen, was hier aber gar nicht nötig ist. Geht es nur darum, sicherzustellen, dass die Daten am Ende komplett geschrieben wurden, kann man auch conv=fsync (oder fdatasync) nehmen. Dadurch wird nämlich nur am Ende gewartet, bis alles (oder nur die zum Lesen notwendigen Daten) aus dem Arbeitsspeicher geschrieben wurde.

PS: Man sollte nicht vergessen, die Blocksize bei dd anzupassen. bs=1M ist in der Regel ein guter Standardwert. Der Standardwert von dd (512 Byte) ist vor allem bei direct/sync extrem langsam, aber auch ohne diese Flags gibt es einigen Overhead, den man deutlich spürt.
 
Zuletzt bearbeitet:
man sync hilft dir weiter. Um es abzukürzen: du gibst einfach nur den Befehl
Code:
sync

ein, fertig.
Noch besser das dd mit oflag=direct aufrufen, dann wird direkt geschrieben ...

Noch besser dürfte oflag=dsync sein (dann wird nämlich immer noch der page cache genutzt, aber nach jedem Block geflusht). Könnte etwas performanter sein.



Ich habe davon keine Ahnung, dass muss ich mir alles ergoogeln;-)

Allerdings ist mein Grundgeruest schon viel besser geworden, kommt jetzt auch ohne externe Datei aus. Ich habe den CODE oben mal erneuert.

Wer da gute Vorschlaeg hat, her damit.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben