molluska
Goto Top

Größe der Home Directories ermitteln

Hi,
zunächst möchte ich kurz anmerken, dass ich nicht genau wusste, in welchen Bereich mein Problem passt.
Betriebssystem: Red Hat
stat -f xxx
File: "xxx"
ID: 3e70070c7d4 Namelen: 255 Type: UNKNOWN (0xa501fcf5)
Blocks: Total: 157286400 Free: 37133190 Available: 34839097 Size: 1024
Inodes: Total: 10715956 Free: 9283294

Nun zu meinem Problem:

Ich soll die Größen der Home Directories ermitteln.
Sollte ja eigentlich kein Problem sein 'du -sh'.
Jedoch wurde mir vorgegeben, dass ich den kdirstat-cache-writer verwenden soll.
Soweit so gut.
Das Script soll in Python realisiert werden.

Der relevante Teil des Scriptes sieht so aus:
def callkDirStat(path, logger):
  if os.path.islink(path):
    kDirPath=''+ path + '/'  
  else:
    kDirPath=''+ path + ''  
  abPath=sys.path
  kDirFileLines=commands.getoutput('/usr/bin/perl \  
                                  '+ abPath +'/kdirstat-cache-writer.pl \  
                                  '+ kDirPath +'').split('\n')  
  size=float(0)
  for line in range(8,len(kDirFileLines)-1):
    buffer = kDirFileLines[line].strip();
    buffer = buffer.split()
    if(len(buffer)>2):
      try:
        size+=float(buffer[2])
      except ValueError:
        if kDirFileLines[line].find('Permission denied')!=-1 :  
          logger.warn(kDirFileLines[line])
  size=size/1024
  return size

Script läuft, ich kriege ein Ergebnis:
146319.87793 kB
146319/1024 = 142 MB

Nun liefert mir 'du -sh':
80M

'du -sb' liefert mir:
149837413 Byte
149837413/1024=146325 kB
146325 /1024 = 142 MB

Sieht dem oberen Wert doch recht ähnlich?

Nun habe ich gesehen das 'du -b' die Block-size in 1 Byte ändert.

Bei du -s -B 1 /xxx/mollus/ erhalte ich:
83837952 Byte
83837952 /1024=81873 kB
81873 /1024=79 MB

Hm super... also das gleiche, wie bei 'du -sh'

Das Ergebnis von du -sh soll das "richtige" Ergebnis sein. Ich soll du -sh jedoch nicht verwenden.

Das lustige ist, dass das Script auf einem anderem Mount korrekt funktioniert; also korrekte Ergebnisse liefert.
Auf "meinem" Mount nur eben nicht.
Nun dachte ich, es könnte an verschiedenen Block-sizes liegen.

"Meine" Block-size sollte 4096 sein. Also dachte ich, ich kann einfach rechnen:
*4096
/1024
(für die Byte)
/1024
(für die kB)
/1024
(für die MB)
Ergebnis: 571 MB also komplett falsch.

Nun weiß ich vor lauter Zahlen einfach nicht mehr weiter face-sad

Wäre nett, wenn mir jemand helfen könnte.

Danke und viele Grüße
molluska

Content-Key: 155252

Url: https://administrator.de/contentid/155252

Printed on: April 25, 2024 at 18:04 o'clock

Member: micneu
micneu Nov 18, 2010 at 10:00:12 (UTC)
Goto Top
was sagt der auftraggeber?
hast du ihm das so präsentiert?
in python kann ich leider garnichts, perl da könnte icbh denke ich helfen face-smile

gruß michael
Member: molluska
molluska Nov 18, 2010 at 10:17:14 (UTC)
Goto Top
Der Auftraggeber sagt, dass das gehen muss.
'du -sh' wäre zu langsam, außerdem braucht er die Cache-Files.
Ich hab Perfomance-Tests gemacht, die sogar ergeben haben, dass 'du -sh' um einiges schneller ist.
Dies habe ich dem Auftraggeber präsentiert, jedoch will dieser eben die cache-files vom kdirstat-cache-writer.
Leider war Python Vorgabe.
Mein Problem kann ich erst nächste Woche im Meeting präsentieren. Habe gehofft bis dahin eine Lösung zu finden.

Gruß Katharina
Member: micneu
micneu Nov 19, 2010 at 08:51:21 (UTC)
Goto Top
da kann ich dir nicht weiter helfen, schon mal in python foren gefragt?

gruß michael
Member: molluska
molluska Nov 19, 2010 at 09:00:20 (UTC)
Goto Top
Noch nicht.
Aber das Problem sollte nicht im Python Code liegen, sondern eher im Perl (kdirstat-cache-writer.pl) bzw. am lstat().

Grüße
Katharina