Mailinglist Archive: opensuse-de (1512 mails)

< Previous Next >
Re: Festplatte abschalten
Am Donnerstag, 26. Juli 2007 schrieb David Haller:
Hallo,

Am Mit, 25 Jul 2007, gooly@xxxxxx schrieb:
[..]

Es gibt aber auch ein Debugging (siehe laptop_mode):
anschalten:
Konsole oder bash:
echo 1 > /proc/sys/vm/block_dump
Perl:
system('echo 1 > /proc/sys/vm/block_dump');# switch on rw log

Besser:

sysctl -w vm.block_dump=1

Bzw. gleich in der /etc/sysctl.conf eintragen.
Hmm, das 'logging' soll vom programm an und abgeschaltet werden ,
da macht ein conf-Eintrag nicht wirklich Sinn.

Mit perl besser:

====
open(PROC, ">/proc/sys/vm/block_dump") or die "$!\n";
print PROC 1;
close(PROC) or die "$!\n";
====

system sollte man eher vermeiden
warum?
und wenn doch sollte man den
Rückgabewert auswerten!

auslesen:
Konsole Bash:
dmesg |grep READ >/tmp/hd.log 2>&1
dmesg |grep WRITE >/tmp/hd.log 2>&1

Damit überschreibt letzteres aber ersteres.
Ich weiß, ich benutze es ja auch nicht genau hintereinander..

Perl:
system ( "dmesg |grep READ >$f 2>&1");

*urgsl*
warum?

====
open(DMESG, "dmesg |") or die "$!\n";
print grep( /READ|WRITE/, <DMESG>);
close(DMESG) or die "$!\n";
====
und warum ist das besser?
Ich brauch nur eine Zeile, Du 3;
Perl gibt Speicher nicht wirklich wieder her,
ich hab daher alles 'externalisiert' und der Speicher ist dann wieder
frei..
Dies File kann sehr groß werden und das Programm soll quasi ewig
laufen..


und hier mein kl. script um den Ausdruck zu konzentrieren
#!/usr/bin/perl
use strict;
use warnings;
# Einlesen in einen Perl Hash und ausdrucken,
# Mehrfach Nennungen fallen so weg :)
my %show;
my $f = '/tmp/hd.log';
system ( "dmesg |grep READ > $f 2>&1");
if ( -s $f > 10 ) {

Wieso 10 Byte?


open F, "< $f" or warn "Can't open READ_File:$f< :$!\n";

Du liest aber trotzdem? *waaah*
Naja, lesen geht doch nicht und Perl erzeugt eine Fehlermeldung, aber
dies Programm und seine Kinder laufen weiter, nur das
hd-Aufwachdebugging funktioniert halt nicht. Klar, nicht schön, aber
möglich und funktioniert.


foreach (<F>) { $show{READ}{"$1_$3"} = "$2 $3\t$1\n" if
(/^(.+?): (.+?)(hda[23])[\n\r]*/) }
close(F);
}
system ( "dmesg |grep WRITE > $f 2>&1");
if ( -s $f > 10 ) {
open F, "< $f" or warn "Can't open WRITE_File:$f< :$!\n";
foreach (<F>) { $show{WRITE}{"$1_$3"} = "$2 $3\t$1\n" if
(/(.+?):(. +?)(hda[23])[\n\r]*/) }
close(F);
}
my $prt;
exit 0 unless (exists $show{READ} || exists $show{WRITE} );
foreach (sort keys %{$show{READ}}) { $prt .= 'hd:
'.$show{READ}{$_} } foreach (sort keys %{$show{WRITE}}) { $prt .=
'hd: '.$show{WRITE}{$_} } if ($prt) {
open F, "> $f" or warn "Can't open hd-log:$f:$!\n";
print F $prt;
close(F);
}
exit 0;

*urgsl* Ich block da nicht durch, v.a. was du da eigentlich machen
willst, daher nur "in grob".
Ich will ja nur wissen welche Programme durch READ oder WRITE die hd
aufgeweckt haben ergo brauch ich sie nur einmal und nicht jedesmal mit
jedem Knötchen den sie gelesen oder geschrieben haben: Perls Hash.

====
open(DMESG, "dmesg |") or die "$!\n";
while(<DMESG>) {
next unless /READ|WRITE/;
if (/(.+?):(.+?)(hda[23])[\n\r]*/) {
print "hd: $2 $3\t$1\n";
}
}
close(DMESG) or die "$!\n";
====
Puuhh, so bekam ich 100.000 Einträge vom pdflush und kjournald..
ein hadparm -S1 /dev/hda schickt die platte noch nicht mal in den
schlaf

naja, da muss wohl ein Blank dazwischen, ich vermute -S1 ist keine
Option, -S 1 dann schon.

Nö.

====
# hdparm -S1 /dev/hdc

/dev/hdc:
setting standby to 1 (5 seconds)
====

dann erhalte ich die folgende Fehlermeldung:
./test.pl: line 1: my: command not found
./test.pl: line 2: syntax error near unexpected token `$state'
./test.pl: line 2: ` if (hd_is($state)) { print "$state\n"} else
{print "NOT $state\n"}'

Ist etwa perl nicht installiert ?

Perl Programm haben eine ziemlich wichtige erste Zeile:
#!/usr/bin/perl

Nö. Die ist nur zu automatisch ausführen nötig. Ein

perl ./test.pl

wird immer gehen.
ackn
Wenn die Zeile fehlt, dann wird das Script durch die shell ausgeführt
und das gibt dann obige Fehler.
So hatte er es angewendet..
calli

--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >
Follow Ups