题 如何从Linux制作Windows 7 USB闪存介质?


我有:

  • ISO映像 Windows 7安装媒体
  • 4 GB USB闪存盘
  • 没有DVD驱动器
  • Linux安装

102
2018-05-09 22:50




如果你能成功完成所有工作 这些任务 从您的Linux桌面,你将摇摆房子。我认为最棘手的部分是摆弄Windows'Diskpart所做的所有操作。使分区标记为“活动”和“启动”,“主要”等。 - p.campbell
我认为GParted(gparted.sourceforge.net)可以处理所有分区标志就好了。参见例如 gparted.sourceforge.net/screenshots.php 。我还没有测试,但看起来rsync可以替代该清单中的robocopy。 - Matthew Flaschen
关于同一个问题,有许多详细的答案 askubuntu.com/q/289559/135671 - erik


答案:


好的,在尝试了这里提到的所有方法失败后,我终于开始工作了。基本上,缺少的步骤是将一个正确的引导扇区写入USB记忆棒,这可以通过Linux来完成 ms-sys 要么 lilo -M。这适用于Windows 7零售版。

这是完整的破坏:

安装ms-sys - 如果它不在您的存储库中,请获取它 这里。或者,确保安装了lilo(但是 不要 如果是,请在本地邮箱上运行liloconfig步骤Grub安装在那里!)

检查USB媒体分配的设备 - 这里我们假设它是 /dev/sdb。删除所有分区,创建占用所有空间的新分区,将类型设置为NTFS(7),并记住将其设置为可启动:

# cfdisk /dev/sdb  要么  fdisk /dev/sdb  (划分 7型,和 启动 旗)

创建一个NTFS文件系统:

# mkfs.ntfs -f /dev/sdb1

写Windows 7 MBR 在USB记忆棒上(也适用于Windows 8),这里有多个选项:

  1. # ms-sys -7 /dev/sdb
  2. 或(例如,在较新的Ubuntu安装上) sudo lilo -M /dev/sdb mbr (信息
  3. 或者(如果安装了syslinux),您可以运行 sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdb

安装ISO和USB介质:

#mount -o loop win7.iso / mnt / iso
#mount / dev / sdb1 / mnt / usb

复制所有文件:

# cp -r /mnt/iso/* /mnt/usb/   ...或使用系统的标准GUI文件浏览器

呼叫 sync 确保写入所有文件。

打开gparted,选择USB驱动器,右键单击文件系统,然后单击“Manage Flags”。检查启动复选框,然后关闭。

......你已经完成了。

毕竟,您可能需要备份USB介质以进行进一步安装并删除ISO文件...只需使用dd: # dd if=/dev/sdb of=win7.img

注意,这会复制整个设备! - 通常(大大)比复制到它的文件大。所以我建议

# dd count=[(size of the ISO file in MB plus some extra MB for boot block) divided by default dd blocksize] if=/dev/sdb of=win7.img

例如,有8 M额外字节:

# dd count=$(((`stat -c '%s' win7.iso` + 8*1024*1024) / 512)) if=/dev/sdb of=win7.img status=progress

与往常一样,在使用时请仔细检查设备名称 dd

上面介绍的创建可启动USB的方法也适用于Win10安装程序iso。我尝试运行Ubuntu 16.04将Win10_1703_SingleLang_English_x64.iso(大小4,241,291,264字节)复制到8 GB USB记忆棒上 - 仅限非UEFI [非安全]启动。执行后dd报告:         8300156 + 0条记录         8300156 + 0记录输出         复制了4249679872个字节(4.2 GB,4.0 GiB),412.807 s,10.3 MB / s

如果/下次要将Windows 7安装程序置于USB上,则反转。


179
2017-08-04 15:38



很高兴提到在cfdisk中使用的数字分区类型(7,86,87?) - Johan Dahlin
它适用于7型 - Ropez
请注意:如果您的ntfs文件系统在以root用户身份写入时发出奇怪的权限错误,请确保已安装ntfs-3g。 - Jeremy Salwen
我直接尝试了这个硬盘驱动器,一旦我从它启动,我得到错误“windows无法访问安装源”。 - Jeremy Salwen
呼叫 sync 复制后确保写入所有文件 - Nicolas Dusart


如果您的PC支持UEFI,并且通过扩展名支持GPT磁盘,则可以使用dd完成此操作。

打开一个终端,你需要找到你的pendrive设备。如果您已安装驱动器,则可以通过键入“mount”并查看其条目来查找设备的名称。类似于以下内容:

/dev/sdb1 on /media/USBDISK type vfat (rw,nosuid,nodev,uhelper=hal,uid=1000,utf8,shortname=mixed)

在这种情况下,/ dev / sdb的第一部分安装在/ media / USBDISK上。打开root shell并卸载驱动器。

umount /dev/sdb1

转到ISO存储在根shell中的目录,并键入以下内容:(将windows7.iso替换为调用iso的任何内容,将/ dev / sdb替换为usb stick的设备ID)。

dd if=windows7.iso of=/dev/sdb

如果您的主板支持从pendrive启动,它应该能够启动它。这将使pendrive上的安装程序不是操作系统本身。


13
2018-05-11 14:28



对我不起作用。
您的主板是否支持从USB启动?这将是这种方法是否有效的最终决定因素。 - TrueDuality
对我来说也不起作用,我的机器确实支持USB启动。也许这种方法可以在可以启动DVD式USB存储的机器上运行,但是大多数BIOS都假设USB上的HDD式布局(意味着512字节MBR,其中包含启动代码)。值得一提的是:与W7不同,Fedora CD / DVD映像实际上有这样的MBR,它们带有启动代码和分区表,使它们也适用于HDD / USB启动。 - Tronic
这确实需要您的主板能够启动USB-CDROM而不仅仅是USB-HDD - TrueDuality
这个解决方案缺少MBR安装步骤,除非神奇地存在,否则通常不会起作用。 @Gunthers的解决方案已经完成。 - stolsvik


PCambell的建议很好但你也想清除MBR,linux等价物如下

我试过这个并且它有效(我不知道为什么dd方法失败但似乎分区必须是ntfs?):

  • 找出哪个/ dev / device是你的usb闪存驱动器并卸载它
  • 清除MBR:dd if = / dev / zero of = / dev / device bs = 446 count = 1
  • 运行fdisk / dev / device
  • 删除所有分区并创建1个主分区,使其可引导,然后保存更改
  • 运行mkfs.ntfs / dev / device1(分区1)
  • 将windows install iso的全部内容复制到您创建的分区上

5
2018-03-27 08:24





代替

dd if=windows7.iso of=/dev/sdb

你写的是 root

dd if=windows7.iso of=/dev/sdb1 

(最后添加1或放置USB驱动器的任何位置。)


-4
2017-12-22 18:20



不,根据之前的答案,of = sdb是正确的。 - James Broadhead
这是完全错误的。 - lukad
-1: dd 需要写入设备,而不是分区 - ssc