Disk Allocation Viewer

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich hatte das Tool bereits schon mal angesprochen und würde es gerne noch einmal probieren.

Was macht der Disk Allocation Viewer? *guck* Er schaut in den File-System-Verwaltungsbereich und zeigt die Block-Belegung an. Also welche Blöcke zur Verwaltung gehören, welche unbelegt sind, welche fragmentiert sind usw.

Die Installation geht mit ipkg install davtools.

Nun habe ich von Trolli gehört, dass es bei ihm nicht läuft. Ich würde daher gerne die Installationsbasis verbreitern um dabei vielleicht herauszufinden, warum es mal läuft und mal nicht.

Ich habe dazu eine 3rd-Party-Apps geschrieben (guck Anhang). Dazu muss man allerdings ein C-Programm kompilieren. Ist also schon ein kleines Projekt, das man nicht mal einfach so installieren kann.

Voraussetzung ist also, dass die Installation per ipkg und die anschließende Ausführung (cdavl /dev/md0 oder cdavl /dev/sda1 oder cdavl /dev/hda1) im telnet-Fenster läuft.

Wenn ich genügend feed-back bekomme, dass es läuft, zeig ich die nächsten Schritte.
 

Anhänge

  • dav.jpg
    dav.jpg
    24,8 KB · Aufrufe: 234
Zuletzt bearbeitet:

Garfield

Benutzer
Mitglied seit
09. Jul 2008
Beiträge
195
Punkte für Reaktionen
2
Punkte
18
Ich biete mich mal als freiwilliger Tester an! Bekunde somit interesse :D!

Test-Station DS108j Firmware-version DSM 2.0-0702
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@Garfield,

und hast schon ipkg install davtools gemacht und getestet, ob es geht?

itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So, wenn die Installation und der Aufruf: cdavl /dev/md0 oder cdavl /dev/sda1 geht und keine Fehlermeldung erscheint, dann kann es weiter gehen ;)

cdavl /dev/md0 erzeugt bei mir eine furchtbar lange Ausgabe in Char-Grafics. Das ist nicht sehr schön. Und wenn das schon bei dem relativ kleinen File-System /dev/md0 so ist, dann kann man sich vorstellen, dass er beim /dev/md2 stundenlang was ausgibt. Das müssen wir kürzen.

Daher mal mit der kompakten Variante herumspielen: cdavl -T /dev/md0

Da müsste ungefähr sowas herauskommen:

Rich (BBCode):
Synology> cdavl -T /dev/md0
------ cdavl result start ------
fstype  ext3
mount   unmount
f-per   0.08%
blocks  622480
sblocks 9778
fblocks 66362
frags   59
sfrags  0
cfiles  10502
ffiles  40
depth   14
         0      S2,s2,I1,i511,o1,.17196,o1,.1,o1,.15052,S2,s2,I99,i413,.3580,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o
7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o404,x20,X1,x4,X1,x2,o977,.479,o3,.2045,o17
,.1,o13,.4,o5343,x1,o232,X1,x1,o1735,x13,o6,x1,X1,x42,o4,X1,o3954,x3,.3,X1,.9103,o1,.2047,x3,.4,X1,.2040,s2,I14,i498,.35
82,o7,.1,o7,.1,o2,.4078,o7,.1,o7,.1,o7,.1,o7,.1,o451,.1565,o2,.2046,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o2,.
1982,o7,.1,o7,.1,o1,.18415,S2,s2,I13,i2,I18,i479,o1,x14,o10,x4,X1,o1,X1,.5,X1,x3,.1491,x2,o4,X1,x13,.2028,o6,.2043,o2,.2
045,o9,.1,o5,.1,o1,.2031,o7,.2041,o3,.2045,o3,.44,o11,.82,o2,.16,o6,.16,o4,.55,o17,.1,o6,.1,o34,.1,o10,.1,o574,x20,X1,x1
9,X1,x35,o897,.16,o746,.1041,o96,.4,o18,.4,o42,x59,o24,x133,o162,x2,o10,x39,o6,x65,o8,X1,x3,o108,X1,x1,o74,x39,o140,x117
,o1121,X1,x7,X1,x5,X1,x1,o819,x20,X1,x31,X1,x2,o713,x8,o8212,x1,o2,X1,x3,o1,.2,o2,.2,x1,X1,o1,X1,o2,X1,o1,X1,o4,X1,o2,X1
,o1,X1,x1,X1,o3,x1,o1,X1,o2,X1,o5,x8,o4,X1,x2,o2,.1,X1,x1,X1,x1,X1,o12,X1,x2,X1,x2,X1,.1,o6,X1,x1,X1,x1,.6,o6,.2,o6,x2,o
2,X1,x1,o10,x2,o2,X1,x1,o2,x2,o2,X1,x1,X1,x3,o10,X1,x1,X1,x3,X1,x3,X1,x7,X1,x8,.7,o1,.7,o2,.6,X1,x7,X1,x15,o1,.7,o1,.7,X
1,x2,.5,o3,.7,X1,x3,.4,o3,.19,X1,x9,.22,X1,x4,.283,o2,.16,o4,.2026,s2,I1,i511,.1534,o1,.2047,o1,.2047,o1,.2047,o15,.6129
,o1,.1,o7,.18423,S2,s2,I8,i504,.7676,o180,x13,o7,X1,x4,o10884,.9391,o9,.4087,s2,I4,i508,.1534,o2,.4094,o3,.2045,o1,.1,o1
,.3,o1,.2,o4,.13,o2,.4,o3,.3,o3,.1,o1,.3,o1,.15,o7,.7,o2,.4,o21,.1945,o3,.4093,o7,.2,o17,.2,o21,.1,o8,.1,o19,.1,o13,.1,o
3,.6056,o1,.12279,S2,s2,I2,i510,o3,.1529,o4,.2044,o6,.2042,o3,.2045,o6,.2042,o4,.2044,o1,.2047,o7,.1,o2,.2038,o2,.2046,o
3,.2045,o6,.2042,o2,.2046,o3,.2045,o4,.2044,o7,.2041,o1,.2047,s2,I1,i511,.17918,o2,.14334,S2,s2,i1,I1,i510,o35,.5593,o2,
.26622,s2,I2,i510,o1,.7677,o317,.24259,s2,I1,i511,.7678,o1,.24575,s2,I3,i509,.7678,o549,.24027,s2,I1,i511,.7678,o1,.2457
5,s2,I1,i511,.15870,o1,.14335,o1,.2047,s2,I1,i511,.7678,o1,.24575,s2,I7,i505,.7678,o3,.24573,s2,I83,i429,o4,.1530,o1059,
.5085,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o2196,x13,o7,X1,x61,o3912,.19,o1,.3,o1,.87
,o1,.3,o2,.3,o1,.12,o7,.6,o1,.1,o4,.3,o1,.7,o1,.3,o260,.1,o943,.1,x1,o253,X1,x1,o3710,x1,o29,X1,o5,.628,o5,.2044,o2,.204
5,o314,.1734,o4,.2044,o2,.2046,o2,.2046,s2,I82,i430,o1,.1533,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o7,.1,o1462,.4618
,o7,.1,o52,.1,o11338,.1,o1,.13063
itari
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wenn das alles so geht, können wir das C-Programm in Angriff nehmen. Das soll möglichst schnell die Datenflut verdichten (daher auch in C geschrieben). Zum Kompilieren hab ich das ToolChain auf einem Linux-PC installiert.

Das C-Programm:

Rich (BBCode):
#include <stdio.h>
int main() {
int d,j,cc=0, i=0; char c,z;
for (j=0; j<11; j++) scanf("%c",&c);
while (scanf("%c%d,",&c,&d) != -1) {
  switch (c) {
  case 'S': case 's': z='s'; break;
  case 'I': case 'i': if (z!='s') z='i'; break;
  case 'X': case 'x': case 'y': if (z!='s' && z!='i') z='u'; break;
  case 'o': if (z!='s' && z!='i' && z!='u') z='b'; break;
  default : z='.';
  }
  while (i<d) if (i++ % 1024 ==0) {
    cc++;
    if (z=='.') printf("& #9609;");
    else printf("<%c>& #9609;</%c>",z,z);
    if (cc>100) { printf("<br/>"); cc=0; }
    }
  i=i % 1024;
  }
}

Anmerkung: Die Leerstellen hier & # bitte entfernen!

Leider kann ich das kompilierte Programm nicht als Anhang verschicken, weil wir ja unterschiedliche Prozessoren haben und das nicht auf jeder DS dann läuft.
 

.:@rpy:.

Benutzer
Mitglied seit
21. Okt 2007
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Würde mich ja gerne auch anbieten, und die Binaries für 2 verschiedene Plattformen Kompilieren..(sind es denn nicht nur 4 insgesamt?).
Leider ist mir der komplette Apache und noch so einiges abgeraucht, als ich versucht hab, Kernelmodule auf Debianbasis für die DS107 einzubinden...ich muss erstmal auf die nächste Updatesession warten.
Hab nur grad kein Bock auf ne Formatierung...Backup hab ich ja, meine Daten sind ja auch noch alle da, meine DS steht aber praktisch nur noch auf einem Bein.

Soll nicht heissen, das ich mich nicht beteiligen will...ich helfe beim Toolchain, wenns nich so recht will.
Mein Linux läuft noch...halbwegs...Bei den Prozessoren gibts nämlich n kleines Prob; die 406 is n PowerPCProcessor!
Wenn man sich nicht sicher ist, mit Telnet und

Code:
cat /proc/[I]cpuinfo[/I]
den genauen Prozessortyp ermitteln.

Bekunde also auch Interresse...mit Verzögerung, nach meinem "Rollback" meld ich mich wieder...macht mal weiter, ich hol denn später auf!
 
Zuletzt bearbeitet:

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Hi itari!

Wenn das alles so geht, können wir das C-Programm in Angriff nehmen. Das soll möglichst schnell die Datenflut verdichten (daher auch in C geschrieben). Zum Kompilieren hab ich das ToolChain auf einem Linux-PC installiert.

Das C-Programm:
...

Habe es mit dem gcc auf der Synology compiliert - gibt's irgendwelche spezielle Optionen zu setzen oder reicht ein simples gcc -o diskalloc diskalloc.c (ich hab's einfach mal diskalloc genannt... ;))?

Wie geht's weiter? Den Output von cdavl per pipe an diskalloc übergeben?

Gruß, dathen

edit:
Hmm, in eine html-Datei gepipet, ohne viel HTML-Schnickschnack, kommen da schon einmal ein paar nette schwarze Kästchen im Browser zum Vorschein, bin auf die PHP-Datei(en) gespannt... :D
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
so wieder da :D

Ich hab ganz vergessen zu sagen, wie ich das C-Programm genannt habe, nämlich packdav und wenn man es in die /usr/bin schiebt, dann kann man es auch ohne Pfad aufrufen. Aber man kann es natürlich benennen wie man möchte ;). Die 1024 im C-Programm besagt, wie viele Blöcke man verdichten will (also 1024), könne man auch ändern. Und die 100 besagt, wie viele kleine Block-Zeichen pro Zeile geliefert werden sollen, kann man natürlich auch ändern.

Jetzt brauchen wir noch eine .cgi-File für die Browserausgabe, am besten wie immer in der /usr/syno/synoman/phpsrc. Also z. B. /usr/syno/synoman/phpsrc/dav/dav.cgi:

Rich (BBCode):
#!/bin/ash
cat <<EOT
Content-type: text/html

<html><head><title>DAV</title>
<style>
i{color:blue;font-style:normal;}
s{color:red;text-decoration:none;}
u{color:#aa00aa;text-decoration:none;}
b{color:#22aa22;font-weight:normal}
pre{color:#dddddd;}</style>
</head><body>
<div style="position:relative;width:500px">
<pre><span style="color:black;font-size:11px">/dev/md0:
$(cdavl -T /dev/md0 | head -12 | tail -11)

<s>& #9609;</s> superblock+inodes <i>& #9609;</i> inodes <b>& #9609;</b> unfragmented Blocks <u>& #9609;</u> fragmented Blocks
</span>
$(cdavl -T /dev/md0 | tail -1 | packdav)
</pre></div></body></html>
EOT

Da wo die rote Stelle ist, muss natürlich die jeweils richtige File-System-Eintragung hin: also /dev/md0 oder /dev/sda1 oder /dev/hda1. An den grünen Stellen wieder das Leerzeichen entfernen. Und bitte dran denken, dass die Zeilenenden Linux-Style sein müssen, also im vi überprüfen, das das keine ^M mehr drin sind.

Dann brauchen wir wieder eine application.cfg-File im 3rd-party-Verzeichnis zum Aufrufen:

/usr/syno/synoman/webman/3rdparty/dav/application.cfg:

Rich (BBCode):
text = dav
description = dav
type = embedded
path = /phpsrc/dav/dav.cgi
 
Zuletzt bearbeitet:

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Wieso findet er die dav.cgi im Browser nicht?

https://cubestation:5001/phpsrc/3rdparty/dav/dav.cgi

=> Seite nicht gefunden...

ls -la /usr/syno/synoman/phpsrc/3rdparty/dav/dav.cgi
-rwxr-xr-x 1 root root 612 Aug 15 21:35 /usr/syno/synoman/phpsrc/3rdparty/dav/dav.cgi

Ergo: Das Miststück liegt dort und ist für jedermann ausführbar... :confused: Andere CGIs lassen sich doch auch aufrufen?!

Habe sichergestellt, dass die Datei im Unix-Style ist, also keine ^M, alle Leerzeichen wie gefordert weg (wäre aber auch egal, "Seite nicht gefunden" heißt ja: Seite nicht gefunden und nicht: "da steht Müll drin"). Und die pack (ich nehme an, so heißt das C-Programm) müßte er auch finden.

In der Shell aufgerufen funzt das CGI auch. Bin ratlos (oder blind?!).

Stell mich bitte mal wer vom Schlauch runter...

Danke und Gruß, dathen
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@dathen,

liegt an der Apache-Konfiguration, wo er die Teile sucht. Guck bitte noch mal genau die Pfade an:

/usr/syno/synoman/phpsrc/dav/dav.cgi
/usr/syno/synoman/webman/3rdparty/dav/application.cfg

Ansonsten danke noch für den Hinweis, dass die dav.cgi mit chmod +x ausführbar gemacht werden muss.

itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hinweis: ich habe in der ein oder anderen Datei grad noch kleine Anpassungen hinsichtlich der Namen gemacht, z.B. pack in packdav umbenannt. Bitte nochmal genau alles kontrollieren, falls es nicht auf anhieb geht.
 

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Hi itari,

mein Basisverzeichnis ist ja das gleiche, ich habe halt nur eine Verzeichnisebene (3rdparty) ins phpsrc Verzeichnis eingezogen, und darunter liegen die anderen CGIs doch auch funktionieren. Ich müßte doch dort beliebig viele Unterverzeichnisse einziehen können, ohne dass den Apache das stört...

Das 3rdparty Verzeichnis unter /usr/syno/synoman/phpsrc/ ist ein Sym-Link irgendwo nach /opt/syno/synoman/3rdparty/. /opt liegt wiederum auf /volume1/ (wie wahrscheinlich bei allen).

Aber nochmal zur Sicherheit, wie bei mir die DAV-Konfiguration aussieht:

/usr/syno/synoman/webman/3rdparty/dav/application.cfg
text = dav
description = dav
type = embedded
path = /phpsrc/3rdparty/dav/dav.cgi

/usr/syno/synoman/phpsrc/3rdparty/dav/dav.cgi
cat <<EOT
Content-type: text/html
<html><head><title>DAV</title>
<style>
i{color:blue;font-style:normal;}
s{color:red;text-decoration:none;}
u{color:#aa00aa;text-decoration:none;}
b{color:#22aa22;font-weight:normal}
pre{color:#dddddd;}</style>
</head><body>
<div style="position:relative;width:500px">
<pre><span style="color:black;font-size:11px">/dev/md0:
$(cdavl -T /dev/md0 | head -12 | tail -11)
<s>& #9609;</s> superblock+inodes <i>& #9609;</i> inodes <b>& #9609;</b> unfragmented Blocks <u>& #9609;</u> fragmented Blocks
</span>
$(cdavl -T /dev/md0 | tail -1 | /opt/bin/pack)
</pre></div></body></html>
EOT
Die Leerzeichen zwischen den "& #" natürlich rausgenommen...

Kann der Apache auf /opt/bin/pack zugreifen? Dort habe ich das C-Programm abgelegt (ist natrürlich auch für jedermann ausführbar).

Danke und Gruß, dathen
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Nach der 2. Zeile (Content-type: text/html) muss zwingend eine Leerzeile kommen. Hat was mit dem Header der HTTP-Pakete zu tun.

itari
 

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Die Leerzeile ist da, itari, sie wird hier nur nicht angezeigt...

Gruß, dathen
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
oh shi@@@@


lag an mir ... in die cgi-Datei muss als erste Zeile rein

Rich (BBCode):
#!/bin/ash

sorry:eek::eek::eek:
 

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Und es ward Licht! :D

Aber für Dich spiele ich gerne Beta-Tester, itari ;)

Das ganze ist allerdings nicht wirklich für große Partitionen geeignet. Bei meinem Volume1 hat dav ne ganze Weile gerödelt... Aber es würde ja reichen, wenn man das ganze einmal täglich / wöchentlich per cronjob laufen ließe und das Ergebis in irgendeiner Datei abspeichert. Das CGI könnte diese Datei dann mit einbinden und fertig ist die Laube. Nur so als Idee... ;)

Gruß, dathen
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Und es ward Licht! :D

Aber für Dich spiele ich gerne Beta-Tester, itari ;) Danke für deine Geduld

Das ganze ist allerdings nicht wirklich für große Partitionen geeignet. Bei meinem Volume1 hat dav ne ganze Weile gerödelt... Aber es würde ja reichen, wenn man das ganze einmal täglich / wöchentlich per cronjob laufen ließe und das Ergebis in irgendeiner Datei abspeichert. Das CGI könnte diese Datei dann mit einbinden und fertig ist die Laube. Nur so als Idee... ;)

Gruß, dathen

Ja, das Programm braucht ewig bei großen Datei-Systemen. Zu der Zeit als die davtools geschrieben wurden, war 80GB schon riesig. Aber für die Systempartition geht es ganz gut. Man kann die Kompressionsgröße noch höher schrauben, aber dann wird es nur noch eine optische Spielerei. Das C-Programm ist ja auch nicht statistisch ausgerichtet, da es ja schon bei einem von 1024 Blöcken anschlägt. Ich hab mal überlegt, ob man den Füllgrad durch Farbnuancen darstellen sollte, hab es dann aber verworfen.

Trotzdem ist es ein schönes Programm, nicht wahr? Und du hast es ja auch hinbekommen.
 

dathen

Benutzer
Mitglied seit
29. Mai 2007
Beiträge
65
Punkte für Reaktionen
0
Punkte
0
Trotzdem ist es ein schönes Programm, nicht wahr? Und du hast es ja auch hinbekommen.

Ohne Zweifel, itari! Vielen Dank auf jeden Fall für die Unterstützung bei der Fehlersuche! :)

Gruß, dathen
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat