Klonen Sie Windows-Partition von Linux

Also habe ich eine 120 GB Intel SSD mit einer Partition für Windows und eine andere für Ubuntu. Ubuntu ist mein Hauptbetriebssystem, Windows ist für Spiele. Aber jetzt möchte ich Mac OS X installieren, und ich möchte, dass es auf der SSD ist, also möchte ich Windows auf ein anderes Laufwerk (alte 160GB) verschieben, das ich aus der Shell genommen habe und als Testlaufwerk verwendet habe. Ich behalte meine Spiele sowieso auf einem anderen externen Gerät, daher sollte die Leistung außer der Startzeit nicht beeinträchtigt werden.

, Was der beste Weg, dies zu tun? Irgendwelche guten Werkzeuge zum Klonen von Partitionen? Ich frage dies, weil Google beim Klonen des Laufwerks, auf dem Sie tatsächlich Ubuntu verwenden/installiert haben, viele Ergebnisse anzeigt, anstatt mir zu sagen, wie eine völlig unabhängige Partition an einen anderen nicht verwandten Speicherort geklont wird.

Oh, und lässt mich die neue Windows-Partition ohne vorherige Optimierung nach dem Klon ausführen? Alle anderen Informationen dazu wären sehr dankbar.

(Ich mache das, weil ich müssen meine Pfoten auf XCode bekommen, und mein MacBook Pro stirbt langsam).

Author: Fault, 2011-10-21

4 answers

Sie müssen 2 Partitionen mit dd klonen - eine befindet sich dort, wo sich der Bootloader / Bootmanager befindet (benötigt, um das Betriebssystem neu zu laden) [System reserviert, normalerweise 1] und die andere ist die eigentliche W7-Installation.

Überprüfen Sie die Partitionstabelle mit cfdisk - sie erhalten eine visuelle Darstellung. Löschen Sie dann alle Partitionen auf dem Ziellaufwerk - cfdisk ist Ihr Freund.

Die Syntax zum Klonen finden Sie im Wiki hier. Sie benötigen auch einen richtigen MBR (er ist wahrscheinlich bereits auf Ihrer Probefahrt vorhanden).

Sie müssen wahrscheinlich auch der Partition[System Reserved] ein bootfähiges - Flag zuweisen (das sollte das erste sein, das geklont wurde) - cfdisk kann dies erreichen.

Wenn dies fehlschlägt-booten Sie einfach von einer W7-Installations-CD und folgen Sie den Richtlinien hier für Vista.

UPDATE - :

Vergessen, einen wichtigen Teil des der ganze Prozess, der vielleicht nicht so offensichtlich ist. Sie müssen entweder die Partitionstabelle vom ursprünglichen Laufwerk klonen und alles außer den beiden Windows-bezogenen Partitionen löschen ODER sie mit cfdisk neu erstellen / trennte mit der gleichen Größe.

Hier sind einige Beispiele (vorausgesetzt, dass sda Ihr Quelllaufwerk und sdb das Ziel ist):

Dd if=/dev/sda bs=1 skip=446 count=66 of=/dev/sdb seek=446 (dies wird effektiv Klon ihre aktuelle DOS-Partitionstabelle zusammen mit der MBR-Signatur auf dem Ausgabelaufwerk)

Dd if=/dev / sda bs=1 skip=440 count=72 of= / dev/sdb seek=440 (dies kopiert auch die Festplatten-ID, was manchmal zu einem fehlgeschlagenen Start führen kann - solche Festplatten können jedoch nicht in einer Windows-Umgebung zusammenarbeiten, bis die ID geändert wird)

Parted /dev / sda u s p (So können Sie die aktuelle Partitionstabelle und-größe in Sektoren auf dem Quelllaufwerk überprüfen für eine spätere Replikation auf dem Ziel mit entweder cfdisk oder parted selbst)

 7
Author: XXL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39

Schau dir

  • ntfsclone (kopiert nur verwendete Sektoren)
  • fixntfs.c um die Boot info Offsets

IIRC, , Trinity Rescue Kit enthält die notwendige software sowie viele andere (ssh, partimage, fdisk fdisk, cfdisk, parted, gparted, testdisk, ntfsfix; ntfs-3g mounten, rsync usw. etc.) .

/*
 * fixntfs: change some attributes of an NTFS bootsector
 *
 * brought to you by Phoenix
 * url: www.grhack.gr/phoenix
 * mail: [email protected]
 * irc: phoenix -> #grhack -> undernet
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    FILE *fd;
    FILE *idfd;
    struct stat fst;
    unsigned char cab[32];
    unsigned short log_heads;
    unsigned short ntfs_heads;
    unsigned short force_heads;
    unsigned short ntfs_cab;
    unsigned long long sectors;
    unsigned long long new_sectors;

    log_heads = 0;
    ntfs_heads = 0;
    force_heads = 0;
    ntfs_cab = 0;

    if(argc < 2)
    {
        fprintf(stderr, "Usage:\n\t%s <device> <total_sectors> <force_heads>\n", argv[0]);
        exit(0);
    }

    fprintf(stderr, "Stating file %s... ", argv[1]);

    stat(argv[1], &fst);

    if(!S_ISBLK(fst.st_mode))
    {
        fprintf(stderr, "not a block device\n");
        exit(-1);
    }

    fprintf(stderr, "a block device\n");


    fprintf(stderr, "Opening device %s rw... ", argv[1]);

    fd = fopen(argv[1], "r+");

    if(!fd)
    {
        perror("open device");
        exit(-1);
    }

    fprintf(stderr, "ok\n");


    fprintf(stderr, "Checking partition... ");

    fseek(fd, 3, SEEK_SET);

    if(fread(cab, 1, 4, fd) != 4)
    {
        perror("read system_id");
        exit(-1);
    }

    cab[5] = 0;

    if(strncmp(cab, "NTFS", 4))
    {
        fprintf(stderr, "%s\n", cab);
        exit(-1);
    }

    fprintf(stderr, "%s\n", cab);


    fprintf(stderr, "Reading NTFS bootsector heads... ");

    fseek(fd, 0x1a, SEEK_SET);

    ntfs_heads = 0;

    fread(&ntfs_heads, 1, 2, fd);

    fprintf(stderr, "%u\n", ntfs_heads);


    fprintf(stderr, "Reading NTFS bootsector sectors... ");

    fseek(fd, 0x18, SEEK_SET);

    ntfs_cab = 0;

    fread(&ntfs_cab, 1, 2, fd);

    fprintf(stderr, "%u\n", ntfs_cab);


    fprintf(stderr, "Reading NTFS bootsector sectors_per_cluster... ");

    fseek(fd, 0x0d, SEEK_SET);

    ntfs_cab = 0;

    fread(&ntfs_cab, 1, 1, fd);

    fprintf(stderr, "%u\n", ntfs_cab);


    fprintf(stderr, "Reading NTFS bootsector sectors_size... ");

    fseek(fd, 0x0b, SEEK_SET);

    ntfs_cab = 0;

    fread(&ntfs_cab, 1, 2, fd);

    fprintf(stderr, "%u\n", ntfs_cab);


    fprintf(stderr, "Reading NTFS bootsector boot_loader_routine_jump... ");

    fseek(fd, 0, SEEK_SET);

    bzero(cab, sizeof(cab));

    fread(cab, 1, 3, fd);

    fprintf(stderr, "0x%x 0x%x 0x%x\n", cab[0], cab[1], cab[2]);

    fprintf(stderr, "Reading NTFS bootsector total_sectors... ");

    fseek(fd, 0x28, SEEK_SET);

    sectors = 0;

    fread(&sectors, 1, 8, fd);

    fprintf(stderr, "%Lu\n", sectors);


    fprintf(stderr, "Reading device logical heads... ");

    sprintf(cab, "/proc/ide/hd%c/geometry", *(strrchr(argv[1],'/') + 3));

    idfd = fopen(cab, "r");

    if(!idfd)
    {
        perror(cab);
        exit(-1);
    }

    fscanf(idfd, "%*s %*s\n");

    fscanf(idfd, "%*s %s\n", cab);

    *(strrchr(cab, '/')) = 0;

    log_heads = (unsigned short) atoi(strchr(cab, '/') + 1);

    fprintf(stderr, "%u\n", log_heads);

    if(argc == 4)
    {
        force_heads=atoi(argv[3]);
        fprintf(stderr, "Forcing heads to %u\n", force_heads);
        log_heads=force_heads;
    }

    if(fclose(fd) == EOF)
    {
        perror("close device");
        exit(-1);
    }

    if(log_heads != ntfs_heads)
    {
        fprintf(stderr, "Heads are different... Logical=%u NTFS=%u\n\n"
                "Update NTFS bootsector? (y/n) ",
                log_heads, ntfs_heads);

        if(getc(stdin) == 'y')
        {
            fd = fopen(argv[1], "r+");

            if(!fd)
            {
                perror("open device");
                exit(-1);
            }

            ntfs_heads = log_heads;

            fseek(fd, 0x1a, SEEK_SET);

            fwrite(&ntfs_heads, 1, 2, fd);


            fprintf(stderr, "\nBootsector updated... Verifying... ");

            fclose(fd);

            fd = fopen(argv[1], "r");

            if(!fd)
            {
                perror("open device");
                exit(-1);
            }

            fseek(fd, 0x1a, SEEK_SET);

            ntfs_heads = 0;

            fread(&ntfs_heads, 1, 2, fd);

            if(ntfs_heads == log_heads)
            {
                fprintf(stderr, "ok\n\n");
            }
            else
            {
                fprintf(stderr, "error [%u]\n", ntfs_heads);
                exit(-1);
            }
            fclose(fd);
        }
        else
        {
            fprintf(stderr, "\nHeads update cancelled...\n");
        }

        getc(stdin);
    }

    if(argc >= 3 && atoll(argv[2]))
    {
        fprintf(stderr, "Update NTFS bootsector total_sectors from %Lu to %Lu? (y/n) ",
                sectors, atoll(argv[2]));

        if(getc(stdin) == 'y')
        {
            fd = fopen(argv[1], "r+");

            if(!fd)
            {
                perror("open device");
                exit(-1);
            }

            new_sectors = atoll(argv[2]);

            fseek(fd, 0x28, SEEK_SET);

            fwrite(&new_sectors, 1, 8, fd);


            fprintf(stderr, "\nBootsector updated... Verifying... ");

            fclose(fd);

            fd = fopen(argv[1], "r");

            if(!fd)
            {
                perror("open device");
                exit(-1);
            }

            fseek(fd, 0x28, SEEK_SET);

            sectors = 0;

            fread(&sectors, 1, 8, fd);

            if(sectors == new_sectors)
            {
                fprintf(stderr, "ok\n\n");
            }
            else
            {
                fprintf(stderr, "error [%Lu]\n", sectors);
                exit(-1);
            }

            fclose(fd);
        }
        else
        {
            fprintf(stderr, "\nTotal_sectors update cancelled...\n");
        }
        getc(stdin);
    }

    return(1);
}
 4
Author: sehe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-10-22 00:18:04

Das how-to zum Klonen eines Windows-Laufwerks, arbeitete sich prächtig für mich. Da ich zum ersten Mal eine Windows-Installation auf eine neue Festplatte übertragen konnte, teile ich hier meine Vorgehensweise, um dem nächsten Googler zu helfen.

Meine situation:
Managers Windows 7 x64 hatte seine 128G SSD ausgereizt, also kaufte ich einen 240 GB Ersatz.

Problem:
Ich habe zwei SATA drive Docks aber Linux hat beide am gleichzeitig verhindert eine einfache Kopie zwischen ihnen.

Hardware:
Ich bin dabei, eine Dual-NIC-Firewall einzurichten, also habe ich die Quell-SSD in diesem Computer installiert. Ziel 240G SSD ging in externe Dock.

Prozess:
1) Der erste USB-Stick, den ich aufnahm, hatte Linux Mint Live CD, die zu /dev/sda1
2) "Alte" 128G SSD wurde erkannt und wurde /dev/sdb1 und /dev/sdb2
3) # fdisk -l /dev/sdb aus dem tutorial kopiert und die Quelle partition Fenster Informationen zu Gedit.
-- Beachten Sie, dass das Tutorial die Option -u enthält, für mich zeigte fdisk jedoch bereits Blöcke (die gewünschte Ausgabe) an, sodass das Einschließen dieses Schalters die falschen Informationen liefert.
4) Stecker in und schalten sie das laufwerk dock mit ziel 240G SSD, die wird /dev/sdc.
5) Verwenden Sie fdisk/dev / sdc, um Partitionen auf /dev/sdc zu erstellen, die genau mit /dev/sdb übereinstimmen, einschließlich Boot-und Systemflags.
6) dd if=/dev/sdb of=/dev/sda bs=446 count=1 um den MBR auf das Ziellaufwerk zu kopieren.
-- Die Anleitung schlägt nun vor, hdparm zu verwenden, um DMA einzuschalten, aber der Befehl ist für mich fehlgeschlagen
7) ntfsclone-O/dev /sdc1/dev / sdb1 zum Kopieren der versteckten Windows-Systempartition.
-- -O oder --overwrite option ist verwendet zu set die Ziel, so dass der Befehl verkehrt herum erscheinen. Großes Lob an Linux Mint live-CD, die mit ntfsclone, als ich noch nicht gehört hatte dieses Befehls, bevor & ich hatte nicht auf die Netzwerk.
8) Verwenden Sie ntfsclone-O/dev /sdc2/dev / sdb2, um das Windows-Laufwerk "C"zu kopieren. Dies dauerte ein paar Biere zu vervollständigen.
9) Zum Ändern der Größe der Partition habe ich gparted
10) Neue SSD in Windows-Computer neu installiert und es läuft checkdisk (Ich hatte das Tutorial verlassen und habe nicht bemerkt, dass er das tut).
11) Windows neu gestartet und alles ist wieder normal, aber mit mehr freiem Speicherplatz.

 2
Author: Chris K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-01-08 20:07:03
  1. Ich suchte nach " " " in Ubuntu Anwendungsmenü und öffnete das Festplatten-Dienstprogramm App.
  2. Ich habe die zu kopierende Partition ausgewählt. Dann klickte die Einstellungssymbol und wählen Sie " Disk Image erstellen".
  3. würde Es dauern, eine Weile zu generieren Sie die Erholung Bild.
  4. Nachdem das Wiederherstellungs-Image erstellt wurde, habe ich auf das partition, wo ich klonen wollte die ehemalige Partition.
  5. und Dann klicken Sie erneut auf das Symbol Einstellungen, wählen Sie "Disk Image wiederherstellen " und wählen Sie die zuvor generierte Disk Image Datei aus.
  6. Dann wartete darauf, dass es zu Ende war.

Ich habe gerade die Disks Utility App erforscht,und das war ' s. Ich habe nichts installiert.

 1
Author: Niño Angelo Orlanes Lapura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-01-11 06:52:57