Laufwerk ab- und wieder anmelden.

uhlhorn

uhlhorn

Aktives Mitglied
Thread Starter
Dabei seit
24.05.2005
Beiträge
2.474
Reaktionspunkte
129
Hallo, und ich wünsche erstmal ein frohes, besinnliches und vor allem friedliches Weihnachten.

Ich habe mit einigen externen Festplatten das Problem, dass sie ab und an als readonly gemounted werden. Insbesondere der DROBO macht da massiv Probleme.

Nun will ich mir ein Applescript schreiben, dass das Laufwerk ab- und wieder anmeldet. Abmelden geht per AppleScript einfach:
do shell script "hdiutil detach /Volumes/DROBO"
Doch das wiederanmelden geht nicht per Laufwerksnamen, sondern nur per Device-Name. Doch der ist nicht immer gleich:
do shell script "hdiutil attach /dev/disk1s2"

Ich hätte gerne eine Lösung für diesen nicht funktionierenden Befehl:
do shell script "hdiutil attach /Volumes/DROBO"

• Gibt es eine Möglichkeit das Laufwerk über seinen Namen zu aktivieren?

• Oder gibt es eine Möglichkeit den Device-Namen zu dem Laufwerksnamen im Script zu ermitteln?

• Oder kann ich das Laufwerk mit dem Befehl hdiutil von readonly auf writeble umschalten?

Für eine Hilfe wäre ich dankbar.
 
hdiutil ist nur für images...
du solltest diskutil verwenden...
 
diskutil eject /Volumes/DROBO/
Disk /Volumes/DROBO/ ejected


das geht, aber

diskutil mount /Volumes/DROBO/
Unable to find disk for /Volumes/DROBO/


geht leider auch nicht.
 
Code:
say "unmounting drobo"
do shell script "diskutil eject /Volumes/DROBO/"

say "waitingck some seconds"
delay 10

say "mounting drobo"
try
   do shell script "diskutil mount 6D53BC79-DADA-3A83-9706-86BEE201EB04"
end try
Ah, es geht über die UUID! Und die erfährt man im Terminal mit dem Befehl:
diskutil info /Volumes/DROBO/

Kann man per AppleScript abfragen, ob ein Volume schreibgeschützt ist? Dann könnte ich das Script bei der Anmeldung des Benutzers ausführen lassen und das Laufwerk nur bei Bedarf ab- und wieder anmelden.
 
dazu müsstest du halt die ausgabe von info parsen, da gibt es doch ein "Read Only: Yes"
 
dazu müsstest du halt die ausgabe von info parsen, da gibt es doch ein "Read Only: Yes"
Ich glaube, dass mich das im Moment etwas überfordert. Einen einfachen AppleScript-Befehl gibt es nicht?
 
ist nicht so schwierig, mit folgendem kriegst du bei readonly eine 1 zurück:
do shell script "diskutil info /Volumes/DROBO|grep -c Read.*Yes;exit 0"

dann kannst halt weitermachen mit:
set readonly to do shell script "diskutil info /Volumes/DROBO|grep -c Read.*Yes;exit 0"
if readonly = 1 then
tue irgendwas
end if
 
  • Gefällt mir
Reaktionen: uhlhorn
Code:
set readonly to do shell script "diskutil info /Volumes/DROBO|grep -c Read.*Yes;exit 0"
if readonly = 1 then
	say "unmounting drobo"
	do shell script "diskutil eject /Volumes/DROBO/"
	
	say "waiting some seconds"
	delay 10
	
	say "mounting drobo"
	try
		do shell script "diskutil mount 6D53BC79-DADA-3A83-9706-86BEE201EB04"
	end try
else
	say "Drobo is okay!"
end if

Danke sehr, so kann ich es wohl als Startscript verwenden.

Ich wünsche Dir lieber oneOeight, noch einen schönen Heiligen Abend und ein frohes Fest. Vielen vielen Dank noch mal!
 
@ oneOeight: Da ist doch noch ein Fehler drin! Die Bedingung durch den Rückgabewert ist immer gleich, egal ob schreibbar oder nicht. Bei dem obigen Script wird immer die else-Bedingung ausgeführt weil immer readonly = 0
Sagt exit 0 nicht, dass eine Null zurückgegeben wird, und zwar immer?
 
diskutil eject /Volumes/DROBO


diskutil mountdisk /dev/disk1;diskutil mountdisk /dev/disk2;diskutil mountdisk /dev/disk3;echo
 

Anhänge

  • Bild 2.png
    Bild 2.png
    27,6 KB · Aufrufe: 198
  • Bild 3.png
    Bild 3.png
    26,2 KB · Aufrufe: 205
Code:
if readonly = [COLOR="Red"]"1"[/COLOR] then

Weil readonly eine Textvariable ist. exit 0 sagt nur, daß alles geklappt hat, egal wie.
 
Zuletzt bearbeitet:
@ olivetti: Ah ja, das könnte das Problem sein. Ich werde das mal ändern. Danke schön!

@ smallfoot: Leider weiß ich nicht was Du mir mit den Screenshots sagen willst. Das sind doch Screenshots aus Automator, oder? Allerdings habe ich mein Script in AppleScript geschrieben, ohne Automator. Aber Deine Screenshots haben mich zumindest neugierig gemacht, danke.
 
smallfoot mountet blind die nächsten 3 disks, was auch eine CD sein könnte (Also nicht sehr elegant).
Wenn Du mehrere Laufwerke dran hast, kann sich die disk Nummer schon mal verändern.
Du bist mit der UUID-Lösung schon genau richtig. Die UUID bleibt natürlich fest.
 
das ";exit 0" hab ich mit rein gemacht, weil applescript sonst immer die rückgabe als fehlermeldung geliefert hat...
so wird das shell script immer als fehlerfrei beendet, die rückgabe ist aber dann schon 0 oder 1...

kannst ja mal ohne exit probieren und halt den string vergleich nicht vergessen...
 
exit 0 muss drin bleiben, weil AS alles was > 0 von der shell zurückkommt, als Fehler sieht.
Typische grep -c Falle.
 
Zuletzt bearbeitet:
Man kann doch auch mit AppleScript direkt Festplatten mounten, also ohne Shelldcript.
Ich bin jetzt nicht am Mac, aber ich meinte, das Kommando war auch einfach mount.
Ich hab ein Mountscript auf einem Beckupserver, der unter OS 9 läuft, da könnte ich nach dem Urlaub mal nachsehen.
 
exit 0 muss drin bleiben, weil AS alles was > 0 von der shell zurückkommt, als Fehler sieht.
Typische grep -c Falle.

dann muss halt "grep | wc -l" ran, bloss liefert das halt ein " 0" statt "0"...
 
Nene Scheffe, wc liefert dann ja immer 1 zurück. So ein kleines int2ascii fehlt halt noch.
Aber ich finde exit ja nicht unpassend. Man darf's nur nicht vergessen. Wenn die Shell erstmal 0 liefert, geht es ja ohne. Bedingung umdrehen und alles testen, ist immer noch am Besten. Aber wem sage ich das. :D

@maceis
Mir war auch so, als ob man unter OS9 per AS lokale Platten mounten konnte.
Aber unter OSX gibt's ja nur noch "mount volume". Theoretisch könnte man vielleicht mit
"afp://meine_lokale_kiste.local/Platte" mounten. Aber am Readonly-mount scheitert's dann doch. Braucht wohl keiner in AS.
 
Nene Scheffe, wc liefert dann ja immer 1 zurück. So ein kleines int2ascii fehlt halt noch.

wc -l zählt doch die zeilen, da kommt bei mir 0 oder 1

Code:
diskutil info /Volumes/Macintosh\ HD|grep Read.*No|wc -l
       1
diskutil info /Volumes/Macintosh\ HD|grep Read.*Yes|wc -l
       0
 
Listig, listig, einfach das -c wegzulassen. :D
Hast schon recht, aber dann kommt eben besagter " x"-String zurück.
Da finde ich Deine exit Lösung einfacher.

Uhlhorn wird's eh schon geschafft haben.
 
Zuletzt bearbeitet:
Zurück
Oben Unten