Windows Installation duplizieren mit Robocopy

Mit imagex oder einen Klon-Programm wie Ghost oder Acronis würde es möglicherweise besser/schneller gehen, aber das ist nicht immer zur Hand – daher recht interessant die Methode mit einer Vista Installations-DVD und robocopy eine bestehende Installation zu kopieren.

Damit kann ich nicht nur eine Installation von z.B. einer alten/kleinen auf eine neu/große Festplatte übertragen, wie von dem Blogger beschrieben, der ursprünglich (schon 2006) über diese Methode geschrieben hat, sondern ich kann vor allem auch ohne Zusatztools meine Festplatte repartitionieren.

Das muss ich kurz erklären: Ein Freund von mir hat einen PC mit 4 Partitionen. Die wo das System drauf ist, ist viel zu klein und lässt sich ohne Zusatztools nicht vergrößern. Da hilft auch die Methode die ich jetzt kurz beschreiben will:

Man braucht:

  • 1 Vista Datenträger
  • 1 externe Festplatte

Man steckt die externe Festplatte an, bootet von der Vista DVD, drückt auf Installieren, drückt dann aber, wenn man den Key eingeben sollte, Shift-F10 um eine Kommandozeile zu starten.

Nun schaut man einfach welche Laufwerksbuchstaben die verschiedenen Volumes haben.
Eine Möglichkeit ist diskpart aufzurufen, dann den Befehl “list volume”

Insbesondere interessierte mich die zu kleine Systempartiton (C:) und die externe Festplatte (G:)

Dann gibt man ein:

ROBOCOPY C:\ G:\ /e /efsraw /copyall /dcopy:t /r:0 /v /tee /log:robocopy.log /xj /xf c:\robocopy.log c:\$ntfs.log c:\hiberfil.sys c:\pagefile.sys /xd "c:\System Volume Information" c:\Recycler c:\Windows\CSC

Nun wird die ganze Partition mit einigen Ausnahmen kopiert. Falls Fehler aufgetreten sind, findet man diese in robocopy.log

Nun repartitioniert man die Festplatte – in meinem Fall wollte ich eine Partition über die gesamte Größe der Festlpatte.

Vorsicht – alle Daten auf der Platte gehen verloren!

  • diskpart
  • list disk
  • select disk 0 (darauf achten, dass man die richtige Disk auswählt!)
  • clean
  • create partition primary
  • select partition 1
  • active
  • format quick
  • list volume
  • select volume 1 (darauf achten, dass man das richtige Volume auswählt!)
  • assign letter=c

Nun kopier’ ich das ganze auf die neu erstellte Partition zurück:

ROBOCOPY C:\ G:\ /e /efsraw /copyall /dcopy:t /r:0 /v /tee /log:robocopy.log /xj

Wichtig ist unter anderem der /xj Parameter, der verhindert, dass Symbolic Links gefolgt wird, und so Endlosschleifen entstehen. Darauf hat der ursprüngliche Blogger, von dem ich die Idee habe, leider vergessen:

Howto: Duplicate any Windows installation to a new hard disk using only a Vista DVD (!)

Der letzte Schritt ist nun, ebenfalls von der bereits eingelegten Vista DVD einen Reparaturvorgang anzustoßen, Vista erstellt dann automatisch den Bootsektor und sonstige für das Booten nötige Dateien und Einstellungen (BCD etc.).

Podcatcher mit Powershell v2 & BITS

Vor kurzem habe ich einen Podcatcher mit Powershell und BITS (“Background Intelligent Transfer Service”) geschrieben, für den man aber zusätzlich noch bitsadmin.exe und bget.cmd benötigt.
Da bitsadmin.exe eher mühsam und bget.cmd zwar nett aber etwas buggy ist, bin ich gleich auf die schon damals angeführte Möglichkeit umgestiegen, Powershell v2 (CTP 3) zu verwenden – damit braucht man nämlich keine zusätzlichen Tools mehr.

Das ganze funktioniert bisher recht robust – ich möchte nur noch eine (visuelle) Statusanzeige dazu programmieren.

param ([switch] $schedule)
#Set-PSDebug -Trace 1
Import-Module FileTransfer -Verbose

$today = get-date
$yesterday = $today.AddDays(-1)
$today = Get-Date -date $today -uformat "%Y%m%d"
$yesterday = Get-Date -date $yesterday -uformat "%Y%m%d"
$today = $today.tostring()
$yesterday = $yesterday.tostring()

if ($schedule) {
$taskname = $myinvocation.mycommand.definition -replace '\W','_'
schtasks /create /ru PIVO9\Christian /rl HÖCHSTE /sc MINUTE /MO 5 /tn "$taskname" /tr "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell -c $($myinvocation.mycommand.definition)"
return;
}

pushd (split-path -parent $myinvocation.mycommand.definition)

$feed=[xml](New-Object System.Net.WebClient).DownloadString("http://***.*****.net/mythfeed/feed.php")
foreach($i in $feed.rss.channel.item) {
    $url = New-Object System.Uri($i.enclosure.url)
    $absURL = $url.AbsoluteUri   
    $filename = "C:\Users\Public\Videos\ElskeTV\" + $url.Segments[-1]
    If ((Test-Path $filename) -eq $FALSE) 
    {
echo ----------------------------------------------------------------------------------------------------
echo $url.Segments[-1]

$joblist = Get-FileTransfer
$jobexist = $false

foreach ($i in $joblist) {

foreach ($j in $i.filelist) {
if ($j.IsTransferComplete) { Complete-FileTransfer $i }
if ($j.RemoteName -eq $absURL) {
echo "Job wurde gefunden..."
if ($j.BytesTotal -gt 0) { "{0:P1}" -f  ($j.BytesTransferred / $j.BytesTotal) }
$i.JobState
$i.CreationTime
$jobexist = $true
if ($j.RemoteName -match $today) {$i | Set-FileTransfer -Priority "FOREGROUND" }
if ($j.RemoteName -match $yesterday) {$i | Set-FileTransfer -Priority "FOREGROUND" }
}
}}

if ($jobexist -eq $false) {
New-FileTransfer -ServerFileName $absURL -ClientFileNamePrefix C:\users\Public\videos\ElskeTV\ -Displayname $url.Segments[-1] -Asynchronous
Echo "Neuer Download-Job wurde hinzugefügt!"
}

    }
}

echo ----------------------------------------------------------------------------------------------------

popd

#Fortschritt in Prozent der einzelnen Downloads
#$joblist = Get-FileTransfer ; foreach ($i in $joblist) { foreach ($j in $i.filelist) { if ($j.BytesTotal -gt 0) { "{0:P1}" -f  ($j.BytesTransferred / $j.BytesTotal) }}}

#Summe aller übertragenen Bytes aller Downloadjobs
#$joblist = Get-FileTransfer ; $total = 0 ; foreach ($i in $joblist) { foreach ($j in $i.filelist) { if ($j.BytesTotal -gt 0) {$total = $total + $j.BytesTransferred}}} ; $total ; get-date

#Downloadjobs auflisten, die in den letzten 10 Minuten erstellt wurden
#get-FileTransfer | Where {$(Get-Date).AddMinutes(-10) -lt $_.CreationTime}

#Dateien auflisten mit einem bestimmten Datum im Dateinamen
#$joblist = Get-FileTransfer ; foreach ($i in $joblist) { foreach ($j in $i.filelist) { if ($j.RemoteName -match "20090418") {$i | fl * } }}

#Priority hochsetzen für Downloads mit einem bestimmten Datum im Dateinamen
#$joblist = Get-FileTransfer ; foreach ($i in $joblist) { foreach ($j in $i.filelist) { if ($j.RemoteName -match "20090418") {$i | Set-FileTransfer -Priority "FOREGROUND" } }}

 

 

Geografische Einschränkungen bei Amazon.de mp3-Download

Endlich DRM-freie Musik auf Amazon.de. Wow! Nachdem ich nun wegen meiner schlechten Erfahrungen mit DRM jahrelang keine Musik gekauft habe, meinen Musik-Konsum auf gelegentlich eine CD oder Musik-DVD, (Internet-)Radio und meine bestehende MP3 Sammlung beschränkt habe, habe ich nur auf den Zeitpunkt gewartet bis Amazon.de oder irgendein anderer großer Anbieter (mit einer großen Musikauswahl) endlich DRM freie Musik in guter Qualität als Download anbietet.

“Es ist soweit!”, habe ich mir gedacht und wollte bei diesem Angebot von Amazon.de gleich zuschlagen:

image

Als immer eingeloggter, seit 10 Jahren Amazon “Stammkunde” schnell auf 1-Click kaufen geklickt und dann das hier…

image

 

Ich ärgere mich über diesen Mist so unbeschreiblich, dass ich laut schreien möchte. Zeit dass die EU da mal endlich mal was regelt. Das ist so eine Frechheit, dass ich als Österreicher Produkte nicht kaufen kann, die ein Deutscher schon kaufen kann. Mir kommt echt so das *#$% dass ich in diesem Blog-Beitrag fast meine gute Kinderstube vergessen möchte…

Dieser Mist führt dazu dass immer noch viele illegal herunterladen – weil man sie als Kunden, die bereit sind für ein Produkt zu bezahlen – am Kauf hindert!

EDIT: Ganz ähnlich argumentiert auch dieser Blogger:
http://blog.datenschmutz.net/2009-04/amazon-bietet-drm-freie-mp3s-an/

Facebook

Letzte Tweets

Twitter Mai 26, 23:39
Gelbe Engel! Danke!

Twitter Mai 18, 21:34
Finland was terrible. #Eurovision

Twitter Mai 17, 12:49
just blogged Ist das Surface Pro teuer? – Ein Fact-Check: Gestern wurde angekündigt, dass das Surface Pro in D... http://t.co/PhW7qzhkUq

Folge mir auf Twitter!

Über den Autor

MCTS

Christian Haberl Christian Haberl ist seit mehr als 10 Jahren als EDV Berater, Vortragender und Trainer tätig. Er kann sich nicht für ein Spezialgebiet entscheiden, drum heißt dieser Blog auch "Kraut & Rüben Blog" - Unter seine Interessen fallen Web-Entwicklung auf ASP.NET Basis, Information Worker & Productivity Technologien (Windows, Office), Server (Windows Server, Small Business, Virtualisierung, Exchange), Scripting, Spam Filtering/Security und Digital Home. Christian Haberl ist auch einer der führenden Produktspezialisten für Windows Media Center und Windows Home Server und ist Direktor des ClubDigitalHome.
Im Jahr 2008 hat Christian Haberl über 200 Vorträge und Schulungen durchgeführt.
Im Frühjahr 2009 wurde Christian Haberl von Microsoft Österreich zum "Influencer" ernannt, weiters wurde er Microsoft Certified Technology Specialist / Microsoft Certified Connected Home Integrator sowie Microsoft Certified Consumer Sales Specialist.

Month List

Netzwerk Management

Bandwidth

RecentComments

Comment RSS