出于测试或管理目的,有时可能需要重置系统磁盘的状态,使其无法启动并且数据不再易于访问,例如测试安装过程或阻止任何操作系统从某个操作系统启动和引导。下次启动时使用外部安装介质。特别是对于消费类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系统中“重置”系统磁盘的状态呢?
显然,从不同的磁盘启动很容易,但这需要更长的时间,而且由于上述原因,这可能是不可能的。
UEFI 系统对此有不同的解决方案:
“BootNext”变量允许操作系统请求启动到不同的操作系统 - 这就是当您按住 Shift+重新启动并选择“选择另一个操作系统”选项时 Windows 使用的变量;在大多数系统中,这将具有“USB 可移动媒体”等通用选项。
或“操作系统指示”标志,请求在下次启动时打开固件设置屏幕,可以使用
shutdown /r /fw
Windows 或systemctl reboot --firmware
Linux 进行设置。执行的操作只是常规文件写入,因此它可以由任何可以写入文件的程序复制(包括以 windows
dd
命名的程序,或另一个程序,或 Cygwin 中的“dd”)。dd
实际需要的是相当于Windows 上的 /dev/sda 等设备文件,并且该文件存在于所有 Windows NT 版本(包括 Win11、WinXP 等)中 - 程序可以打开
\\.\PhysicalDrive0
它并向其中写入字节。\\?\Device\Harddisk0\DR0
(如果我正确理解了两个命名空间之间的关系,这是 的别名。)因此,您可以下载适用于Windows和Windows的dd ,也可以通过十六进制编辑器
dd if=garbage.txt of=\\.\PhysicalDrive0
打开物理磁盘并手动编辑。但你
dd of=/dev/sda bs=512 count=1
只是覆盖了MBR,大多数系统不再关心MBR;他们从 MBR之后的GPT 分区表中读取分区(总共 34 个扇区,加上磁盘最末尾的备份副本),并且从分区内加载引导代码,而不是像过去那样从 MBR 加载引导代码。因此,您需要删除更多内容,并且使用sgdisk等分区工具来实现此目的可能更容易。最新版本的 Windows(10、11)具有多层保护,可防止直接修改正在运行的系统使用的磁盘或分区。直接访问
\\.\PhysicalDrive0
将会失败,以及像diskpart这样的高级工具。至少有两个免费的第三方工具可以实现此目的。
HxD,图形编辑器。以写入模式打开相关磁盘(默认为只读),并将磁盘的前 65536 字节填充为零。
Cygwin 是从 Unix/Linux 世界移植到 Windows 的 GNU 和开源工具的集合。Cygwin 将 Windows 磁盘映射到类似 Linux 的设备。以 Windows 管理员身份启动 Cygwin 并运行:
这两种解决方案都会擦除分区表、MBR 或 GPT,从而阻止系统在下次重新启动时启动。