Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Background Intelligent Transfer Service (BITS) für eigene Downloads benutzen

Diejenigen die sich schon einmal intensiv mit Windows Updates und dem Windows Server Updates Services (WSUS) beschäftigt haben, kennen vermutlich den BITS (Background Intelligent Transfer Service) – zu Deutsch: Intelligenter Hintergrundübertragungsdienst. Doch was macht diesen Dienst nun intelligent und wofür kann ich ihn eventuell selber nutzen?

Es kommt bei meiner Arbeit nicht selten vor, dass ich eine größere Installation auf einem entfernten Kundensystem plane, für die zuvor einige Dateien (ISO-Abbilder, Installationspakete etc.) heruntergeladen werden müssen. Bevor ich nun gebrannte DVDs via Post versende oder die Dateien direkt herunterlade und so die Internetverbindung des Kunden „belaste“, nutze ich lieber eine bereits im Betriebssystem enthaltene Funktion: den BITS.

Funktionsweise

Der intelligente Hintergrundübertragungsdienst (BITS) verwaltet auf einem Standardsystem unter Windows typischerweise Downloads von Windows Update (auch WSUS). Dazu misst er während der Download-Vorgänge ständig die verfügbare Bandbreite des Systems – benötigen andere Anwendungen oder Dienste die volle Bandbreite, so pausiert BITS seine Download-Jobs. Dabei überträgt BITS die Daten im Hintergrund über HTTP oder auch HTTPS als Systemdienst. Jeder Download-Auftrag besteht wenigstens aus einer Quell-Datei (URL) und einem Ziel (Pfad).

How-To oder wie nutze ich BITS für meine Downloads?

Typischerweise nutze ich für meine Hintergrund-Downloads auf entfernten Systemen die folgenden Komponenten – vorausgesetzt der Intelligente Hintergrundübertragungsdienst (BITS) und das .NET Framework 2.0 sind installiert (beides ist unter Windows Server 2008 der Fall):

  • Gruppenrichtlinien-Einstellung (für die Begrenzung der genutzten Bandbreite)
  • NetSpeedMonitor (zur Kontrolle der Download-Rate)
  • BITS Download Manager (für das Anlegen von Download-Aufträgen)

Vor dem ersten Download sollte man mit Hilfe der Gruppenrichtlinien (entweder bei einer Domäne zentral administriert oder via gpedit.msc für die lokale Richtlinie) eine maximale Bandbreitenbeschränkung definieren, um die Bandbreite der Internetverbindung (die auch andere Benutzer verwenden) nicht zu blockieren. Dies geschieht in der Computerkonfiguration der Richtlinie im Zweig Administrative Vorlagen, Netzwerk, Intelligenter Hintergrundübertragungsdienst (BITS):

Die Einstellung Maximale Netzwerkbandbreite für BITS-Übertragungen im Hintergrund begrenzen sorgt nun dafür, dass die verwendete Bandbreite für Haupt- und Nebengeschäftszeiten limitiert werden kann – im folgenden Beispiel von 8.00 Uhr bis 17.00 Uhr auf 100 kBit/s in der übrigen Zeit auf 100.000 kBit/s:

Wer dieser Einstellung nicht traut, kann selbige mit Hilfe des (überaus nützlichen) Tools NetSpeedMonitor von Florian Gilles kontrollieren. Dieses Programm (verfügbar als 32 Bit- und 64 Bit-Version, ab Windows Server 2003) bietet nach der Installation eine eigene Symbolleiste in der Taskleiste, auf der die aktuellen Download- und Uploadwerte für eine gewählte Netzwerkverbindung angezeigt werden und ist zudem kompakt und granular konfigurierbar:

Nach dem Download und der Installation des (schon etwas betagten) BITS Download Managers können nun URLs zum Download hinzugefügt werden. Die Downloads starten anschließend automatisch und können auch manuell pausiert, gestoppt oder gelöscht werden:

Wie schon erwähnt, kann das Programm nach dem Hinzufügen und während der Ausführung eines Auftrages geschlossen werden, die Download-Rate wird automatisch durch die Gruppenrichtlinie Uhrzeit-bedingt angepasst wird. Eine feine Sache, wie ich finde.

Bei der Erstellung eines Download-Auftrages erstellt der BITS im Zielverzeichnis eine temporäre Datei (BITxxxx.tmp) mit der Größe der Quelldatei, die dann „gefüllt“ wird – somit wird der vollständige Speicherplatz im Vorfeld reserviert.

Alternativ kann man zum BITS Download Manager auch das BITSAdmin Tool von Microsoft verwenden, es ist in den Support Tools des Betriebssystems enthalten (ab Windows Server 2003 SP1). Seit Windows Server 2008 ist dieses Programm zwar bereits nach der Installation verfügbar, es wird aber empfohlen, die BITS Powershell CmdLets zu nutzen, die innerhalb der Powershell einmalig importiert werden müssen:

Import-Module BitsTransfer

Allerdings muss bei diesen Tools auf eine grafische Oberfläche verzichtet und mit der Kommandozeile vorlieb genommen werden – die Funktionsweise ist die gleiche.

Grundsätzlich lassen sich neue Download-Aufträge auch ohne grafische Hilfsmittel auf Kommandozeilen-Ebene erstellen. Dazu wird zuerst ein neuer Job erzeugt:

bitsadmin /create <Job-Name>

Das Anlegen des Jobs wird durch die Ausgabe der Job-GUID quittiert, welche in geschweiften Klammern dargestellt wird. Diese wird im Anschluss benötigt, um mit folgendem Befehl eine Datei dem Job hinzuzufügen:

bitsadmin /addfile {GUID} <URL> <Lokaler Speicherpfad>

Nun kann der Auftrag aktiviert werden:

bitsadmin /resume {GUID}

Damit beginnt der Download und nutzt die via Gruppenrichtlinie konfigurierte, zeitabhängige Bandbreite.

Problem der Download-Pausierung bei Abmeldung

Hat man einen BITS-Job (und eine Datei) angelegt, so ist man automatisch Eigentümer (Owner) dieses Auftrags. Dies lässt sich leicht mit Hilfe des Befehls

bitsadmin /list /allusers /verbose

kontrollieren. Meldet sich nun der Benutzer vom betreffenden System ab, wird auch der Download pausiert (der Status wechselt von TRANSFERRING in QUEUED). Dieses Verhalten lässt sich aber durch einen kleinen Trick umgehen:

Zunächst benötigen wir die GUID des BITS-Jobs, die man mit Hilfe des zuvor beschriebenen Befehls erhält. Des weiteren benötigt man das Tool psexec von Sysinternals um im Anschluss den Eigentümer des Jobs zu ändern:

psexec -s bitsadmin /takeownership {GUID}

Durch die Option -s führt PsExec den Folgebefehl als Systemkonto aus – dadurch wird der Owner des Jobs in NT-AUTORITÄT\SYSTEM geändert. Meldet man sich nun von dem Server ab, so kann man leicht von einem anderen System mit dem Befehl

psexec -s \\<Server> bitsadmin /getbytestransferred {GUID}

den Fortschritt des entsprechenden Jobs prüfen. Somit muss man für einen eigenen Download mit BITS nicht am System angemeldet bleiben. Einziger Nachteil ist, dass der BITS Download Manager nun die Jobs nicht mehr anzeigt (da der Eigentümer geändert wurde), dies muss man nun mit dem bitsadmin-Tool oder den Powershell-Befehlen erledigen.

Fazit

Wer ab und zu größere Downloads im Hintergrund auf Servern durchführen will, ohne dabei die Internetverbindung zu Hauptgeschäftszeiten zu blockieren bzw. zu beeinflussen – für den ist die Nutzung des BITS eine gute und praktikable Lösung. Downloads werden bei Unterbrechung automatisch fortgesetzt, die zu nutzende Bandbreite ist limitiert. Mit Hilfe des BITS Download Managers kann man sich schnell einen Fortschritts-Überblick verschaffen oder Aufträge hinzufügen oder abbrechen.

Mit Hilfe des beschriebenen Workarounds kann man sich auch vom System abmelden und die Downloads werden im Hintergrund heruntergeladen.

Für mich eine wirklich nützliche und deshalb empfehlenswerte Lösung. Wie bei allen meinen Beiträgen gilt: Bei Tipps, Vorschlägen sowie Fragen oder Kritiken hinterlasst bitte einen Kommentar.

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

Kommentare für “Background Intelligent Transfer Service (BITS) für eigene Downloads benutzen”

  • Bent Schrader

    Auf Grund der am 25. Mai 2018 in Kraft tretenden europäischen Datenschutz-Grundverordnung wurden alle Kommentare abgeschaltet und gelöscht. Damit wird die Erhebung personenbezogener Daten vermieden. Das DSGVO wurde von Professor Thomas Hoeren zu "einem der schlechtesten Gesetze des 21. Jahrhunderts" gekürt, mit der Bemerkung, dass überbordene Werk sei "hirnlos". Ich bedaure sehr, das damit die Möglichkeit zum Austausch von Informationen von Gleichgesinnten verhindert wird.