Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Festplatte aktiv halten
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

Festplatte aktiv halten

beantworten | zitieren | melden

Hallo an alle,

Hintergrund ist folgender: Ich habe mir einen Homeserver gebaut, der einen Festplattenverbund mit 8 TB im RAID5 an einem eSATA-Port hat. Das RAID-Case schaltet sich allerdings bei Inaktivität ab. Das heißt, wenn ich mal Daten vom Homeserver brauche, oder anfange Musik zu hören, wie auch immer, stürzen meine Programme ab, weil sie die Daten nicht bekommen. Das RAID-Case braucht dann geschätzt 5 Sekunden zum Hochfahren (bin mir nicht sicher, ob es an dem Parken des Lese-/Schreibkopfes von Western Digital liegen könnte (8 Sekunden), Platten von WD sind auch mit drin).

Nun schwebt mir vor, eine Anwendung zu schreiben, die die Festplatten aktiv hält, in der Art, dass sie zufällig irgendwo auf der Platte 1 Byte große Dateien platziert, und wieder entfernt, so dass die Festplatten eben immer aktiv sind und das Raid-Case nicht in den Idle-Modus geht. Ich bitte um eure Einschätzung dazu. Ist das machbar? Oder muss ich mir ein anderes Konzept zurechtlegen?
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

beantworten | zitieren | melden

Vielleicht einfach mal gucken ob man bei dem Gerät einstellen kann ob die Platten bei Inaktivität ausgeschaltet werden sollen oder nicht.

Wenn das nicht so geht kannst du das machen. Vielleicht alle 2 Minuten ein Byte in einer dummy Datei ändern.

LG pdelvo
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Also am Gerät kann man nichts einstellen, nur die Art der Zusammenschaltung der Festplatten (RAID0, RAID1, RAID5 usw.)...
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.099

beantworten | zitieren | melden

Zitat von mkoehler
Das heißt, wenn ich mal Daten vom Homeserver brauche, oder anfange Musik zu hören, wie auch immer, stürzen meine Programme ab, weil sie die Daten nicht bekommen. Das RAID-Case braucht dann geschätzt 5 Sekunden zum Hochfahren
Ich würde eher annehmen dass das Programm dann 5 Sekunden "steht" bis die Daten ankommen. Stürzt das wirklich gleich ab?
Wenn man im Explorer ein nicht vorhandenes Netzlaufwerk anfragt weil kein Netz da ist oder so, braucht der 30 Sekunden bis er merkt dass was nicht stimmt.
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Also mein Winamp ist gestern abgestürzt. Aber stimmt, der Explorer brauch noch länger. Darum wäre eine Lösung, die einfach die Festplatten am Laufen hält, (und eine Softwareseitige Lösung sein muss) wohl das beste...
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.099

beantworten | zitieren | melden

Ich würd erst mal rausfinden obs wirklich immer Abstürze gibt. Eigentlich kriegt ein Programm ja nicht mit ob ne Platte grad aus ist, das sollte doch warten bis es die Daten kriegt. Zumindest kann ich mir einen Timeout von ein paar wenigen Sekunden nicht vorstellen.

Und wenns wirklich nötig ist, ist so ein Programm auch schnell geschrieben.
Es muss ja nicht mal zufällig sein. Schreib alle paar Minuten ein paar Bytes in eine Datei. Das kann ja die selbe sein, da muss nicht zufällig irgendwas passieren.
Wobei hast du da ein Problem?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.482

beantworten | zitieren | melden

Also ein Programm weiß beim Zugriff nicht, ob eine Platte aktiv ist oder nicht - das macht alles Windows vollautomatisch.

Der Windows Media Player stürzt nicht ab; jedenfalls nicht bei meinem Homeserver-System. Es braucht zwar auch ma gern 10 sekunden wenn grad Idle angesagt ist. Aber der Fehler ist eher Winamp als die Tatsache, dass sich gewisse Dinge einfach nach einer Zeit zum Ressourcensparen ausschalten.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo mkoehler,

dass man bei einem Homeserver nicht konfigurieren können soll, ob bzw. wann sich die Platten abschalten, wundert mich. Auf der anderen Seite ist es natürlich wirklich keine große Sache, ein Programm zu schreiben, das durch regelmäßig Zugriffe ein Abschalten verhindert. Ich würde aber nichts schreiben, sondern einfach nur von immer neuen Stellen der Festplatte Dateien oder Sektoren lesen.

herbivore
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Also ich hab gestern folgendes versucht, scheint nicht so ganz zu funktioniere irgendwie...

private void Form1_Load(object sender, EventArgs e)
        {
            notifyIcon1.Text = "HDD No Idle";
            System.Timers.Timer myTimer = new System.Timers.Timer(120000);
            while (true)
            {
                myTimer.Elapsed += new System.Timers.ElapsedEventHandler(DisplayTimeEvent);
                myTimer.Interval = 120000; // 1000 ms is one second
                myTimer.Start();

            }
        }

        public static void DisplayTimeEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            var path = @"F:\hdd_no_idle";
            System.IO.File.WriteAllText(path, ".");
            System.IO.File.Delete(path);
        }
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.099

beantworten | zitieren | melden

Du machst da eine Schleife die in maximaler Geschwindigkeit immer wieder Eventhandler zuweist und den Timer startet?!
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Sorry, war ein Leichtsinnsfehler. Hab das nochmal etwas überarbeitet. Müsste doch jetzt besser funktionieren, oder?

private void Form1_Load(object sender, EventArgs e)
        {
            notifyIcon1.Text = "HDD No Idle";
            System.Timers.Timer myTimer = new System.Timers.Timer(120000);
            DateTime startTime = new DateTime();
            startTime = DateTime.Now;
            TimeSpan elapsed = new TimeSpan();
            myTimer.Interval = 120000; // 1000 ms is one second
            int secs = Convert.ToInt16(myTimer.Interval / 1000);
            int mins = (secs ≥ 60) ? (secs / 60) : 0;
            while (true)
            {
                myTimer.Elapsed += new System.Timers.ElapsedEventHandler(DisplayTimeEvent);
                myTimer.Start();
                string[] nitp = notifyIcon1.Text.Split(new string[] {" - "}, 2, StringSplitOptions.None);
                elapsed = (DateTime.Now - startTime);
                notifyIcon1.Text = nitp[0] + " - " + (myTimer.Interval/1000 - elapsed.Seconds) + "s";
                System.Threading.Thread.Sleep(1000);
            }
        }

        public static void DisplayTimeEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            var path = @"F:\hdd_no_idle";
            if (System.IO.File.Exists(path) == false) System.IO.File.CreateText(path);
            System.IO.File.ReadAllText(path);
            //System.IO.File.Delete(path);
        }
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 114
Herkunft: Radeberg

beantworten | zitieren | melden

Bitte den Beitrag von chilic richtig lesen!!! Und dann das lesen:
Das Timer-Steuerelement
-Wer lesen kann, ist klar im Vorteil
-Meistens sitzt der Fehler vorm Monitor
-"Geht nicht" ist keine Fehlermeldung !

GidF
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Okay, noch eine komplette Überarbeitung. Kommt das dem Sinn des Programmes jetzt näher?

namespace hdd_no_idle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string path = @"F:\hdd_no_idle";

        private void Form1_Load(object sender, EventArgs e)
        {
                notifyIcon1.Text = "HDD No Idle";
                timer1.Enabled = true;
                timer1.Interval = 10000;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (System.IO.File.Exists(path) == false) System.IO.File.CreateText(path);
                System.IO.File.ReadAllText(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
            }
        }
    }
}
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.482

beantworten | zitieren | melden

Windows merkt sich gewisse Ordnerstrukturen im Cache.
Es bringt also nichts, wenn Du nicht auf ein File aktiv zugreifst.
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Genau das habe ich nämlich auch schon festgestellt. Nur wusste ich nicht, wie ich dagegen vorgehen sollte. Also meinst du, ich müsste wirklich ein Zeichen oder so in die Datei schreiben, das würde dann helfen?
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.099

beantworten | zitieren | melden

== false ist mal wirklich übel!
Schreib doch !System.IO.File.Exists(path)

Moderationshinweis von herbivore (10.09.2012 - 07:55)

... siehe [Tipp] Anfängerfehler == true / == false

private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Okay, werde ich bei der nächsten Überarbeitung berücksichtigen. Momentan stehe ich glaube ich noch vor dem Problem, dass alle 10 Sekunden (also pro Intervall) die Speichernutzung um 8 KB zunimmt. Logischerweise gäbe es dann irgendwann einen Overflow. Wie löse ich das am Besten? So gut kenne ich mich nun noch nicht aus in C#...
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.482

beantworten | zitieren | melden

Zitat von mkoehler
dass alle 10 Sekunden (also pro Intervall) die Speichernutzung um 8 KB zunimmt. Logischerweise gäbe es dann irgendwann einen Overflow.

Du solltest Dich vielleicht erst mal informieren, wie zB .NET funktioniert. Java ist hier übrigens sehr ähnlich.
Der sogenannte Garbage Collector räumt nicht mehr verwendete Variablen etc erst dann weg, wenn es auch wirklich sein muss. Speicher frei räumen kostet schließlich auch Ressourcen.
Nur weil der dermaßen ungenaue Task-Manager meint, dass Du mehr Speicher belegst, heißt das noch lange nicht, dass in einen Überlauf rennen wirst.

Dein Problem hier ist die CreateText-Methode, die Du verwendest. Diese öffnet einen Stream, den Du nirgend schließt.
Hättest Du [Hinweis] Wie poste ich richtig? Punkt 1.1 befolgt und die MSDN benutzt, dann hättest Du das selbst gesehen.

Solangsam rutschen wir hier aber sehr in die Grundlagen-Geschichte....

Zitat von chilic
== false ist mal wirklich übel!
Ist übrigens auf [Tipp] Anfängerfehler == true / == false bezogen;
meiner Ansicht nach aber ein völlig überbewerteter Hinweis, da a) eine solche Schreibweise der gewöhnlichen menschlichen Sprache näher kommt (jaja bla bla mathematische Logik...) und b) der Kompiler sowieso optimiert.
Aber das muss hier nicht behandelt werden.. und soll auch nicht!!
private Nachricht | Beiträge des Benutzers
DeZio
myCSharp.de - Member

Avatar #avatar-3334.png


Dabei seit:
Beiträge: 76

beantworten | zitieren | melden

Hallo,

ich platze ja ungern in die Programmier-Künste, um eine Festplatte am laufen zu halten, aber du solltest unter den Energieoptionen (erweitert) folgendes Fenster mit diesem Eintrag finden:
Attachments
private Nachricht | Beiträge des Benutzers
mkoehler
myCSharp.de - Member



Dabei seit:
Beiträge: 9
Herkunft: Rheinland-Pfalz

Themenstarter:

beantworten | zitieren | melden

Hab ich gemacht, werde ich morgen Abend etwas testen. Danke schonmal.
MfG Markus Köhler
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (10.09.2012 - 07:59)

Über weite Strecken fällt der Thread unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1. Bitte eigne dir die Grundlagen an und schau vor der Benutzung unbekannter Klassen in die MSDN Doku. Außerdem wurde alles wesentliche schon gesagt. Den Rest solltest du alleine hinbekommen. Lies im Zweifel den Thread nochmal komplett durch.