Bir Resmin bir bölümünü fiziksel bir diskin bir bölümüne nasıl kopyalarım?


1

Sonunda, hazır bir Windows 7 kurulumuyla çalışan önyüklenebilir bir usb anahtarım vardı, Dil seçimi geldiğinde Macbook Pro'nun klavyesinin ve trackpadinin artık çalışmadığını ve kurulum işlemine devam edemediğimin farkına vardım.

VirtualBox Windows 7 x64'ü kurmaya, klavye ve trackpad sürücülerini Bootcamp Destek Yazılımı paketinden kurmaya ve VM'yi kapatmaya karar verdim.

kullandım VBoxManage internalcommands converttoraw ... sanal diski bir .img'ye dönüştürmek için. Virtualbox'a aşina olmayanlar için, sanal bir harddrive sanki sanal harddrive'ın tam bir görüntüsünü oluşturur ve aynı şekilde çalışır.

Resmi görüntülemek için fdisk kullandım:

sh-3.2# fdisk WINDOWS7.img 
Disk: WINDOWS7.img  geometry: 2610/255/63 [41943040 sectors]
Signature: 0xAA55
     Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
*1: 07    0  32  33 -   12 223  19 [      2048 -     204800] HPFS/QNX/AUX
2: 07   12 223  20 - 1023 254  63 [    206848 -   41734144] HPFS/QNX/AUX
3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
4: 00    0   0   0 -    0   0   0 [         0 -          0] unused

Daha sonra Sistem Ayrılmış bölümünü atlamak ve Windows veri bölümünü sadece Macintosh HD'imin belirtilen dilimine kopyalamak için kullandım:

sh-3.2# dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=65535

Beni aşağıdakilerle bırakarak:

sh-3.2# fdisk /dev/disk0
Disk: /dev/disk0    geometry: 60821/255/63 [977105060 sectors]
Signature: 0xAA55
         Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
1: EE 1023 254  63 - 1023 254  63 [         1 -     409639] <Unknown ID>
2: AC 1023 254  63 - 1023 254  63 [    409640 -  684395032] <Unknown ID>
3: AB 1023 254  63 - 1023 254  63 [ 684804672 -    1269536] Darwin Boot 
4: 0B 1023 254  63 - 1023 254  63 [ 686074208 -  290768672] Win95 FAT-32

Bu doğru görünüyor, ancak takma işlemi yaptığımda, bağlanamadığım veya disk yardımcı programına erişemediğim Uninitialize yetenekli bir disk bırakıyor, denememe rağmen hiçbir şey olmuyor mount -t ntfs /dev/disk0s4 /Volumes/Temp-Dir-Made-With-mkdir

disk utility

Sorun ne olabilir Yanlış bir şey mi yapıyorum? Bu imkansız mı?

Disk0'ın 4. dilimi, yazdığım bölümün dosya sistemini miras almıyor mu?

Herhangi bir fikir için şimdiden teşekkür ederiz!

Düzenleme 1:

@David Bu bir MacbookPro11,3 bu konuda bilmeniz gereken her şeyi size söylemelidir. Bootcamp kadarıyla aşağıdaki Apple Destek Belgesinden doğrudan pencerelere indirdim kbDL1720

@klanomath (Yorum 1) Doğru, ama bilmek güzel bir bilgi! Meraktan, neden 65535 kötü bir blok boyutu? Blok boyutu spesifikasyonunun sadece bir seferde işlenen ve sürücüye / görüntüye atılan blokların sayısıyla ilgisi olduğunu düşündüm, temelde daha fazla RAM ile daha hızlı DD yapmanıza izin veriyordum (azalan verim yasası bazı Tabii ki.) Anlayışımda tamamen yanlış mıyım? bs= parametre?

@ user3439894 Farklı bir önyükleyici kullanıyorsam MBR'ye ihtiyaç duymaması gerektiğini düşündüm, ancak Sistem Ayrılmış bölümünü ihmal ettim. Burada sorun şu ki, sabit sürücüde zaten 4 bölüm var ... Bölüm 0'ın ne olduğunu (mac'umun önünde değil), bölüm 1 Mac, bölüm 2 mac kurtarma bölümü ve bölüm 3 Pencereler için yaptım. Belki de bu konuda yanlış gidiyorum ... Eğitim kampı tam bir kabusa dönüştü, görüntüyü alıp benim için iş yapsa iyi olurdu, ama daldım.


1
BS tamamen yanlıştır. 512 olması gerekir. 65535 kullanarak resmin ilk 206848x65535 atlar atlar! (41734144 -206848) sayısını kullanın - & gt; dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=512 count=41527296 Ayrıca uygun boyutta (41527296x512 Bayt) & amp; işaretli bölüm disk0s4'ü ilk önce gpt ile düzeltin. Ve önce bir yedek yap!
klanomath

1
Mac'inizin modeli / yılı nedir? "Boot Camp Destek Yazılımı" USB anahtarına doğru bir şekilde kopyalandı mı? Yukarıdaki prosedürünüze gelince, umutsuzca kayboldunuz. Neredeyse, verdiğiniz her adımın bir kusuru vardır. Ek olarak, yayınlanan sorunuza eklediğiniz adımlardan daha fazlasını bıraktınız.
David Anderson

Ek olarak: yorumum sorunuzu doğru cevaplasa da, istenen sonucu almanızı garanti edemiyorum: önyüklenebilir "Windows 7 kullanıma hazır" bölümü!
klanomath

@DeeJayh, klanomath's düzeltilmiş olsa bile dd komut Windows 7, WINDOWS7.img dosyasında atladığınız bölümde önyükleme yapmak için gerekli bilgilerin eksik olması nedeniyle işlevsel olmayacaktır. Başlamak için bu kıvrımlı yolda size gönderilen orijinal sorunu gidermenizi öneririm!
user3439894

@ALL Soru bir düzenleme ile güncellendi
DeeJayh

Yanıtlar:


0

Uygun komut dd durumunuzda bir ham dosyanın hamlesinin bir bölümü:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=512 count=41527296

bs içinde dd komutu, girişin ve "dosya" çıktısının yapay blok büyüklüğü olarak yorumlanabilir. Tarihsel ve teknik nedenlerden dolayı varsayılan blok büyüklüğü dd 512 Bayt.

512 (veya uygun bir tamsayı ^ 2 çoklu / bölücü) olarak kullanılmasının nedeni bs görüntünüzün ve disk0s4 bölümünün blok boyutu - 512 veya 4096.

Disk0'ın (mantıksal) blok boyutu hesaplanabilir (fdisk'in dahili olarak 512 veya 4096 Bayt ile çalışıp çalışmadığını bilmeden bile): 977105060 * 512 = 500 GB veya 977105060 * 4096 = 4 TB. MacBook Pro'lar için hala 4 TB'lık bir SSD mevcut değil, bu nedenle blok boyutu 512 bayt olmalı. Aynısı img dosyanız için de geçerlidir.

Şimdi hız sebeplerini hesaba katabilirsiniz: bs görüntü daha hızlı kopyalanacaktır.

Yani sizin durumunuzda geçerli bir dd komutu olabilir:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=X bs=2 count=Y

Dan beri bs Sadece 2 Bayt, değiştirmek zorundasınız atlamak (eğer a'nın X bloklarını atlar) ve saymak (Y blokları à bs "yazılmıştır"). Atlama 206848 * 512 olduğundan, X 206848 * 512/2 ve sayım 41527296 * 512, Y ise 41527296 * 512/2 ve yukarıdaki komut şudur:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=52953088 bs=2 count=10630987776

Hızlı bir test ortaya çıkarır:

dd if=/dev/zero of=~/Desktop/output.file bs=1 count=1048576
1048576 bytes transferred in 1.593527 secs (658022 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=2 count=524288
1048576 bytes transferred in 0.800444 secs (1309993 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=4 count=262144
1048576 bytes transferred in 0.384188 secs (2729331 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=1024 count=1024
1048576 bytes transferred in 0.001932 secs (542700705 bytes/sec)

Daha büyük bs daha hızlı dd komut çalıştırıldı.

BTW: En büyüğü bs Sizin için çalışmak 1048576 (en büyük ortak bölen) çünkü 105906176 (= Bayt'ta atlama boyutu) / 1048576 = 101 (ve 21261975552 (= Bayt'ta sayı büyüklüğü) / 1048576 = 20277). 101 asal!


Şimdiye kadar hepsi bs değerler 2'nin katlarıdır. bs dengesiz olduğu için, (blok-) / Arasında ise . En azından senin durumunda Eğer ve arasında hatta bayt boyutuna sahipler çünkü 512'nin katları.

Şimdi bs = 65535 kullanılmasının neden başarısız olduğu açık olmalıdır: atlama ve sayma blok numaraları bs tarafından belirlenir ve değil Resminizin veya bölümünüzün doğal blok boyutuna göre. Uygun bir komut olabilir

dd if=WINDOWS7.img of=/dev/disk0s4 skip=1616.024... bs=65535 count=324436.950...

En azından benim için bu başarısız çünkü 1616.024 ... yasadışı bir sayısal değer. Bu nedenle, bir kişi tüm sayıların tamsayı değerleri olması gerektiğini varsayabilir!

bir bs 65535’in yalnızca toplam boyutu / Arasında ise ve atlama veya arama "sınırları", 65535 Bayt'ın katlarıdır.

Eğer senin dd komuta atlama / arama / sayma kısmı içermiyor Yine de keyfi bs boyutları kullanabilirsiniz.


Rağmen dd Cevabın başındaki komut işe yarayacak, muhtemelen Windows To Go (ya da Windows Installer Gitmeye Hazır?) bölümüne önyükleme yapamayacaksınız. Disk0 MBR'si gerekli önyükleme girişini içermez.


Şaşırtıcı, bu sorunumun çözümü değil, ancak teknik olarak sorduğum sorunun cevabı. Bu muhtemelen en iyi cevap için benim seçimim olacak. Aydınlattığın için çok teşekkür ederim! Şimdi gerçekten daha iyi bir anlayışa sahibim ve gelecekte bana yardımcı olacağını tahmin ediyorum!
DeeJayh

Zaten en iyi cevap olarak seçtim, son paragrafı bir çözümle açıklığa kavuşturur musunuz? "Disk0 MBR'si gerekli önyükleme girişini içermiyor" diyorsunuz. fakat bu noktada GRUB2 gibi bir şey yükleyip, çalışmaya başlayamadım mı? Harika cevap için tekrar teşekkürler!
DeeJayh

@DeeJayh David Anderson konuyla ilgili birçok mükemmel cevap sunar. Kurulumumda (evde) Windows 7'yi yükleyemiyorum (ve Bootcamp, Parallels OS X VM'de Windows'un yüklenmesine izin vermiyor çünkü çöküyor) bu yüzden soruyu tam olarak yanıtlayamıyorum. REFInd'i yükleyerek iyi olabilirsiniz.
klanomath

@DeeJayh Windows'u VirtualBox'a kurduğunda, varsayılan bölümlemeyi seçer. Varsayılan olarak, Windows iki bölüm oluşturur. (Boot Camp Assistant, çalışan, ancak varsayılan yapılandırma olmayan tek bir bölüm oluşturur.) İlk bölüm daha küçük olan "Sistem Ayrılmış" NTFS birimidir. Bu içeren aktif bölüm herşey Windows'u başlatmak için gereken kod. Bu, Birim Önyükleme Kaydı'nı (VBR) ve BCD dosyası da dahil olmak üzere gizli sistem önyükleme dosyalarını içerir. dd komut bu gerekli tüm yazılımı atlıyor. REFInd kurulumu bu durumu düzeltmeyecektir.
David Anderson

@DeeJayh Muhtemelen en iyisi, gerçek sorununuzu gidermek için ikinci bir soru sormaktır.
klanomath
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.