制作可引导USB以从Linux安装Windows XP


19

我有只安装了UbuntuDell Inspiron Mini 9。我也想安装Windows XP,但是我没有,也没有外部CD驱动器,因此我需要通过USB进行Windows安装。

我发现的所有教程都使用Windows使USB可启动。我如何在Linux上做同样的事情?


您可以访问带有CD驱动器的计算机吗?
纳撒尼尔(Nathaniel)2010年

我的确有另一台带有CD驱动器的linux机器。

Answers:


13

您可以使用VirtualBox并授予虚拟机对硬盘驱动器的访问权限。然后在虚拟机中安装Windows XP,并在实际的硬盘驱动器上创建一个新分区。安装后,您可以正常重启计算机并启动Windows。

授予VirtualBox对整个磁盘的访问权限(将更x改为适当的字母,例如a):

VBoxManage internalcommands createrawvmdk -filename ~/hdd.vmdk -rawdisk /dev/sdx

然后选择现有的硬盘驱动器,然后hdd.vmdk在您的主文件夹中选择文件。

如果这些命令抱怨缺少权限,请disk使用以下命令将您自己添加到该组中,然后登录并注销,然后重试。

sudo adduser `whoami` disk
  1. 如果您已经在目标计算机上安装了Linux,则可以直接在该计算机上执行此操作,但是在重新引导至Windows之前,请运行sudo update-grubsudo grub-install /dev/sdx(并更改x为相应的字母,例如a)以确保仍然能够引导Linux。为避免计算机和虚拟机中模拟的VirtualBox之间的硬件差异(可能导致BSOD)出现问题,您还可以在离开虚拟机之前在Windows中创建第二个硬件配置文件。使用GRUB直接引导到Windows时,请选择第二个硬件配置文件。您最终可以使这个新的硬件配置文件成为默认配置文件。

  2. 如果目标计算机是完全干净的,请制作可引导的Ubuntu USB驱动器,并在其中放置(合法购买的)Windows安装CD的映像。然后在目标计算机上启动Ubuntu,并按照上面的说明进行操作。


1
这绝对是一个绝妙的解决方案!到目前为止似乎工作正常。:)
RCE 2012年

1
嗨,我正在Ubuntu 12.04上尝试执行此操作,但是遇到了问题。当我写VBoxManage internalcommands createrawvmdk -filename ~/hdd.vmdk -rawdisk /dev/sdxx是我的硬盘时,会收到此消息。 VBoxManage: error: Cannot open the raw disk '/dev/sda1': VERR_ACCESS_DENIED VBoxManage: error: The raw disk vmdk file was not created然后我以root身份进行操作,但是尽管显然可以,但是我只能以root身份打开hdd.vmdk,这让我感到不舒服。但是,虚拟机似乎无法正常工作。我得到一个黑屏,以root身份打开virtualbox。
Fénix酒店

1
如答案“如果命令抱怨缺少权限,请使用以下命令将您自己添加到组磁盘中,然后登录并注销,然后重试。” sudo adduser `whoami` disk
LinusUnnebäck'12

1
我执行了上述操作,并安装了虚拟机并运行winxp正常,但是当我关闭计算机并重新启动时,出现Windows徽标,然后立即冻结,然后迅速显示BSOD并重新启动。
SaultDon 2012年

2
不幸的是,除非您很幸运,否则此方法实际上不会起作用。您可能最终安装了Windows,该Windows在虚拟机上可以正常运行,但是无法在硬件上启动。
jpalecek 2015年

8

从此处下载RUFUSLDR:https ://dl.dropboxusercontent.com/u/20170669/RUFUSLDR在此处 下载ms-sys:http ://prdownloads.sourceforge.net/ms-sys/ms-sys-2.3.0.tar 。 gz?download 将ms-sys-2.3.0文件夹拖出到支持执行标志的位置(最有可能是Linux主文件夹)。cd在那里的终端,键入“ make”,然后“ sudo make install”。真容易。

我很同情你。我尝试过有关如何从Windows创建可引导进入WinXP安装程序的USB驱动器的教程。磁盘部分,WinToFlash之一和HP USB Format Utility都使我失败了。

Rufus实际上有效。但这是仅Windows的实用程序。您可以安装VirtualBox,在VirtualBox中安装Windows,在VM中安装Rufus,将USB驱动器共享到VM,然后让Rufus使USB驱动器可引导到Windows XP安装程序中。

Rufus当前不支持使用宽松的安装文件来制作可引导的USB WinXP安装程序。它必须看到iso。因此,您可以通过VirtualBox挂载iso来将XP安装到VM中,但这会显示为松散文件(看不到iso)。因此,要使Rufus查看iso文件本身,请在将iso存储到VM的主机上共享目录。然后将Rufus指向iso文件在VM网络驱动器中的位置(Z:\或其他)。

顺便说一句,您也可以将FreeDOS软盘映像复制到驱动器,也从iso复制文件,然后使用内存磁盘引导到软盘映像。从FreeDOS,运行i386 \ winnt.exe。缺点是(除非找到DOS NTFS驱动程序?),您将只能将Windows安装到FAT32卷上,而不能安装到NTFS卷上。

您可能会因为进入虚拟机而发现Rufus进程非常缓慢(不明白为什么,也许我对如何设置设置感到愚蠢)。就我个人而言,我认为在笔记本电脑上花费了一个小时,5分钟和40秒。我将告诉您如何在Linux中没有Rufus的情况下进行操作。我们将模仿Rufus,但是首先,如果您决定从VM使用Rufus,请注意,Rufus完成后,Linux将无法看到该分区:

Rufus不仅格式化分区,还重做MBR(包括分区表)。因此,请先保存拇指驱动器中的所有内容。

注意: Rufus给出了一个技巧MBR,当BIOS执行该MBR时,它会交换前两个BIOS驱动器(0x80变为0x81,反之亦然)。此外,它将BIOS ID放入此技巧MBR中,以使驱动器启动为0x81(第二个驱动器)。为什么我这样告诉您:MBR技巧使Linux(和Grub2 v2.00)无法读取分区表。Windows会很好用(给它一个驱动器号和所有驱动器号),并且该驱动器将可引导。但是Linux将看不到该分区,因此无法挂载它。没问题。将MBR保存到文件:

sudo dd if=/dev/sdX of=~/Desktop/rufus_trick_mbr count=1 bs=512

现在使用fdisk为它提供一个新的MBR。您甚至都没有触摸分区本身,只是给它一个新的MBR。在fdisk中实际上什么也没做,直到您按下“ w”。

sudo fdisk /dev/sdX

p //Print partition table. fdisk, unlike the kernel, CAN make sense of the partition table as-is.

You'll probably see the partition start on sector 2048 and go to the end.

o  //Tells fdisk to make a new partition table

n //create new partition. By defualt, fdisk should also make the partition start at sector 2048 and go to the end. Make sure the partition starts where it used to and ends where it used to.

select primary

t //change partition type id

7 //for ntfs

p //Make sure everything is right. And no, don't worry about the boot flag.

w //when you're sure. Remember, we saved the old mbr and can undo any mess-ups made here with dd.

我们还可以使用dd进行新的合并:

HAMMOND –“别担心,我不会再犯同样的错误。” MALCOLM –“不,不,您正在犯所有新错误。”

-侏罗纪公园II,失落的世界

拔下并重新插入拇指驱动器。如果没有其他要求,那么/ dev / sdXY现在至少应该存在(在仅存在/ dev / sdX之前-不存在“ Y”)。要安装它,应安装ntfs-3g。如果已安装,请查看是否已安装(如果已安装,则应显示在桌面或文件浏览器的左窗格中)。如果不是,请自行安装。您可以先尝试使用文件浏览器挂载它。以下是手动安装它的方法:

sudo mount -t ntfs-3g /dev/sdXY [mount point]

在Linux中做您想做的事。

如果愿意,请重新打开rufus_trick_mbr:

sudo dd if=~/Desktop/rufus_trick_mbr of=/dev/sdX bs=512 count=1 //No "Y"! Just /dev/sdX!

但是您不必重新使用MBR。您可以使用Grub2的ntldr命令来加载/ BOOTMGR。(可能需要先执行“ insmod ntldr”才能插入ntldr模块。)

这是发生了什么:

Rufus用一个分区表条目放下了MBR技巧,将分区格式设置为NTFS,将内容放到该分区的引导区中,只有ntldr样式的引导加载程序才关心它,将文件从iso中复制到分区中,然后从NTDETECT.COM中复制文件。 i386文件夹并将其放在根目录下,从i386文件夹复制txtsetup.sif,将其放在根目录下,并添加一行,而github,c0m / pbatard / rufus / wiki / Targets-Supported未提及,因此谢谢“ openssl md5”和cmp向我指出。

感光:AND将SETUPLDR.BIN从i386文件夹复制到根级别,并将其重命名为BOOTMGR,并对该二进制文件进行修补。是的,这就是窍门。从CD引导时,SETUPLDR.BIN会检测到它已从CD引导,并在i386文件夹中查找内容。如果从硬盘驱动器启动,它会检测到它是从硬盘驱动器启动,而是查找一个minint文件夹,如果找到,则寻找一个$ WIN_NT $〜BT文件夹以开始第二阶段的安装(重新启动后,当您启动到目标硬盘驱动器时)。因此,您甚至不能只将“ i386”重命名为“ minint”。即使从硬盘驱动器(例如USB驱动器)启动,也必须修改SETUPLDR.BIN以在i386文件夹中查找。

我认为Rufus将修改后的二进制文件称为“ BOOTMGR”是不恰当的。那就是Vista和7(以及8?)使用的,而不是XP。BOOTMGR甚至不会像NTLDR(SETUPLDR是其修改版)那样寻找boot.ini文件。因此,我将其重命名为“ RUFUSLDR”,并进行下载。另外,您可能希望将其与可能运行的任何实际BOOTMGR区别开来。

如果应用Windows安装程序iso,Rufus会强制您将驱动器格式化为NTFS。我相信这是由于x64 Windows 8开发人员预览版包含的文件> 4GB,而FAT32无法支持。但这不适用于这里。4GB附近没有文件。您可以使用FAT32,就可以了。

让我们模仿Linux中的Rufus(我猜大概是任何unixoid):

  1. 确保驱动器是MBR设计的。如果fdisk是GPT,它将发出警告,并为您提供使其成为MBR模式的选项(选项“ o”)。破坏性较小的是,如果您具有4个或更少的分区,则gdisk将使您将GPT设计的驱动器转换为MBR设计的驱动器。Gdisk还将使您的驱动器成为MBR / GPT混合模式的磁盘,您最多可以选择3个分区,这些分区对于不知道GPT的东西是可见的(第4个插槽是用于保护其余分区的保护性分区)。即使您仅使用fdisk,只要新分区表项仍在同一位置开始和停止,就不会丢失分区;即使在使用fdisk时,也不会丢失分区。只要确保将磁盘末尾的辅助GPT归零即可。

  2. 确保分区格式为FAT32或NTFS。请记住,FAT32更跨平台友好。如果已将其格式化为FAT32或ntfs,则无需对其进行格式化:

    sudo blkid / dev / sdXY [将在此处说明文件系统,以及UUID,标签等。]

如果不是FAT32或NTFS,请执行以下任一操作:

sudo mkdosfs -F 32 -n [insert volume label (name) here] /dev/sdXY

sudo mkntfs -L [insert volume label here] /dev/sdXY

3应用DOS / Windows如此神奇的引导程序:

sudo ms-sys -w /dev/sdXY

*关于此-“ -w”代表“ write”-只是写。而不是指定要写什么。因此,“-w”是ms-sys的自动模式:它确定要针对这种情况写入的最佳引导程序数据。我很惊讶地发现,汽车是对的:一个FAT32分区,我需要MS-SYS的FAT32 DOS引导扇区 MS-SYS的FAT32 NT启动扇区,我认为我会需要加载_NT_LDR(NT加载器)(SETUPLDR的derivitive。 BIN是NTLDR的修改版本,而RUFUSLDR是SETUPLDR.BIN的修改版本。

4为了更好地进行测量,还应将几何图形内容写入分区。这不会改变磁盘的几何形状,它只是留下了关于几何形状的注释,以使那些懒惰的人无法自行了解几何形状:

sudo ms-sys -p /dev/sdXY

*注意:第4步不适用于NTFS。*另一注:确保您的Linux内核版本> 2.6。内核2.6有一个错误,报告了错误的头个数(几何图形)。因此,“-p”选项可以在内核2.6中放入错误的信息。解决方法是允许用户手动指定要记录的磁头数量的“ -H”选项。但实际上,只需升级您的内核即可。如果您运行的是2.6,则已经过期。要告诉您的内核版本,请执行以下操作:

uname -r

5从iso文件夹中复制文件,无论如何。双击发行版的许多发行版isos,或者至少在右键单击>打开方式下提供使用存档安装程序打开的选项。如果您不是这种情况,请执行以下操作:

sudo mount -o loop (path to iso) (path to desired mount point)

6将修改后的SETUPLDR.BIN(RUFUSLDR)文件放在根级别上。

7将NTDETECT.COM从i386复制到根级别。

8将txtsetup.sif从i386复制到根级别。

9打开txtsetup.sif的新副本,并为“ [SetupData]”打开Ctrl + F。在该标题的正下方,放置以下行:

SetupSourceDevice = "\device\harddisk1\partition1"

10安装一个能够将NTLDR样式的引导程序加载到该驱动器或另一个将用于引导该驱动器的驱动器的引导程序,或者使用现有的引导程序。如果您在硬盘驱动器上安装了Grub2以启动Ubuntu,则只要看到菜单进入Grub命令行,只要按“ c”即可。如果您使用Syslinux,也可以使用它。在本教程中,我将坚持使用Grub2。

要将Grub2安装到磁盘(如果使用硬盘驱动器的现有引导程序,则可能不需要这样做):

sudo grub-install --boot-directory=[mount point of disk, not iso] [/dev/sdxy]

11a。输入grub.cfg条目或手动执行以下操作:

grub> insmod ntldr //Inserts (loads) the Grub2 module used for loading NTLDR-style bootloaders.
grub> set root=(hdx,msdosy) //Replace x and y as appropriate. Sets the current directory to the target partition. Probably not needed if you booted off the drive you put the WinXP installer files on, but we always do this. Use "ls" to list all drives and partitions. If you only have one MBR-schemed disk with only one (or however many you made) partition(s), you'll be able to pick out which is your thumb drive. If not, try one and do "ls /". It will list the files on the root level of that partition. That should be a dead-giveaway. Notice that "ls" (without slash) lists drives and partitions, and "ls /" (with slash) lists the files on the root level of the partition that is the current working directory.
grub> ntldr /RUFUSLDR //Tells it to load RUFUSLDR.
grub> boot //That's the "go button".

11b。作为grub.cfg条目,它看起来像这样(不要用括号括起来,这是Grub,不是大学!!):

menuentry "Windows XP Installer" {
  insmod ntldr
  search --no-floppy --fs-uuid --set=root [insert filesystem's UUID here, obtaind by "sudo blkid /dev/sdXY"]
  ntldr /RUFUSLDR
}

///请注意,以上是设置Grub当前工作目录的更可靠的方法。另请注意,配置文件条目暗含“ boot”。

//还请注意,尽管习惯上有一个用于引导Windows的“ drivemap -s(hd0)$ {root}”行(使Window的驱动器成为第一个BIOS驱动器),但是对于我的USB Windows XP安装程序而言,这样做只是在尝试引导ntldr样式的引导程序时重新引导。如果一切都不正常,并且确定已完成所有步骤,请尝试“ drivemap -s(hd0)$ {root}”

//请注意在引导时是否插入了多个USB驱动器。当系统提示您引导USB时,系统将引导最主要的可引导USB驱动器。您可以通过两个可启动USB驱动器系统地找出哪个USB端口占主导地位。对我来说,我不必尝试多种组合,因为我的USB端口排列在列中,而整个列对其他列则占主导地位。在列中,较高的列占主导地位。

///请注意,如果从另一个驱动器上的Grub2引导Windows XP USB安装程序,则Grub2将仅看到最主要的USB驱动器(至少在我的系统上)。因此,请确保您的WinXP USB安装程序位于最常用的插槽中。(或者,如果您有两个USB驱动器,并且Grub2看到非WinXP安装程序驱动器,则只需切换两个。)当然,如果仅插入一个USB驱动器,这不是问题。

//如果只是重新启动,请确保您执行了“ sudo ms-sys -w / dev / sdXY”,如果是FAT32,则确保了“ sudo ms-sys -p / dev / sdXY”,并将NTDETECT.COM从i386复制到了根级别。

//如果它说找不到任何东西,则说明您可能没有在使用修改过的引导程序。确保您使用的是修改后的版本。(与i386 / SETUPLDR.BIN具有不同的md5。)另外,请确保txtsetup.sif和NTDETECT.COM在根目录下。

//如果显示要插入Windows XP SP3 CD,请确保已将该行添加到txtsetup.sif,并且CD Ident文件正确(WIN51,WIN51IP等)。只是删除CD Indent文件,如有疑问,请将其复制回去。

//如果提示您需要插入光盘以证明您有资格进行升级安装,是否插入了任何GPT磁盘?也许这就是问题所在。拔出所有GPT格式的磁盘,或者在Linux中将它们转换为MBR。(因为要关闭计算机,请拔掉电源,然后再试一次。不只是取消操作。)

//顺便说一句,要安装到USB驱动器,您需要在ngine.de/article/id/8进行破解。是的,可以从USB到USB安装Windows XP。

请享用,

杰克XD


1
在经历了很多教程后,您的方法似乎很有说服力,如果您的方法失败,我将尝试使用您的方法进行无人值守的tftp引导(后来用于实验), NTFS signature is missing. Failed to mount '/dev/sdb': Invalid argument The device '/dev/sdb' doesn't seem to have a valid NTFS.我首先使用Win 7机器并使用rufus指向XP iso并用ISO格式化USB,然后将USB插入Linux机器,现在从您的方法sudo mount ntfs-3g / dev / sdb1 / media / usb开始,这是我得到错误的原因dd的前2步运行正常
注册用户

这是fdisk sdrv.ms/15UUtRf的快照和fdisk的另一个屏幕快照sdrv.ms/15UUuVk的快照,我想如果您注意到任何问题,我都会正确地告诉我
注册用户

1
我无法使其在Linux中工作。
肯2014年

1
这是一个很好的答案,终于给了我正确的线索-这部分:顺便说一句,您也可以将FreeDOS软盘映像复制到驱动器,也从iso复制文件,并使用内存磁盘启动到软盘中。图片。从FreeDOS,运行i386 \ winnt.exe。您甚至不需要使用内存磁盘,将FreeDOS安装到FAT32闪存中非常容易(可以使用qemu完成,或者周围有usb映像)。另外,您可以通过这种方式将Windows安装到NTFS,Windows安装程序将自行处理NTFS。
jpalecek 2015年

1
@jpalecek您可以从您的评论中得到完整的答案吗?关于如何使事情真正起作用的说明,例如1.将FreeDOS刻录到USB 2.将文件从ISO复制到USB分区。3。???
VasyaNovikov '16

3

事实证明,在安装程序的第一阶段,Windows XP实际上确实为特定的硬件配置进行了配置。

因此,如果将VirtualBox,QEMU等与实际硬盘驱动器结合使用的方法可行,那么您确实需要制作第二个硬件配置文件。我希望您可以通过在重新引导到第二阶段之前关闭VM来关闭虚拟机,然后将您的真实计算机引导到其中并让其为您的真实硬件配置。但是它在第一阶段而不是第二阶段为硬件配置。

因此,我绝对建议您模仿Rufus。只需复制文件并进行一些调整即可。请参阅现有帖子。无需处理第二个硬件配置文件。即使您创建了第二个硬件配置文件,您如何引导至Windows在第二个配置文件下安装用于实际硬件的驱动程序?而且,如果您确实找到了一种方法,那么许可会不会阻止您(它只是针对硬件)?


1

看看UNetBootIn。这应该可以解决问题。


8
我无法使其适用于Windows XP,它无法启动Windows安装程序

2
您是否可以发布Windows XP可以实现的参考(官方或其他方式)?您或您认识的人从事这项工作吗?我已经尝试过几次但都失败了,我想知道在再次尝试之前是可能的。
安南

1

只是大叫一声,但是...

尝试VirtualBox怎么办?您可以下载Windows XP iso文件,将其安装并安装虚拟机。我认为您也可以在那里访问USB驱动器,因此您可以从那里制作USB启动驱动器。


不幸的是,它并没有真正起作用-请参阅其他答案
jpalecek

1

由于您没有使UNetbootin正常工作,因此请使用Windows计算机的朋友(他们并不稀缺,您知道:)为您准备带有WinToFlash的USB记忆棒。


我已经尝试过了,但是失败了,在某个时间获得了BSOD
注册用户

注意:WinToFlash是专有的。(没有可用的资源,它们包含“专业”版等内容)。
VasyaNovikov

0

也可以从DOS安装32位XP。您只需要制作一个DOS可引导闪存驱动器或其他硬盘驱动器。将i386文件夹复制到其上,然后:

C:> cd i386
C:\ i386> winnt / b
现在Windows安装程序将从您的FAT16 / FAT32 DOS可启动驱动器加载!

如果从安装时使用的同一硬盘驱动器引导,则可以使用该选项将其转换为NTFS。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.