Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, ein einfaches Skript um USB Speichermedien sicher zu entfernen, vorhandene Speichermedien werden angezeigt und man kann gezielt ein Speichermedien sicher entfernen. Auch wenn der Ausdruck Auswerfen nicht ganz korrekt ist viel mir nix besseres ein, eine Möglichkeit wäre vielleicht noch ausschalten? Egal es heißt jetzt auswerfen.sh 😉.
Passend zu dem Skript gibt es auch eine Desktopdatei die man auf dem Desktop oder in einer Leiste ablegen kann, so kann man mit einem Klick das Skript starten und Speichermedien sicher entfernen. die Desktopdatei auswerfen.desktop:
| [Desktop Entry]
Version=1.0
Type=Application
Name=auswerfen
Comment=Ein Speichermedium ohne Datenverlust auswerfen
Exec=exo-open --launch TerminalEmulator --zoom=2 -e '~/Dokumente/Skripte/auswerfen.sh'
Icon=/~/Bilder/Icons/eject.png
Path=
Terminal=false
StartupNotify=true
|
das Skript auswerfen.sh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 | #!/bin/bash
#
# --- Infos ----------------------------------------------------------------------------------------------------
#
# Scriptname auswerfen.sh
# Funktion ein Speichermedium ohne Datenverlust auswerfen
#
# benötigt bash, find, sync, udisksctl (bei Xubuntu 18.04 vorhanden)
#
# Status noch in Arbeit ( wer wird schon fertig??? )
# Fehler keine, oder??? ( Naubadi is pörfekt )
#
# Start 09.05.2019
# Stand 22.05.2019
#
# --- Variablen, den Inhalt bei Bedarf ändern ------------------------------------------------------------------
#
extern="/media/$USER/" # Pfad zum externen Speichermedium
#
linieX="-" # Zeichen für eine Linie
beenden="q" # mit dieser Taste wird das Skript beendet
#
# --- Funktion für eine Linie ----------------------------------------------------------------------------------
#
function linie_erstellen { # Funktion um eine Linie zu erstellen
anzahl=0 # Zähler für die Linie auf 0 setzen
linie="" # Linie löschen
while [ "$1" != "$anzahl" ] ; do # Schleife für die Linie
linie="$linie$linieX" # Zeichen an die Linie anhängen
((anzahl+=1)) # Zähler für die Linie um 1 erhöhen
done # Ende von while [ "$1" != "$anzahl" ]
} # Ende von function linie_erstellen
#
# --- Speichermedien suchen ------------------------------------------------------------------------------------
#
beenden_ok="" # Beenden löschen
while [ ! $beenden_ok ] ; do # Schleife für das Menü
clear # Terminal Inhalt löschen
nr="0" # Zähler für die Speichermedien
medium=() # Array für die Speichermedien
fpara="-maxdepth 1 -type d" # Parameter für find
find "$extern" $fpara > "$HOME/dumm.hf.txt" # Speichermedien in eine Datei schreiben
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
while read -r line ; do # Schleife um eine Zeile der Datei einzulesen
if [ "${line##*$extern}" ] ; then # wenn ein Speichermedium existiert
((nr+=1)) # Zähler um 1 erhöhen
medium["$nr"]="${line##*$extern}" # Speichermedium in das Array übernehmen
echo "$nr) ${medium[$nr]}" # Speichermedium mit Nr. anzeigen
fi # Ende von if [ "${line##*$extern}" ]
done < "$HOME/dumm.hf.txt" # while-Schleife bis zum Dateiende wiederholen
rm "$HOME/dumm.hf.txt" # Datei wieder löschen
#
# --- gefundene Speichermedien anzeigen ----------------------------------------------------------------------
#
eingabe="" # Eingabe löschen
speichermedium="" # Speichermedium löschen
if [ "$nr" != "0" ] ; then # wenn mehrere Speichermediem existieren
echo # Leerzeile
echo -n "Welches Medium 1-$nr soll ausgeschaltet werden? " # Text anzeigen
while [ "$eingabe" = "" ] ; do # Schleife für die Eingabe
read -r -t 1 -s -n 1 -p "" eingabe # Eingabe einlesen
echo -n "$eingabe" # eingegebenes Zeichen anzeigen
done # Ende von while [ "$eingabe" = "" ]
speichermedium="${medium[$eingabe]}" # das ausgewählte Speichermedium übernehmen
echo "" # Leerzeile
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
fi # Ende von if "${medium[$nr]}"
#
# --- Speichermedium ausschalten -----------------------------------------------------------------------------
#
if [ "$speichermedium" ] ; then # wenn ein Speichermedium existiert
echo # Leerzeile
echo "Der Puffer wird mit 'sync' gespeichert" # Text anzeigen
sync # Puffer speichern
echo "Das Medium wird mit 'unmount' ausgehangen" # Text anzeigen
usblongname=$(lsblk -l | grep "$speichermedium") # Device vom Speichermedium suchen
usbname="${usblongname:0:4}" # Device vom Speichermedium
udisksctl unmount -b "/dev/$usbname" # Speichermedium aushängen
echo "Das Medium wird mit 'power-off' ausgeschaltet" # Text anzeigen
udisksctl power-off -b "/dev/$usbname" # Speichermedium ausschalten
echo # Leerzeile
echo "Fertig, das Medium kann entfernt werden" # Text anzeigen
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
else # sonst
echo "Es wurde kein Medium in '$extern' gefunden!"
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
fi # Ende von if [ "$speichermedium" ]
#
# --- weiter machen oder beenden? ----------------------------------------------------------------------------
#
if [ ! "$beenden_ok" ] ; then # wenn nicht beenden gewählt wurde
eingabe="" # die Eingabe löschen
echo # Leerzeile
echo -n "Weiter machen mit 'w' beenden mit '$beenden': " # Text anzeigen
#
while [ "$eingabe" = "" ] ; do # Schleife für die Eingabe
read -r -t 1 -s -n 1 -p "" eingabe # Eingabe einlesen
done # Ende von while $eingabe
echo # Leerzeile
#
if [ "$eingabe" = $beenden ] ; then # wenn beenden gewählt wurde
beenden_ok=$beenden # das Skript beenden
fi # Ende von if $eingabe
fi # Ende von if $beenden
#
eingabe="" # Eingabe löschen
done # Ende von while Menü
#
# --- Skript Ende ----------------------------------------------------------------------------------------------
#
|
Grüßle, Naubaddi
|
somega
Anmeldungsdatum: 2. Februar 2019
Beiträge: 13
|
Ich habe in XUbuntu rechts unten standardmäßig ein USB-Stick-Symbol zum auswerfen von USB-Speichermedien. Deshalb verstehe ich den Sinn nicht ganz...
|
RamSpeicher
Anmeldungsdatum: 17. Juli 2009
Beiträge: 2508
|
Naubaddi schrieb:
ein einfaches Skript um USB Speichermedien sicher zu entfernen
Besten Dank 👍 somega schrieb:
Ich habe in XUbuntu rechts unten standardmäßig ein USB-Stick-Symbol zum auswerfen von USB-Speichermedien.
Und sollte das Symbol mal aus irgend einem Grund Verschwinden (hat man hier alles schon gesehen) dann solltest Du Dir vorher lieber ▶ mount ◀ Einverleiben.
Deshalb verstehe ich den Sinn nicht ganz...
Auch wenn Du den Sinn nicht verstehst hat sich zum einen Naubaddi die Arbeit gemacht, und teilt diese nun mit uns, Communitygedanke und so 😉 Und es wird sich bestimmt jemand Finden der das braucht. Und vielleicht bist Du das eines Tages selber, siehe es doch mal so.
|
Naubaddi
(Themenstarter)
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, somega schrieb: ...Deshalb verstehe ich den Sinn nicht ganz...
der Sinn ist ein zuverlässiges entfernen von externen Speichermedien ohne Datenverlust, siehe Bei "Orte" in der Leiste fehlt die Aktion "Auswerfen", die Möglichkeiten bei xubuntu externe Medien zu entfernen funktioniert mir nicht zuverlässig genug. Wenn der Rechner verreckt oder das System defekt ist ist mir wurscht, was mir wichtig ist sind meine persönlichen Daten (etwa 20.000 Dateien) von ca. 40 Jahren. Und für Leute die ähnlich denken ist das Skript gedacht, ganz wichtig ist mir der Befehl: | udisksctl power-off -b "/dev/$usbname" # Speichermedium ausschalten
|
nur damit bin ich mir sicher das externe Speichermedium gefahrlos von USB trennen zu können. Grüßle, Naubaddi (Bleihutträger)
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Naubaddi schrieb: Wenn der Rechner verreckt oder das System defekt ist ist mir wurscht, was mir wichtig ist sind meine persönlichen Daten (etwa 20.000 Dateien) von ca. 40 Jahren. Und für Leute die ähnlich denken ist das Skript gedacht, ganz wichtig ist mir der Befehl:
Danke für das Script. Ich habe ein ähnliches am Homeserver, um die externe Platte auszuwerfen. Werde die beiden mal nebeneinanderhalten und gucken, ob ich was verbessern kann ☺ btw: Du sicherst hoffentlich nicht auf einem USB-Stick… die Dinger sterben gerne mal einfach so. Ich habe ähnliche Zeiträume (von 1997-heute) wie du abzudecken und insgesamt 5 Backups davon, die regelmässig aktualisiert werden, und dann und wann stöpsle ich eine externe Platte an, um zusätzlich die räumliche Trennung zu gewährleisten, falls die Bude mal abfackelt.
|
Naubaddi
(Themenstarter)
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, ChickenLipsRfun2eat schrieb: ...Du sicherst hoffentlich nicht auf einem USB-Stick… die Dinger sterben gerne mal einfach so...
nein, auch nicht auf CD, DVD, SD-Karte oder CF-Karte. Eine SSD-Speicherkarte wird parallel zu einer Festplatte getestet, bei SSD-Speicherkarten bin ich mir (noch) nicht sicher wie gut die sind. In 40 Jahren habe ich die besten Erfahrungen mit Festplatten gemacht, nicht ein Bit wurde auf Festplatten verloren. Nur für das Backup wird die Festplatte angeschlossen, so erhöht sich die Haltbarkeit. Die älteste Festplatte hat gerade mal 60GB und funktioniert immer noch, das hat kein anders Speichermedium geschafft. Grüßle, Naubaddi
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Habe mir mal udisk2 installiert. Beim nächsten Backup teste ich das mal. Bisher hatte ich immer nach dem sync abgestöpselt. Schaden kann es nicht 😉
|
Naubaddi
(Themenstarter)
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, ChickenLipsRfun2eat schrieb: ...Bisher hatte ich immer nach dem sync abgestöpselt. Schaden kann es nicht 😉
sync ist ein absolutes muss, das i Tüpfelchen ist nach dem sync ein | udisksctl power-off -b "/dev/$usbname" # Speichermedium ausschalten
|
damit wird der USB-Anschluss Stromlos gemacht. Für ganz paranoide wäre eine Erdung am Handgelenk noch ganz gut, kann mich erinnern das es Momente gab bei denen ein Funke von meiner Hand zum Computer über gesprungen ist. Beim PKW kommt es immer noch vor, und das tut schon etwas weh. Grüßle, Naubaddi
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Naubaddi schrieb: sync ist ein absolutes muss, das i Tüpfelchen ist nach dem sync ein
Ja, das ist klar. Wobei ich festgestellt habe, dass seit 16.04(?) das sync offenbar automatisch läuft und direkt fertig ist. Früher™ hat das immer ein, zwei Sekunden gewerkelt. Ich habe es trotzdem drin gelassen.
Für ganz paranoide wäre eine Erdung am Handgelenk noch ganz gut, kann mich erinnern das es Momente gab bei denen ein Funke von meiner Hand zum Computer über gesprungen ist. Beim PKW kommt es immer noch vor, und das tut schon etwas weh.
Interessanter Aspekt. Aber ich berühre beim Abstöpseln nur Plastikteile. Funkensprünge beim normalen Bedienen eines PCs hatte ich tatsächlich noch nie. Dürfte bei den maximal 12V des USB aber auch einen nanobereich an Abstand erfordern?
|
Dr_Schmoker
Anmeldungsdatum: 19. Juni 2008
Beiträge: 3322
Wohnort: Berlin
|
Hallo, hast du eine Tastatur aus Metall 😲 . ich bekomme auch oft an möglichen Sachen eine gewischt, aber noch nie an der Tastatur. Statische Aufladung durch Fußbodenbelag, Schuhe, Kleidung, etc ist ja bekannt. Wenn dein Funke etwa 1cm springt, sind das ungefähr 1000V. Also Vorsicht bei sensitiven Tastaturen 😉
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Naubaddi schrieb:
Auch wenn der Ausdruck Auswerfen nicht ganz korrekt ist viel mir nix besseres ein, eine Möglichkeit wäre vielleicht noch ausschalten
Entkoppeln?
| #
# --- Funktion für eine Linie ----------------------------------------------------------------------------------
#
function linie_erstellen { # Funktion um eine Linie zu erstellen
anzahl=0 # Zähler für die Linie auf 0 setzen
linie="" # Linie löschen
while [ "$1" != "$anzahl" ] ; do # Schleife für die Linie
linie="$linie$linieX" # Zeichen an die Linie anhängen
((anzahl+=1)) # Zähler für die Linie um 1 erhöhen
done # Ende von while [ "$1" != "$anzahl" ]
} # Ende von function linie_erstellen
|
Ich gehe mal davon aus, dass Du auf Feedback aus bist.
Die Kommentare sind Müll.
Vielleicht ist irgendwo ein 50¢-Stück im Müll, aber man wird es nicht finden. Ein häufiger Fehler bei Kommentaren: Zielpublikum verfehlen. Wer ein Script liest soll damit nicht Skripten lernen, sondern jmd. der das schon kann, soll über ungewöhnliches und schwieriges informiert werden. Was Anfänger wissen gehört nicht in den Kommentar.
Dass eine foofunktion foo macht, fügt keine Information zu, die nicht schon da ist. Es ist weder so, dass jede Zeile einen Kommentar braucht, noch so, dass für jede Zeile Code eine Zeile Kommentar ausreicht. Ende-der-Schleife o. der Funktion zu kommentieren: Wenn Du das brauchst, rückst Du zu wenig ein oder hast zu lange Blöcke/Funktionen, zu wenig Funktionen oder eine Kombination aus mehrerem.
#
# –- Speichermedien suchen ––––––––––––––––––––––––––––––––––––––––––
#
beenden_ok="" # Beenden löschen
Das beenden_ok könnte ein Schalter sein, der ausdrückt, dass es ok ist die Funktion/das Programm zu beenden. Dein Kommentar verwirrt - "Beenden löschen" - was soll das sein, wie soll das gehen? Seit wann kann man Beenden löschen?
while [ ! $beenden_ok ] ; do # Schleife für das Menü
clear # Terminal Inhalt löschen
Clear ist schlecht, siehe http://www.catb.org/~esr/writings/taoup/html/
fpara="-maxdepth 1 -type d" # Parameter für find
find "$extern" $fpara > "$HOME/dumm.hf.txt" # Speichermedien in eine Datei schreiben
Man kann Kommentieren, um den Code verständlich zu machen oder den Code unverständlich machen, um die Kommentare vertikal ausrichten zu können. dumm.hf.txt - die Fragen ob dumm wie dumm oder als Abk. für Dummy und hf wie high-frequency oder was - die erste Frage die man überhaupt hat beantwortet der Kommentar nicht, stattdessen das missverständliche "Speichermedien in eine Datei schreiben". Da denke ich, wird der Inhalt in eine Datei geschrieben - aber wieso nur in eine, ist ja kein Tarball? Ah, die Pfade der Speichermedien werden in eine Datei geschrieben? Es gibt nur zwei Probleme beim Programmieren: Naming things, cache invalidation und off-by-one-errors. ☺ Im Detail habe ich nicht weiter geschaut. Halt - eins habe ich noch: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #
# --- Speichermedium ausschalten -----------------------------------------------------------------------------
#
if [ "$speichermedium" ] ; then # wenn ein Speichermedium existiert
echo # Leerzeile
echo "Der Puffer wird mit 'sync' gespeichert" # Text anzeigen
sync # Puffer speichern
echo "Das Medium wird mit 'unmount' ausgehangen" # Text anzeigen
usblongname=$(lsblk -l | grep "$speichermedium") # Device vom Speichermedium suchen
usbname="${usblongname:0:4}" # Device vom Speichermedium
udisksctl unmount -b "/dev/$usbname" # Speichermedium aushängen
echo "Das Medium wird mit 'power-off' ausgeschaltet" # Text anzeigen
udisksctl power-off -b "/dev/$usbname" # Speichermedium ausschalten
echo # Leerzeile
echo "Fertig, das Medium kann entfernt werden" # Text anzeigen
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
else # sonst
echo "Es wurde kein Medium in '$extern' gefunden!"
linie_erstellen "79" ; echo "$linie" # Linie erstellen und anzeigen
fi # Ende von if [ "$speichermedium" ]
#
|
Das schreibt man so: | speichermedium_ausschalten () {
if ...
...
fi
}
...
...
speichermedium_ausschalten
|
Der Funktionsname sollte die Dokumentation sein. Er erlaubt Modularisierung und vereinfacht die Fehlersuche.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 8628
Wohnort: Münster
|
Vielen Dank an Naubaddi für dieses Thema und die Veröffentlichung des Skripts! Die Idee, den Datenträger vor dem Entfernen auszuschalten, finde ich sehr wichtig. Ich habe sie prompt in mein eigenes Skript für diese Aufgabe eingebaut und dieses inzwischen in einem neuen Thread veröffentlicht: Skript safeject: Datenträger gefahrlos entfernen
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
Ohne mal auf das Skript einzugehen, aber so rein aus Interesse/Neugier&Langeweile: Naubaddi schrieb: Wenn der Rechner verreckt oder das System defekt ist ist mir wurscht, was mir wichtig ist sind meine persönlichen Daten (etwa 20.000 Dateien) von ca. 40 Jahren.
Dafür hat man eigentlich redundante Backups, die diesen Fall absichern (und mindestens eines off site!). Klar, man will nicht, dass das aushängen einer Partition einen Datenträger beschädigt, aber das sollte in der Praxis auch nicht vorkommen. Dafür sorgt eig. der Kernel. Sollte das bei dir dennoch des Öfteren passieren würde ich stark auf Bugs oder kaputte Hardware tippen. Naubaddi schrieb: In 40 Jahren habe ich die besten Erfahrungen mit Festplatten gemacht, nicht ein Bit wurde auf Festplatten verloren.
Da würde mich interessieren, wie du darauf kommst. Ohne regelmäßige Prüfung der Daten (scrubbing) und entsprechende Metainformationen (Checksummen) lässt sich so etwas im Prinzip gar nicht feststellen. Zumal Festplatten eine mittlere Haltbarkeit von 5 Jahren aufweisen, als Archivmedium ~30 Jahre. Siehe Langzeitarchvierung. Wichtig wäre auch die URE (Unrecoverable Read Error) von Festplatten. Meist wird die im Bereich von 10^-14 angegeben, d.h. nach ~12TB gelesenen Daten ist mit mindestens einem nicht korrigierbarem Lesefehler zu rechnen. Absichern kann man sich dagegen im Prinzip nur wenn man überhaupt feststellen kann, ob ein Lesefehler aufgetreten ist.
Nur für das Backup wird die Festplatte angeschlossen, so erhöht sich die Haltbarkeit.
Da würden mich die Daten dazu interessieren. Jedes Mal, wenn ein Rechner hochfährt, fahren auch alle angeschlossenen Festplatten hoch, aber das sollte die Haltbarkeit der Festplatte kaum/nicht beeinflussen, dafür sorgt die Firmware in Festplatten. Was anderes ist es, wenn man die Festplatte ständig nutzt (Daten liest und schreibt).
Die älteste Festplatte hat gerade mal 60GB und funktioniert immer noch, das hat kein anders Speichermedium geschafft.
Für Langzeitspeicher gäbe es auch noch Magnetbänder 😉 Dr_Schmoker schrieb: Wenn dein Funke etwa 1cm springt, sind das ungefähr 1000V.
Öhm, die Regel ist 1kV/mm. Bei 1cm Funkenstrecke, trockener Luft, und normalem Druck hast du also eher 10kV.
|
RamSpeicher
Anmeldungsdatum: 17. Juli 2009
Beiträge: 2508
|
Developer92 schrieb:
Für Langzeitspeicher gäbe es auch noch Magnetbänder 😉
Joa, Wer hat der kann oder so ähnlich.
|
Naubaddi
(Themenstarter)
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, Developer92 schrieb: ...Dafür hat man eigentlich redundante Backups, die diesen Fall absichern (und mindestens eines off site!). Klar, man will nicht, dass das aushängen einer Partition einen Datenträger beschädigt, aber das sollte in der Praxis auch nicht vorkommen. Dafür sorgt eig. der Kernel. Sollte das bei dir dennoch des Öfteren passieren würde ich stark auf Bugs oder kaputte Hardware tippen.
die Backups sind auf 3 Festplatten verteilt mit zeitlich abgegrenzten Backups, die Festplatten werden nur für ein Backup oder das zurückholen angeschlossen. Ansonsten sind sie im Keller gelagert und warten.
Die Probleme beim entfernen der Festplatten war eher meine Faulheit dafür den Dateimanager öffnen zu müssen, jetzt reicht es die Festplatte anzuschließen, ein Klick auf mein Backup-Skript, und wenn das Backup-Skript die Fertigmeldung ausgibt die Festplatte wieder entfernen.
...Da würde mich interessieren, wie du darauf kommst. Ohne regelmäßige Prüfung der Daten (scrubbing) und entsprechende Metainformationen (Checksummen) lässt sich so etwas im Prinzip gar nicht feststellen. Zumal Festplatten eine mittlere Haltbarkeit von 5 Jahren aufweisen, als Archivmedium ~30 Jahre. Siehe Langzeitarchvierung.
O.K., zumindest ist mir in den Jahrzehnten keine Datei aufgefallen die defekt ist. Vor kurzem hatte ich xsteem installiert und die Dateien vom ATARI durchsucht was so das Älteste ist was existiert (ca. 35 Jahre), alle Dateien sind noch i.O. und auch die alten ATARI Programme funktionieren noch. Grüßle, Naubaddi
|