使用 ms-sys 或 dd 从 Linux 创建可启动的 Windows 7 USB 驱动器有哪些麻烦?

使用 ms-sys 或 dd 从 Linux 创建可启动的 Windows 7 USB 驱动器有哪些麻烦?

我一直在阅读一些网页和帖子(这里和其他论坛),关于如何从 Linux 创建 Windows 7 安装 USB 媒体(用于安装 Windows 7)

我在 TechNet 上询问了这个问题,并得到了一个回复,其中包含有关如何操作的一般信息:

“我个人对 Linux 不是很熟悉,但基本上你需要做的就是......无论你以何种方式做,都是这样的:

  1. 格式化 USB 闪存驱动器(fat32 或 ntfs),创建一个足够大的分区来承载 Windows 安装(64 位大约 3GB,32 位大约 2.5GB),并将该分区标记为活动/可启动。由于这可以在 Windows 上完成,但也可以像 gparted 这样的工具一样,您应该能够在 Debian 中执行相同的操作。

  2. 创建该分区后,挂载您下载的 iso,并将从根目录开始的所有文件复制到 USB 闪存驱动器的根目录中。

这就是全部内容了。”

我在很多地方找到了另一种方法,它与 TechNet 上提到的方法几乎相同。但是,这种方法似乎缺少一个步骤和/或我不确定是否必要的步骤。

dd并不总是有效。基本上,缺少的步骤是将正确的启动扇区写入 USB 驱动器,这可以通过 Linux 使用 完成ms-sys。这适用于 的零售版Windows 7

以下是完整的概述,请参阅 serverfault 问题更多细节:

  1. 安装微软系统
  2. 检查您的 USB 媒体被分配了什么设备(fdisk -l)这里我们假设它是/dev/sdb
  3. 删除所有分区,创建一个占用所有空间的新分区,将类型设置为 NTFS,并将其设置为可启动:

    cfdisk /dev/sdb

  4. 创建 NTFS 文件系统:

    mkfs.ntfs -f /dev/sdb1

  5. 安装 iso 和 usb 介质:

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

  6. 复制所有文件:

    # cp -r /mnt/iso/* /mnt/usb/

  7. 将 Windows 7 MBR 写入 USB 驱动器:

    # ms-sys -7 /dev/sdb

  8. 确保写入已被刷新(请耐心等待,这可能需要几分钟):

    # sync

  9. 打开 gparted,选择 USB 驱动器,右键单击文件系统,然后单击“管理标志”。选中“启动”复选框,然后关闭

...您就完成了。

问题

  • 如果不执行最后一步,USB 是否应该可以工作# ms-sys -7 /dev/sdb?还是要使 USB 可启动?是否仅将分区标记为可启动?

  • 使用 rsync 不是更好吗cp -r

  • 所有这些步骤都必须按 进行吗root?如果不是,我是否需要将chmod所有文件664chown用于安装 USB 设备和 ISO 映像的所有目录复制到 ?我认为将数据复制为 更容易,root并且不会影响数据。

  • 有没有人尝试过这种方法或者类似的方法,比如复制 iso dd

答案1

ms-sys命令很重要。使用-7选项创建与 Windows 7 兼容的启动扇区在您的闪存驱动器上。

你不能使用 dd,因为 ISO 使用如下 ISO 文件系统自定义函数或者ISO9660,而你的 USB 驱动器仅正确支持以下磁盘文件系统ext3、FAT32 或 NTFS

使用 rsync 而不是 cp -r 会更好吗?

不是。cp -r运行得很好。只是要意识到 NTFS 处理权限的方式与 Linux 不同,因此使用 rsync 来保持一切完好无损并不重要。真正重要的是ISO 中的文件位于 USB 上然后引导扇区已正确格式化,使用ms-sys -7

如果需要,您可以以 root 身份执行所有步骤。真正需要 root 权限的只有 2 个步骤,即mkfs和 2mount

如果您以 root 身份遇到权限问题,则可能需要使用ntfs-3g /dev/sdb1某些 Linux 发行版安装您的 USB,因为某些 Linux 发行版仅为 NTFS 提供只读驱动程序。

答案2

我已经尝试使用 dd(dd if=/file/win7.iso of=/dev/sdb),但没有作用。

我让它发挥作用的步骤:

  • 安装 ms-sys
  • gparted 创建分区,并创建 NTFS 文件系统。

然后应用以下命令:

# mount -o loop win7.iso /mnt/iso 
# mount /dev/sdb1 /mnt/usb
# cp -r /mnt/iso/* /mnt/usb/*
# ms-sys -7 /dev/sdb*

相关内容