LinuxからWindowsパーティションをクローンする

clone linux partitioning windows

そこで、私は120GBのIntel SSDを持っていて、Windows用のパーティションとUbuntu用の別のパーティションを持っています。Ubuntuは私のメインOSで、Windowsはゲーム用です。しかし、今、私はMac OS Xをインストールするために探している, と私はそれがSSD上にあるようにしたいと思います, ので、私は別のドライブにWindowsを移動するために探しています (私はそれのシェルから取り出し、テストドライブとして使用されている古い160GBの外付け.ゲームはとにかく別の外付けにしているので、起動時間以外はパフォーマンスに影響はないはず)

何か良い方法はありますか?パーティションをクローンするための良いツールはありますか?私はGoogleが私に全く関係のないパーティションを別の関係のない場所にクローンする方法を伝えるのではなく、あなたが実際に使用している/ Ubuntuがインストールされているドライブのクローンに関する多くの結果を表示されているので、私はこれを尋ねる

それと、新しい Windows パーティションでは、クローン後の微調整なしで実行できるのでしょうか?これに関する他の情報があれば、大いに感謝します

(XCodeに前足が必要で、MacBook Proがじわじわと死んでいくのでやっています)

  14  Fault  2011-10-21


ベストアンサー

1つはブートローダ/ブートマネージャ(OS をチェーンロードするために必要)があるパーティションで、もう1つは実際の W7 インストール用のパーティションです

cfdisk でパーティションテーブルを確認してください。そして、ターゲットドライブ上のすべてのパーティションを削除します

クローニングのための構文は、wiki here にあります。また、適切なMBRが必要になります(おそらくテストドライブにはすでに存在しているでしょう)

おそらく [System Reserved] パーティションにも起動可能フラグを割り当てる必要があるでしょう (最初にクローンされたパーティションにする必要があります) – cfdisk がそれを実現します

失敗した場合は、単に W7 のインストールディスクから起動して、Vista の こちら のガイドラインに従ってください

UPDATE:

プロセス全体の重要な部分について言及するのを忘れていましたが、それはあまり明らかではないかもしれません。元のドライブからパーティションテーブルをクローンして、2つのWindows関連のパーティション以外はすべて削除するか、同じサイズのcfdisk / partedで再作成する必要があります

以下にいくつかの例を示します (sda がソースドライブ、sdb がターゲットドライブであると仮定します)

dd if=/dev/sda bs=1 skip=446 count=66 of=/dev/sdb seek=446 (これは現在のDOSパーティションテーブルをMBR署名とともに出力ドライブに効果的に複製します)

dd if=/dev/sda bs=1 skip=440 count=72 of=/dev/sdb seek=440 (これはディスクIDもコピーしますが、これが見つからないと起動に失敗することがあります – しかし、そのようなディスクはIDが変更されるまで、Windows環境では一緒に動作しません)

parted /dev/sda u s p (これはソースドライブ上の現在のパーティションテーブルとセクタのサイズを調べる方法で、後に cfdisk や parted 自体を使ってターゲットにレプリケーションするためのものです)

7  XXL  2011-10-21


見てみましょう

  • ntfsclone (使用中のセクタのみをコピー)
  • fixntfs.c でブート情報のオフセットを修正しました

IIRCでは、Trinity Rescue Kitには、必要なソフトウェアだけでなく、他の多くのソフトウェア(ssh, partimage, fdisk, fdisk, cfdisk, parted, gparted, testdisk, ntffsfix; ntfs-3gのマウント、rsyncなど)が含まれています

/*
* fixntfs: change some attributes of an NTFS bootsector
*
* brought to you by Phoenix
* url: www.grhack.gr/phoenix
* mail: phoenix@grhack.gr
* 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  sehe  2011-10-22


このWindows ドライブの複製のためのハウツーは、私のために見事に機能しました。Windows インストールを新しいハード ドライブに転送することができたのはこれが初めてなので、次のグーグラーが訪問するのを助けるために、私の手順をここで共有します

私の状況です。 管理人のWindows 7 x64は128GのSSDがMAXになっていたので、240GBの買い替えを購入しました

問題: 私は2つのSATAドライブドックを持っていますが、linuxは同時に両方を認識しないので、それらの間で簡単にコピーすることができませんでした

ハードウェア:デュアルNICのファイアウォールを設定しようとしているので、このパソコンにソースSSDをインストールしました。送り先の240G SSDは外付けドックに入りました

プロセス。 1) 最初に手に取ったUSBスティックにはLinux MintのライブCDが入っていて、/dev/sda1になっていました。 2) “古い “128G SSDが検出され、/dev/sdb1/dev/sdb2になっていました。 — 3) チュートリアルの# fdisk -l /dev/sdbを使って、ソースパーティションウィンドウの情報をGeditにコピーしました。 4) 接続先の240G SSDをドライブドックに接続して電源を入れると、/dev/sdcになります。 5) fdisk /dev/sdcを使って、/dev/sdcにブートフラグとシステムフラグを含む/dev/sdbと完全に一致するパーティションを作成する。 6) dd if=/dev/sdb of=/dev/sda bs=446 count=1でMBRをコピー先のドライブにコピーします。 — ガイドではDMAを有効にするためにhdparmを使うことを提案していますが、このコマンドは失敗しました 7) ntfsclone -O /dev/sdc1 /dev/sdb1 Windows隠しシステムパーティションをコピーする。 — -O または --overwrite オプションを使用して保存先を設定すると、コマンドが後ろ向きに表示されるようになりました。Linux Mint のライブ CD に ntfsclone があったことに感謝します。 8) ntfsclone -O /dev/sdc2 /dev/sdb2を使ってウィンドウズの “Cドライブ “をコピーします。これが完了するまでに数本のビールが必要でした。 9) パーティションのサイズを変更するために、gpartedを使いました。 10) 新しいSSDをWindowsに再インストールすると、checkdiskが実行されます(チュートリアルのままにしていたので、気がつきませんでした)。 11) Windowsを再起動して、すべてが正常に戻りましたが、空き容量が増えました

2  Chris K  2014-01-08


  1. Ubuntuのアプリケーションメニューで「ディスク」と検索して、ディスクユーティリティアプリを開いてみました
  2. コピーするパーティションを選択しました。そして、設定アイコンをクリックして、”ディスクイメージの作成 “を選択しました
  3. リカバリーイメージを生成するのに時間がかかってしまいます
  4. リカバリーイメージの生成が終わったら、前のパーティションをクローンしたいパーティションをクリックしてみました
  5. その後、再度設定アイコンをクリックし、「ディスクイメージの復元」を選択し、先に生成されたディスクイメージファイルを選択します
  6. そして、それが終わるのを待っていた

ディスクユーティリティアプリを探索しただけなのに何もインストールしていませんでした

1  Niño Angelo Orlanes Lapura  2019-01-11


タイトルとURLをコピーしました