File Based Write Filter ist ein Treiber von Microsoft der alle Schreibvorgänge auf der Festplatte abfängt und in einem festgelegten Teil des Arbeitsspeichers puffert. Da keine Schreibvorgänge auf der Festplatte stattfinden hat das für die SSD im Aspire One (A110, auf dem A150 macht es kaum Sinn) 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.
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 deutlich schneller.
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, dies passiert nicht automatisch aber dazu mehr unter optionales. Datei/Verzeichnislöschungen und neue Verzeichnisse können nicht auf Festplatte geschrieben werden.
Für die Installation/Deinstallation von Software/patches etc MUSS man den Filter abschalten.
Der Einsatz von FBWF ist Experimentell, man sollte sich also im klaren darüber sein das es Probleme verursachen kann
Wie sehr FBWF den A110 unter Windows XP beschleunigt ist hier im Ansatz zu erkennen: http://www.humyo.com/F/4781349-164852823
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:
Die Datei kann man als Image auf CD brennen, einfacher ist es jedoch man lädt sich 7zip
und entpackt die Datei. Darin enthalten ist die Datei „XPEFP2007.exe“. Auch die mit 7zip entpacken. Dann findet man im Unterordner „rep“ die Dateien. Benötigt werden 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\
Nun befinden sich alle Dateien im System, es muss aber noch der Treiber installiert werden. 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.
Der Treiber hat ein Tool zum konfigurieren, hier die wichtigsten Optionen (Aufruf in der Kommandozeile):
Einschalten: fbwfmgr /enable
Abschalten: fbwfmgr /disable
Das ein/abschalten wird erst nach einem reboot aktiv.
Um das ganze zu nutzen 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)
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 die 256 MB aber meist aus.
Jetzt noch ein reboot und FBWF ist aktiv :)
fbwfmgr /addexclusion c: „\Beispielordner“
In diesen und allen Unterordnern werden die Dateien sofort, also am Schreibpuffer vorbei geschrieben. Verzeichnisse können trotzdem nicht angelegt werden, das ist eine generelle Beschränkung für das geschützte Laufwerk.
* Ausnahme wieder entfernen
fbwfmgr /removeexclusion c: „\Beispielordner“
Wenn FBWF aktiv ist möchte man ja nicht alle Änderungen verlieren. Dazu habe ich ein VBScript geschrieben das genau das verhindern soll. Hier das Script: (einfach wieder in einen Text Editor kopieren und z.B. als „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 = "d:\fbwf\fbwf_error.log"
'If this file exists the script stops and no commits are made
nocommitfile = "d:\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:\fbwf\backup"
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
Zu den Einstellungen unter Settings ist folgendes zu beachten:
volume = "c:" Angabe des Laufwerks das man als geschützt konfiguriert hat errorlog = "d:\fbwf\fbwf_error.log" Hier schreibt das Script ein log über alle Dateien die nicht auf Festplatte geschrieben werden konnten. Das Verzeichnis muss existieren, die Datei muss ausserdem entweder auf einem nicht durch FBWF geschütztem Laufwerk oder in einem Ausnahmeordner liegen ! Trifft dies nicht zu wird kein log geschrieben. nocommitfile = "d:\fbwf\nocommiton.txt" Falls diese Datei existiert werden keine Änderungen auf die Festplatte geschrieben. Hilfreich falls man das Script als Shutdown Script eingetragen hat und trotzdem mal keine Änderungen schreiben möchte. backuppath = "d:\fbwf\backup" Falls dieser Pfad existiert werden hier alle Dateien inclusiv Verzeichnisstrukturen hinkopiert die das Script nicht auf das geschützte Laufwerk schreiben konnte. Es dürfte klar sein das sich der Ordner auf einem nicht durch FBWF geschütztem Laufwerk befinden muss. Der Ordner wird NICHT vom Script angelegt, existiert er nicht wird nichts gesichert.
Man kann das Script einfach ausführen und somit alle machbaren Änderungen auf Festplatte schreiben oder es als Shutdown Script einrichten. Auf diese Weise werden die Dateien bei Shutdown auf die Festplatte geschrieben.
Ein Shutdown Script kann man über folgenden Weg eintragen: „Start → ausführen: gpedit.msc“. Dort unter: „Richtlinien für lokaler Computer → Computerkonfiguration → Windows-Einstellungen → Skripts“ einfach das „fbwf.vbs“ eintragen
Unter XP Home ist es über diesen Weg nicht möglich ein Shutdown Script einzutragen, eine Lösung das dafür ist hier zu finden: http://www.pcwelt.de/start/software_os/tipps_tricks/windows/63058/xp_home_kostenlos_noch_naeher_an_xp_pro_heran/index.html
Das obige Flush-Script öffnet je auf die Festplatte zu schreibende Datei ein Konsolenfenster und schließt es wieder. Das führt bei vielen Dateien zu einem längeren - bis zu mehrere Minuten dauernden - 'Fensterflackern'.
Wen das stört, der kann das in folgendem Zip-Archiv (~16KB) enthaltene Programm verwenden:
http://freenet-homepage.de/HannesHegenbart/fbwf_flush/fbwf_flush_bin.zip
Im Zip ist eine einzelne EXE, die man einfach startet. Es startet ebenfalls ein Konsolenfenster; hier werden aber im Gegensatz zum VBS-Script alle Dateien auf einen Rutsch geschrieben.
Dateien, die nicht committed werden können, werden standardmäßig nach d:\fbwf kopiert.
Wer einen anderen Pfad will muss diesen als Parameter übergeben z.B. „fbwf_flush.exe e:\backup“.
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.
FBWF Einschalten:
fbwfmgr /enable
FBWF Aussschalten:
fbwfmgr /disable
Die aktuell im Schreibpuffer liegenden Dateien anzeigen:
fbwfmgr /overlaydetail > %SYSTEMDRIVE%\fbwfoverlay.txt notepad.exe %SYSTEMDRIVE%\fbwfoverlay.txt del %SYSTEMDRIVE%\fbwfoverlay.txt
Die aktuelle FBWF Konfiguration anzeigen:
fbwfmgr /displayconfig> %SYSTEMDRIVE%\fbwfconfig.txt notepad.exe %SYSTEMDRIVE%\fbwfconfig.txt del %SYSTEMDRIVE%\fbwfconfig.txt
Deamon Tools:
Die Daemon Tools haben Probleme mit FBWF, das kann durch folgende Befehle behoben werden:
fbwfmgr /addexclusion c: „\WINDOWS\system32\drivers“
fbwfmgr /addexclusion c: „\Programme\DAEMON Tools Lite“