Hallo,
ich nutze nun schon seit einigen Tagen FBWF (File Based Write Filter) auf meinem Aspire One. Da es Windows GANZ deutlich beschleunigt wird es auch installiert bleiben.
Da es auch für andere Interessant sein könnte hier mal eine Anleitung und Beschreibung des tools.
Was ist FBWF?
File Based Write Filter ist ein Treiber von Microsoft der alle Schreibvorgänge auf der Festplatte abfängt und in einem Festgelegtem Teil des Arbeitsspeichers puffert.
Da keine Schreibvorgänge auf der Festplatte stattfinden hat das für die SSD im Aspire One einige Vorteile. Zum einen bremst kein Schreibzugriff mehr Windows und zum anderen
wird die SSD nicht durch Schreibvorgänge belastet von denen sie ja nicht unendlich viele durchführen kann.
Natürlich hat das ganze nicht nur Vorteile, hier mal eine Gegenüberstellung
Vorteile:
Schreibvorgänge rasend schnell da im RAM
Keine Belastung der SSD durch Schreibvorgänge
Windows läuft insgesamt deutlich flüssiger, die sonst schon mal vorkommenden kurzen Hänger gibt es nicht mehr.
Der Treiber kann an und abgeschaltet werden - Normalbetrieb geht also auch nach Installation noch immer (reboot nötig)
Es können Ausnahmeverzeichnisse angegeben werden, dort wird direkt geschrieben.
Windows bootet (bei mir) in 40 sek statt 1 min.
Nachteile:
Im Normalfall gehen alle geänderten Daten nach einem reboot verloren - das kann jedoch weitgehend umgangen werden. Dazu später mehr.
Der Treiber braucht RAM - mit den vorhandenen 512 MB kann man da nicht viel anfangen. Speichererweiterung ist also Vorraussetzung
Von den im Speicher aufgezeichneten Änderungen können nur Dateiänderungen und neu hinzugefügte Dateien auf die Festplatte geschrieben werden.
Datei/Verzeichnislöschungen und neue Verzeichnisse können nicht auf Festplatte geschrieben werden.
Für die Installation von Software/patches etc sollte man den Filter abschalten.
Zuerst dachte ich bei den Nachteilen - nicht brauchbar. Dann habe ich aber ein Script geschrieben das alle machbaren Änderungen bei Shutdown auf die Festplatte schreibt und das funktioniert wunderbar bei Normalnutzung. Wenn ich Software deinstalliere oder neue installiere schalte ich das tool einfach ab. Den Geschwindigkeitsgewinn will ich nicht mehr missen.
Was muss ich tun um das tool zu nutzen?
Die nötigen Dateien für das tool sind im "XPe feature pack 2007 trial" enthalten.
Es kann hier geladen werden:
http://download.microsoft.com/download/ ... ck2007.iso
Die Datei kann man als Image auf CD brennen, einfacher ist es jedoch man lädt sich 7zip
http://www.7-zip.org/
und entpackt die Datei. Darin enthalten ist die Datei "XPEFP2007.exe". Auch die mit 7zip entpacken.
Dann finden wir im Unterordner "rep" die Dateien. Wir brauchen nur folgende Dateien:
fbwf.sys
fbwfdll.dll
fbwflib.dll
fbwfmgr.exe
fbwf.sys muss nach \WINDOWS\system32\drivers kopiert werden, die anderen nach \WINDOWS\system32\
Jetzt haben wir alle Dateien im System. Nun müssen wir noch den Treiber installieren.
Dazu bitte den folgenden Code in einen Text Editor kopieren und unter fbwf.reg abspeichern:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\FBWF]
"Start"=dword:00000000
"Type"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,66,00,62,00,77,00,66,00,2e,00,73,\
00,79,00,73,00,00,00
"Group"="FSFilter System Recovery"
"DisplayName"="File-Based Write Filter"
"Description"="File-Based Write Filter driver"
"DependOnService"=hex(7):46,00,6c,00,74,00,4d,00,67,00,72,00,00,00,00,00
"DebugFlags"=dword:00000000
"EnabledOnAllSkus"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\FBWF\FBA]
"EnablePostFBA"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\FBWF\Instances]
"DefaultInstance"="Fbwf Instance"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\FBWF\Instances\Fbwf Instance]
"Flags"=dword:00000000
"Altitude"="226000"
Nachdem man die Datei abgespeichert hat einfach doppelklicken, daraufhin werden die Einträge in der Registry verewigt.
Jetzt rebooten - keine Angst, der Treiber ist dann zwar installiert aber noch nicht aktiv, das kann erst nach reboot eingestellt werden.
Nun eine Kommandozeile öffen:
Der Treiber hat eine tool zum konfigurieren dabei, hier die wichtigsten optionen
Einschalten:
fbwfmgr /enable
Abschalten
fbwfmgr /disable
Das ein/abschalten wird erst nach einem reboot aktiv.
Um das ganze zu testen muss mindestens folgendes eingestellt werden:
fbwfmgr /enable
fbwfmgr /addvolume c:
(oder welches Laufwerk auch immer geschützt werden soll)
fbwfmgr /setthreshold 256
(Grösse des Puffers im MB)
Optional einen Ausnahmeordner definieren - hier wird sofort geschrieben (Verzeichnisse können trotzdem nicht angelegt werden, das ist eine generelle Beschränkung)
fbwfmgr /addexclusion c: "\Admin" ich habe den Ordner vorher angelegt, dort speichere ich das gleich folgende Script und logs
Die grösse des Puffers ist wichtig - da alle Schreibvorgänge gepuffert werden ist logischerweise der angezeigt freie Platz auf der Platte max genauso groß wie der Puffer (natürlich nur wenn FBWF auf enable gesetzt ist). D.h. auch wenn die Festpatte noch 5 GB freien Platz hat können bei aktivem FBWF nur soviele Daten geschrieben werden wie Puffer reserviert wurde.
Das hört sich erstmal blöd an, im normalen Betrieb reichen bei mir die 256 MB aber locker.
Jetzt noch ein reboot und FBWF ist aktiv
Nun kommen wir zum interessanten Teil. Wenn FBWF aktiv ist möchte man ja nicht alle Änderungen verlieren. Dazu habe ich ein VBScript geschrieben das genau das verhindern soll.
Ich habe es als Shutdownscript eingetragen, so werden die Änderungen bei jedem Shutdown auf die Festplatte geschrieben.
Hier das Script: (einfach wieder in einen Text Editor kopieren und als z.B. fbwf.vbs abspeichern)
'Settings:
'The Volume that you have set to be protected by FBWF
volume = "c:"
'The file where the script store errors on commits
errorlog = "c:\Admin\FBWF\fbwf_error.log"
' If this file exists the script stops and no commits are made
nocommitfile = "c:\Admin\FBWF\nocommiton.txt"
'If committing a file fails it will be copied to this path (so it does not get lost), includung directory structure. If the path does not exists nothing will be saved. It must be on a volume that is no fbwf protected
backuppath = "d:\System\FBWF_STORE"
Set checkexist = CreateObject("Scripting.FileSystemObject")
If checkexist.FolderExists(backuppath) Then
backuppathexists = 1
Else
backuppathexists = 0
End If
If checkexist.FileExists(nocommitfile) Then
donotcommit = 1
Else
donotcommit = 0
End If
checkexist = ""
Call DetectifActive()
Function DetectifActive ()
Set WshShellDetect = WScript.CreateObject("WScript.Shell")
Set WshExecDetect = WshShellDetect.Exec("fbwfmgr /displayconfig")
isactive = LCase(WshExecDetect.StdOut.ReadAll)
If InStr(isactive, "filter state: enabled.") <> 0 Then
If donotcommit = 0 Then
Call StartCommit()
End If
End If
End Function
Function StartCommit ()
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("fbwfmgr /overlaydetail") 'get the contents of the overlay
fbwfoverlay = LCase(WshExec.StdOut.ReadAll)
folders = Split(fbwfoverlay,vbNewLine)
For each folder in folders
result = 0
dirstartpos = 0
dirlength = 0
grabpos = 0
commitfile = ""
If InStr(folder, "name \") <> 0 then
dirstartpos = InStr(folder, "\") ' returns the position of the directory start
dirlenght = Len(folder) ' returns the lenght of the string
grabpos = dirlenght - dirstartpos + 1
commitfile = Right(folder,grabpos)
Call commit(commitfile)
End If
Next
wscript.sleep(100)
End Function
Function commit (file)
helpchar = """"
Set WshShellCommit = WScript.CreateObject("WScript.Shell")
Set WshExecCommit = WshShellCommit.Exec("fbwfmgr /commit " & volume & " " & helpchar & file & helpchar)
commitoutput = LCase(WshExecCommit.StdOut.ReadAll)
commitoutputnew = Replace(commitoutput, vbNewLine, " ")
If InStr(commitoutput, "committed") <> 0 Then
'wscript.echo file
Else
Set ErrorOutput = WScript.CreateObject("WScript.Shell")
Set ErrorOutputOf = ErrorOutput.Exec("cmd /c echo " & """" & Year(Date) & "-" & Month(Date) & "-" & Day(Date) & " " & Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) & " - " & commitoutputnew & volume & file & """" & " >> " & errorlog)
errortmp = LCase(ErrorOutputOf.StdOut.ReadAll)
Set ErrorWrite = WScript.CreateObject("WScript.Shell")
filedir = Left(file,InStrRev(file, "\"))
If backuppathexists = 1 Then
Set ErrorWriteOf = ErrorWrite.Exec("cmd /c if not exist " & """" & backuppath & "\" & Left(volume,1) & filedir & """" & " mkdir " & """" & backuppath & "\" & Left(volume,1) & filedir & """")
errortmp = LCase(ErrorWriteOf.StdOut.ReadAll)
Set ErrorWriteOf = ErrorWrite.Exec("cmd /c copy " & """" & volume & file & """" & " " & """" & backuppath & "\" & Left(volume,1) & file & """" & " /Y")
errortmp = LCase(ErrorWriteOf.StdOut.ReadAll)
End If
End If
End Function
Bitte die Einstellungen unter Settings anpassen.
Ein Shutdown Script kann man über folgenden Weg eintragen:
Start -> ausführen: mmc
Datei -> Snap-In hinzufügen/entfernen
Hinzufügen: Gruppenrichtlinie
Dort unter
Richtlinien für lokaler Computer -> Computerkonfiguration -> Windows-Einstellungen -> Skripts
einfach das fbwf.vbs eintragen
Nutzt man als zusätzlichen Speicher eine SD Card läuft das ganze optimal - das System sehr schnell und Daten speichert man auf SD Karte. Danke an Acer für den 2. "permanenten" Leser.
Man kann das Script auch immer mal zwischendurch von hand aufrufen.