Pro budoucí použití zde je návod, jak jsem nakonec postupoval, s několika komentáři k různým problémům nebo úskalím, se kterými jsem se setkal:
1. Spusťte počítač pomocí živého systému Linux
Prvním krokem bylo nabootovat počítač obsahující disk k obrazu pomocí živého systému Linux.
POZNÁMKA:Můj první nápad byl použít Ubuntu Live USB disk, ale themachine nepodporoval bootování z USB, takže jsem zjistil, že je jednodušší použít staré Knoppix live CD .
2. Obraz disku pomocí dd
a propojte data přes ssh
Poté jsem zkopíroval veškerý obsah disku do obrazu souboru na místním serveru pomocí dd
a přenos dat přes ssh
:
$ dd if=/dev/hdX bs=4k conv=noerror,sync | ssh -c blowfish [email protected] 'dd of=myfile.dd'
Několik poznámek:tato metoda přečte veškerý obsah disku, takže to může trvat velmi dlouho (u 80Gb disku mi to trvalo 5 hodin). Úzkým místem není síť, ale opravdu rychlost čtení disku. Před spuštěním kopírování doporučuji zkontrolovat parametry BIOS/disk/systém, abyste se ujistili, že disk a základní deska pracují na nejvyšší možnou rychlost (to lze zkontrolovat příkazem hdparm -i
a spuštěním testu s hdparm -Tt /dev/hdX
).
POZNÁMKA:dd
nevypisuje průběh operace, ale můžeme jej vynutit, aby tak učinil odesláním USR1 signál do dd
zpracovat PID z jiného terminálu:
$ kill -USR1 PIDofdd
Poznámka:Novější verze dd
podporují status=LEVEL
možnost (man dd
)
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
the final transfer statistics, 'progress' shows periodic transfer statistics
3. Získejte zpět nevyužité místo
V tuto chvíli již není zdrojový stroj potřeba a budeme pracovat výhradně na cílovém serveru (i na Linuxu). VirtualBox bude použit k převodu surového obrazu disku do formátu VHD, ale předtím můžeme vynulovat nepoužívané bloky, aby jim VirtualBox nepřidělil místo ve finálním souboru.
Abych to mohl udělat, připojil jsem obrázky jako zařízení zpětné smyčky:
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
POZNÁMKA:Posun označující začátek oddílu v obrazu disku lze získat pomocí parted
v souboru obrázku:
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
POZNÁMKA 2:Výchozí ovladač NTFS jádra Linuxu poskytuje přístup pouze pro čtení, proto je nutné nainstalovat a používat uživatelský prostor ntfs-3g
ovladač nebo zápis na disk vyvolá chybu!
4. Vytvořte obraz VHD pomocí VBoxManage
V tomto okamžiku můžeme použít nástroje VirtualBox k převodu surového obrazu na soubor VHD:
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Snažil jsem se udělat přesně to samé jako OP (při záchraně instalace Windows) a nakonec jsem pro něj vytvořil nový nástroj ntfsclone2vhd
.
Pak byste jednoduše udělali něco takového:
ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Jedním z přístupů je použití několika užitečných technologií:VirtualBox a ntfsprogs
balíček.
Nejnovější verze VirtualBoxu umožňují vytvářet soubory VHD na pevném disku, zatímco ntfsprogs
poskytuje ntfsclone
utility. Jak jeho název napovídá, ntfsclone
klonuje souborové systémy NTFS a věřím, že to dělá na úrovni souborového systému a přeskakuje nepoužívané bloky disku.
Pro začátek tedy vytvořte nový virtuální počítač ve VirtualBoxu a zřiďte pro něj novou prázdnou jednotku se soubory VHD. Jednotka VHD musí být pouze tak velká, jako je velikost dat používaných na fyzické jednotce, kterou chcete klonovat (ve skutečnosti ji udělejte o něco větší, abyste měli prostor pro pohyb).
Dále najděte živé CD se systémem Linux, které obsahuje ntfsprogs
balíček a také openssh-server
. Líbí se mi System Rescue CD pro toto, ale téměř každé živé CD založené na Debianu nebo Ubuntu by mělo fungovat také.
Spusťte virtuální počítač VirtualBox pomocí živého CD Linuxu a spusťte sshd
v rámci virtuálního počítače, takže na něm budete moci spouštět příkazy vzdáleně. Rozdělte prázdný VHD disk vhodným způsobem pomocí libovolného rozdělovacího nástroje, který preferujete (mám rád obyčejný fdisk
, ale jsem poněkud stará škola).
S další kopií linuxového živého CD spusťte počítač obsahující fyzický disk, který chcete klonovat. Předpokládám, že VirtualBox VM a tento stroj jsou vzájemně přístupné přes síť. Na tomto počítači spusťte následující příkaz (vše na jednom řádku):
ntfsclone --save-image -o - /dev/sdXX |
ssh [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'
kde:
/dev/sdXX
je název zařízení (na místním počítači) fyzické jednotky, kterou chcete klonovat, a/dev/sdYY
je název zařízení (ve VM) cílové jednotky VHD.
Vysvětlení:První ntfsclone
příkaz v kanálu extrahuje obraz zdrojového souborového systému NTFS a odešle ho tunelem ssh, zatímco druhý ntfsclone
příkaz přijme obraz a obnoví jej na jednotku VHD.
Po dokončení operace by soubor VHD měl obsahovat přesný klon původního fyzického disku soubor za soubor (s výjimkou jakýchkoli hardwarových chyb, jako jsou vadné sektory, které by mohly způsobit předčasné přerušení procesu).
Poslední věc, kterou možná budete chtít udělat, je spustit Windows chkdsk
na jednotce VHD, jen aby klonování nezpůsobilo žádné problémy (nemělo by, ale hej, jsem z těchto věcí trochu paranoidní).