如何从正在运行的 Windows 重置系统磁盘的状态?

如何从正在运行的 Windows 重置系统磁盘的状态?

出于测试或管理目的,有时可能需要重置系统磁盘的状态,使其无法启动,数据也不再易于访问,例如,为了测试安装程序或防止任何操作系统在下次启动时从外部安装介质启动和启动。尤其是对于消费类 PC,在安装系统后很难停止正常启动过程,因为不清楚要按什么键(我见过 ESC、F2、F8、F9、F10、F11、F12、Enter)、怎么按(短按或长按)以及在什么时候按。一些类似平板电脑的型号甚至需要按下特殊键的组合,如电源或音量。此外,UEFI 系统的行为与非 UEFI 系统不同,这增加了复杂性。

一个快捷的方法是从正在运行的系统中删除分区表。

在 Linux 上,只需两个命令即可在几秒钟内轻松实现此目的:

sudo dd if=/dev/zero of=/dev/sda bs=512 count=32
sudo sync

这会导致 UEFI 和非 UEFI 系统在下次启动时都无法启动。这还会使磁盘上的数据更难访问,甚至可能导致数据丢失,请注意。

我不知道标准 Windows 系统上是否有任何与 dd 等效的功能。Windows 上的高级分区工具不允许这样做,例如使用 diskpart:

> select disk 0
> clean

Virtual Disk Service error:
Clean is not allowed on the disk containing the current boot, system, pagefile, crashdump or hibernation volume.

那么有没有办法从正在运行的 Windows 系统中“重置”系统磁盘的状态?

显然,从不同的磁盘启动很容易,但由于上述原因,这会花费更长的时间,甚至可能是不可能的。

答案1

安装系统后很难停止正常启动过程

UEFI 系统对此有不同的解决方案:

  • “BootNext”变量允许操作系统请求启动到不同的操作系统 - 这就是当您按下 Shift+reboot 并选择“选择其他操作系统”选项时 Windows 所使用的;在大多数系统中,这将具有“USB 可移动媒体”等通用选项。

  • 或“OS 指示”标志,请求在下次启动时打开固件设置屏幕,可以使用shutdown /r /fwWindows 或systemctl reboot --firmwareLinux 进行设置。

我不知道标准 Windows 系统上是否有任何与 dd 等效的东西。

执行的操作dd只是一个常规的文件写入,因此它可以被任何可以写入文件的程序复制(包括名为dd对于窗户, 或者另一个或 Cygwin 中的“dd”)。

实际上需要的是相当于设备文件例如 Windows 上的 /dev/sda,并且存在于所有 Windows NT 版本(包括 Win11、WinXP 等)中 - 程序可以打开\\.\PhysicalDrive0并向其写入字节。(如果我正确理解了两个命名空间之间的关系,这是的别名\\?\Device\Harddisk0\DR0。)

因此,您可以下载适用于 Windows 的 dd dd if=garbage.txt of=\\.\PhysicalDrive0,或者您可以通过十六进制编辑器并手动编辑。

但你dd of=/dev/sda bs=512 count=1只能覆盖 MBR,大多数系统不再关心关于 MBR;它们从 GPT 分区表读取分区,MBR(总共 34 个扇区,加上磁盘末尾的备份副本),它们从分区内加载引导代码,而不是像过去那样从 MBR 加载。因此,您需要删除更多内容,使用分区工具(例如磁盘为了这个目的。

答案2

最新版本的 Windows(10、11)具有多层保护,可防止直接修改正在运行的系统使用的磁盘或分区。直接访问\\.\PhysicalDrive0将失败,高级工具(如 diskpart)也是如此。

至少有两个免费的第三方工具可以实现这一点。

氢键,一个图形编辑器。以写入模式打开相关磁盘(默认为只读),并用零填充磁盘的前 65536 个字节。

赛格威,一组从 Unix/Linux 移植到 Windows 的 GNU 和开源工具。Cygwin 将 Windows 磁盘映射到类似 Linux 的设备。以 Windows 管理员身份启动 Cygwin 并运行:

$ cat /proc/partitions
major minor  #blocks  name   win-mounts

    8     0  41943040 sda
    8     1     51200 sda1
    8     2  41345575 sda2   C:\
    8     3    542720 sda3

$ dd if=/dev/zero of=/dev/sda bs=512 count=32

这两种解决方案都会擦除分区表、MBR 或 GPT,从而阻止系统在下次重启时启动。

相关内容