Bootvorgang „verlangsamen“, bis alle Geräte verfügbar sind

Ich verwende OS X als Server und führe Server.app 4.0 aus, um E-Mail-Hosting usw. bereitzustellen.

An diesen Computer ist ein PROMISE Pegasus R2 RAID-Laufwerk angeschlossen, das unter installiert ist /Volumes/RAID6-11TB, und ich habe den Standardspeicherort für den Dienst so geändert, dass sich die Server.app-Daten auf dem RAID-Laufwerk befinden (aus Redundanzgründen und damit Backblaze meine wertvollen E-Mails sichern kann). , die normalerweise ) ignoriert /Library).

Das Problem besteht darin, dass beim Neustart des Computers Server.app nicht ordnungsgemäß gestartet wird, da während des Startvorgangs ein leeres Verzeichnis erstellt /Volumes/RAID6-11TB/Library/Server/Web/Data/Sites/Default/NetBoot wird . Wenn das RAID-Array später automatisch gemountet wird, ist sein Standard-Mountpoint bereits vorhanden, sodass er stattdessen unter gemountet wird /Volumes/RAID6-11TV 1, was überhaupt nichts bringt.

Gibt es eine Möglichkeit, den Neustart so zu beheben, dass entweder:

  1. Server.appwird nicht gestartet, bis die RAID-Festplatte bereit ist, oder
  2. Verzögern Sie den Start des Betriebssystems, damit der Start nicht abgeschlossen wird, bis die RAID-Festplatte bereit ist?

In Bezug auf (1) habe ich bearbeitet, um einen QueueDirectories-/Library/LaunchDaemons/com.apple.serverd.plist Schlüssel hinzuzufügen , aber das scheint keine Wirkung zu haben, und WatchPaths klingt, als hätte es die falsche Semantik, also bin ich misstrauisch, das überhaupt zu versuchen.

In Bezug auf (2), wenn ich im Einzelbenutzermodus boote ( Command+Swährend des Bootvorgangs gedrückt halte), dann warte , bis alle Meldungen abgeschlossen sind, und dann drücke, Ctrl+Dum den Bootvorgang fortzusetzen, /Volumes/RAID6-11TBwird wie beabsichtigt ordnungsgemäß gemountet.

Dies hilft jedoch nicht bei automatisierten Neustarts, wenn ich unterwegs bin (zB nach Stromausfällen). (OK, die "richtige" Antwort ist Batteriesicherung, damit die Maschine nicht neu startet, aber lassen Sie uns das vorerst ignorieren ...)

Gibt es eine Möglichkeit, dies zum Laufen zu bringen?

verwendest du nfs oder http für netboot?
@klanomath Ich verwende Netbook überhaupt nicht und AFAICT Ich habe Netbook in deaktiviert Server.app, daher bin ich mir nicht sicher, warum es überhaupt versucht, dieses Verzeichnis zu erstellen ...

Antworten (3)

Es ist Server.app, das diesen mysteriösen Ordner erstellt, der Ihre Werke verklebt.

Verhindern Sie, dass die Server.app gestartet wird, wenn der Server hochfährt, und dann können Sie einen Cronjob erstellen , der sie über ein .sh-Skript startet .

Skript sollte nur so etwas wie sein

#!/bin/bash
/Applications/Server.app

und wie die Person in dem einen Link sagte, wäre der Cronjob-Eintrag so etwas wie

@reboot sleep 60 && my_script.sh

Das sollte Ihrem RAID genug Zeit geben, um richtig zu mounten, bevor Server.app erscheint und diesen Ordner erstellt.

Ich habe den Unterschied mit @zomgdavidbowie aufgeteilt: Ich habe ein neues Skript erstellt /usr/local/bin/start-server-app:

#!/bin/sh

sleep 120

exec /Library/PrivilegedHelperTools/com.apple.serverd

Ich habe dann /Library/LaunchDaemons/com.apple.serverd.plistalle Instanzen von bearbeitet und /Library/PrivilegedHelperTools/com.apple.serverddurch ersetzt /usr/local/bin/start-server-app:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.apple.serverd</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.serverd</key>
        <true/>
    </dict>
    <key>OnDemand</key>
    <false/>
    <key>Program</key>
    <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    </array>
</dict>
</plist>

Dadurch kann ich beim standardmäßigen Startmechanismus bleiben, ohne in cron (8) einzutauchen, während ich den com.apple.serverdAufruf immer noch verzögere, bis das externe Laufwerk gemountet wurde.

Wie wäre es damit, anstatt nur zu warten, Folgendes zu tun:

#!/bin/sh

if [[ ! -e /Volumes/<volname ]]; then
sleep 60
else
exec /Library/PrivilegedHelperTools/com.apple.serverd
fi
exit 0

Dies sollte prüfen, ob Ihr Volume vorhanden ist, wenn nein, warten Sie 60 Sekunden, wenn ja, starten Sie die Server-App.

Gute Idee, obwohl meiner Erfahrung nach die Lautstärke beim Start nie sofort verfügbar ist, also sleepwürde die sowieso getroffen werden ...
@jonp weißt du, ob das /Library/LaunchDaemons/com.apple.serverd.plistüberschrieben wird, wenn Sever.app aktualisiert wird?
Ja, es wird überschrieben, wenn Server.appes aktualisiert wird. Bewahren Sie eine Sicherungskopie auf, damit Sie sie problemlos ersetzen können, wenn Server.app aktualisiert wird.