Script für TimeBackup: Speicher Delta zur Vorversion

Status
Für weitere Antworten geschlossen.

bfpears

Benutzer
Mitglied seit
09. Feb 2009
Beiträge
449
Punkte für Reaktionen
29
Punkte
28
Hi zusammen,
ich habe versucht ein Script zu schreiben das den "echten" Speicherbedarf einer "Version" in Bezug auf die Vorgänger Version berechnet:

Rich (BBCode):
#!/bin/sh
echo "Beispiel Aufruf: ./inode 20150729-1900 20150728-1900"
echo "Diese Datei sollte im 'Task1' Ordner liegen"
echo " in dem die einzelnen Versionen liegen"
echo "--"
echo "$(date)"
echo "Neue Dateien in  $1  im Vergleich zu " $2
if [ $# -ne 2 ]; then
  echo "Fehler: es werden genau 2 Parameter benötigt"
  exit 1
fi 

size=0
for file in $(ls -iR ./$1/ |awk '{print $1}' |grep -v [[:alpha:]])
  do 
#    echo "Inode Nummer: $file"

 ssi=$(find ./$2 -inum $file | while read i; do du -c "$i" | tail -1 | awk '{print $1}'; done | tail -1)

#    echo "Größe gleicher Datei "$ssi
    size=$((size+ssi))
done

echo "$(date)"
echo "Neue Dateien in  $1  im Vergleich zu " $2
echo "Summe gleiche Dateien:" $size
ssi=$(du -c ./$1/ | tail -1 | awk '{print $1}')
echo "Summe des gesamten Verzeichnisses: " $ssi
echo "Anzahl Dateien:" $(find ./$1 -type f | wc -l)
echo "Anzahl Verzeichnisse:" $(find ./$1 -type d | wc -l)
size=$((ssi-size))
echo "Summe neue oder geänderte Dateien:" $size "in KB"

Ausgabe schrieb:
DS110> ./inode.sh 20150729-1900/ 20150728-1900/
Beispiel Aufruf: ./inode 20150729-1900 20150728-1900
Diese Datei sollte im 'Task1' Ordner liegen
in dem die einzelnen Versionen liegen
--
Thr Jul 30 08:29:39 CEST 2015
Neue Dateien in 20150729-1900/ im Vergleich zu 20150728-1900/
find: invalid number './20150729-1900//:'
Thr Jul 30 08:31:01 CEST 2015
Neue Dateien in 20150729-1900/ im Vergleich zu 20150728-1900/
Summe gleiche Dateien: 6580
Summe des gesamten Verzeichnisses: 7472
Anzahl Dateien: 747
Anzahl Verzeichnisse: 39
Summe neue oder geänderte Dateien: 892 in KB
DS110>

Benutzung:
momentan ist vorgesehen das das Script aus dem Verzeichnis "task1" (in dem die "Versions" Ordner mit dem Datum und Uhrzeit liegen) gestartet wird.
(bei mir /volumeUSB1/usbshare/TimeBackup/DS110_00eigeneZahlen/task_1)
"./inode.sh Verzeichnis Vorgänger_Verzeichnis"

Sinn:
hier haben sich Leute gewundert wieso beim Löschen kein / kaum Speicher frei wird
(Die Gui löscht die Versionen erst von der HDD wenn der TB-recycler gelaufen ist (guckt mal in die cron wann der läuft),da gibt es wohl einen eigenen Thread zu)
frei werden sollte nur die Angabe von: Summe neue oder geänderte Dateien
(Nachtrag: das ist natürlich Unsinn: weil wenn wieder ein HardLink des neueren Backup/Version auf die Datei zeigt wird der Platz nicht frei)
also maximal frei werden kann


Vorgehen:
Ich habe die "inodes" jeder Datei indem Vorgänger_Verzeichnis gesucht, Gleiche addiert und von der gesamten Verzeichnis Größe abgezogen.

Sonstiges:
In meinem TimeBackup ist momentan wohl nur mein File-Basiertes "PMWiki" drin (deshalb nur 6MB)
Ich mache auf meinem Linux mit Back In Time mein Backup (das basiert auch auf Hardlinks) und so kann ich das auch lokal benutzen.
(lokal läuft das Script bei ca 11.000 Dateien fast 4 min)

Linux erlaubt keine Hardlinks auf Ordner, deswegen sollte der Platzbedarf für die Ordner jedesmal dazu kommen (auch wenn sonst nicht geändert wurde)

Fehler: (siehe Ausgabe)
Beim Ermitteln der Inode-Nummern, ist ein das Start Verzeichniss in die Liste gerutscht, (ich glaube aber das das keine Auswirkung auf das Ergebnis hat)
ls gibt bei der rekursiven Ausgabe den aktuellen Unterordner mit an (grep schafft die meisten)

Varianten:
Ausgabe in MB statt KB die beiden du Aufrufe:
von "du -c" in "du -cm" ändern

Wünschenswert:
schön wäre wenn die Größe für jeden Unterordner ausgegeben würde, um die Speicher-Fresser leicht zu finden.

Ich hoffe das kann irgendwer gebrauchen
Anregungen und Verbesserungen gerne (ich schreibe nur alle halbe Jahre mal ein Script)
Euer BF
 
Zuletzt bearbeitet:

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.862
Punkte für Reaktionen
1.152
Punkte
754
Cool, schaue ich mir an. Meine bisherige Methode sieht so aus, dass ich pro Sicherungsverzeichnis ein du -hs absetze und die Ergebnisse vergleiche. Dadurch bekomme ich ein Saldo, was im Prinzip auch schon ausreicht. Das Skript liefert vermutlich etwas höhere Werte, weil alles gezählt wird, was neu und anders ist, und nicht nur die Summe der neuen und geänderten Dateien, die die Summe der Löschungen übersteigt.
 

bfpears

Benutzer
Mitglied seit
09. Feb 2009
Beiträge
449
Punkte für Reaktionen
29
Punkte
28
Ich habe noch ein Script gemacht was jetzt "wirklich" den zu erwartenden frei zu werdenden Speicher ermittelt.
Das sind dann nur Dateien auf die es keinen "zusätzlichen" Hardlink gibt. (werder in älteren noch neueren Backups)
Rich (BBCode):
#!/bin/sh
if [ $# -ne 1 ]; then
  echo "Fehler: es wird genau eine Verzeichnis Angabe benötigt"
  exit 1
fi 
IFS="
"
size=0
cd $1
pfad=$(pwd)
echo $pfad
for file in $(find . -type f )
  do
#    echo "$file" 
#    echo $(ls -l -i $file | awk '{print $3}')
     if [ "$(ls -l -i $file | awk '{print $3}')" = "1" ]
       then
         ssi=$(du -c "$file" | tail -1 | awk '{print $1}')
         echo "$file"
         echo "Datei Größe:" $ssi
         size=$((size+ssi))     
     fi
done
echo "Dateien mit nur 1 Hardlink, Summe:" $size
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.862
Punkte für Reaktionen
1.152
Punkte
754
Klasse, vielen Dank!
 
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