我知道之前有人问过类似的问题,有很多关于在 SSD 上安装 Windows XP 的信息。
我可以理解 Windows XP 不是为 SSD 设计的,它是在 SSD 之前发布的,因此没有修剪功能,并且 XP 会向磁盘进行大量写入。
经过所有这些搜索和阅读,我明白了为什么 Windows XP 不应该安装在 SSD 上。虽然有些人声称 SSD 具有如此多的写入周期,这并不重要,但我对此不太相信。
说到点子上了。我读过一篇博客,上面说,如果你的操作系统支持 trim(现在几乎都支持),你可以将 Windows XP 安装为虚拟机客户机。但仅此而已,他们没有详细说明这一点。所以我想问,这是真的吗?
或者最好找到一个 2.5 英寸的 HDD,将其连接到我的主板,然后将 Windows XP 客户机指向该 HDD?
以防有人想知道为什么。我正在做一项在 Excel 2010 中构建的工作 - VBA 密集型(是的,很多年前构建的),并且许多 VBA 代码调用在 Windows XP Pro 上构建的 Win32 API。
答案1
如果你的操作系统支持 trim(目前几乎所有操作系统都支持),你可以将 Windows XP 安装为虚拟机客户机
我想说这基本上是一个错误的说法(我的意思是,TRIM 将由在 VM 磁盘映像上执行的文件删除触发)。某些虚拟机管理程序可能会将完全为零的写入块转换为 TRIM 命令,但文件删除通常不会触发零填充(而只是对文件系统元数据进行修改)。此外,这种转换需要主机操作系统的支持。(我认为 Linux 上的 qemu 可以实现这一点,因为您可以使用 fallocate 在文件上触发部分 TRIM,但我不太确定 Windows 在其块层中是否有类似的功能。)
不过,我想说不要太担心 TRIM。有了现代 SSD 中的耗损均衡机制,TRIM 可能并不像很多人想象的那么重要/关键。
特别是对于你的情况,在主机系统上启用 TRIM 应该确保始终有足够的未映射除非存储真的满了,否则它不会恢复。因此,即使对于虚拟机执行的写入,磨损均衡也会生效。换句话说,即使通过映射的 LBA 进行覆盖也不应该导致在后台对同一内存进行就地写入。(当 LBA 映射到其他内存时,映射的旧内存将被垃圾收集,因为显然它上面的数据不再被视为“有用”,这就是为什么你实际上不需要 TRIM全部覆盖。你真正需要的是有一个未映射的内存池,允许磨损均衡工作。)
如果您正在为虚拟机使用专用驱动器(无论是否采用直通方式),您可能需要考虑过度配置 - 确保一堆 LBA 未映射且永远不会被映射。这可以通过创建一个保持未格式化和 TRIM 的分区来实现。(您可以提前 TRIM 整个驱动器,或者如果该分区是通过缩小现有分区获得的空间创建的,则只 TRIM 该分区。可以blkdiscard
在 Linux 上完成。请确保在正确的驱动器/分区上运行它,因为它将擦除其上的数据。)(我不知道具体多少才算足够,但除非空间真的很紧张,否则就给它几 GB 就行了。)
话虽如此,有传言称大多数驱动器在后台都实现了过度配置,因此可能根本不需要自己进一步保留一些未映射的空间。
答案2
您的操作系统支持 trim(目前它们都支持 trim),您可以将 Windows XP 安装为虚拟机客户机。
这取决于您的虚拟磁盘配置。
如果您使用的是由 SSD 中的文件支持的虚拟磁盘映像,即使主机操作系统支持 TRIM,问题在于磁盘映像仍将被视为脏的。从主机系统的角度来看,磁盘扇区仍被客户系统占用。因此,如果客户机不支持 TRIM,则删除客户机操作系统上的文件时磁盘映像不会缩小。
主机系统将 TRIM 覆盖的扇区,但主机系统不知道 TRIM 客户机未 TRIM 的脏块。
如果您的虚拟磁盘设置为 IDE/SATA 直通,则主机操作系统不会以任何方式干扰该接口。客户操作系统将负责进行任何需要进行的调整。
答案3
SSD 会磨损。无论如何,SSD 都会进行磨损均衡。TRIM 只是一种减少磨损并使磨损均衡更有效的方法。TRIM 只是一种方法,过度配置是另一种方法。如果我们需要使用非修剪操作系统,我们可以通过留出更多过度配置的空间来在一定程度上弥补这一点。
问题是,SSD 需要“空闲块”来存储新数据。换句话说,假设 LBA 1000 保存了文件的一部分,您更新了文件,现在 SSD 必须为 LBA 1000 找到一个新位置。它通过找到一个空闲位置、在那里写入新数据并将该位置“映射”到 LBA 1000 来实现这一点。它现在知道之前映射到 LBA 1000 的位置可以被擦除,因此它成为未来数据可用空闲位置的一部分。
修剪
现在假设我们删除了占用 LBA 1000 的文件。这是一个 OS/文件系统级别的操作,SSD 无法知道它现在可以擦除映射到 LBA 1000 的位置。这就是 TRIM 的作用所在。TRIM 是一个“命令”,它允许 OS 告诉 SSD“我已经完成了 LBA 1000 的操作”,因此 SSD 现在可以主动准备分配给 LBA 1000 的位置以用于未来的数据。
无TRIM
如果没有 TRIM,SSD 唯一“知道”其映射到 LBA 1000 的位置上的数据发生了什么事情的方式就是我们再次写入它。因此,在 Windows 中,您创建一个新文件,它最终被写入 LBA 1000,就操作系统而言,它是空闲的(映射到 LBA 1000 的群集是空闲的)。由于我们写入新数据,SSD 将新位置映射到 LBA 1000,并且先前的位置现在可供垃圾收集器使用,垃圾收集器将擦除它并使其可用于未来的数据。
就其本身而言,不使用 TRIM 方法并不存在根本问题。但是,缺少 TRIM 会导致出现一堆 OS 知道可用而 SSD 不可用的位置。
问题
这可能会成为一个问题:SSD 无法像我们迄今为止所说的那样直接擦除斑点。它只能同时擦除属于同一擦除块的一堆斑点。
因此,LBA 1000 处的位置可能会被丢弃,因为操作系统会删除此位置的数据,而 LBA 1001 处的位置则不会。如果两个位置恰好位于同一个擦除块中,那么 LBA 1001 包含有效数据而 LBA 1000 不包含有效数据这一事实将导致 LBA 1000 无法擦除。SSD 首先必须将数据从 LBA 1001 移到另一个位置。
换句话说,SSD 需要“呼吸”空间,来移动数据,整合已使用的位置和未使用的位置,以便擦除后者并为新数据做好准备。呼吸空间越少,SSD 就需要移动更多空间来整合空闲擦除块和正在使用的擦除块。移动次数越多,磨损就越严重。
过度配置
TRIM 是为 SSD 提供空间的一种方式,而过度配置是另一种方式。过度配置只是意味着留出一些位置。如果我们有 1000 个 LBA 位置,并且我们留出其中的 10%,我们将始终拥有 10% 的喘息空间。代价是,我们现在只有 900 个 LBA 位置可供操作系统写入和使用。
请注意,SSD 已预留了一定比例的可用容量用于超额配置,无论。
使用带有非修剪操作系统的 SSD
由于 XP 不会“修剪”,我们可以通过增加为 SSD 留出的空间来创造更多的空间。一些 SSD 附带了执行此操作的工具(通过创建所谓的 HPA),因此这是实现此目的的一种选择。
本质上,您只需在 SSD 上留出一些未分区的空间即可实现相同的目的。所以我的建议是这样的:
- 如果 SSD 不是全新的,我们可能首先会告诉它使用类似 Windows 的 DiskTrim 之类的工具来修剪整个磁盘空间 -https://github.com/tenox7/disktrim。
- 现在,在安装过程中或提前对驱动器进行分区,但保留 20% 的空间。是否要牺牲更多空间取决于您,如果您愿意,可以保留 40% 的空间。
- 安装 Windows XP。
答案4
运行它就行了。没有虚拟机,它不会有帮助。没有什么大问题——你永远不会必需的使用 TRIM 使驱动器正常工作。这样做有利于提高性能,对使用寿命也略有好处,但即使是杂乱的现代 SSD 也会比 Windows XP 预期的任何速度都快,即使开发工作量很大,我也怀疑您在未来 10 年内任何时候都不会达到驱动器的 TBW 限制。您需要移动大文件或运行数据库,因为写入量是一个大问题。
但您的基本的OS 并不意味着您永远不能 TRIM。例如,您可以每月启动一次 Linux live-USB,安装 Windows 驱动器(如果默认情况下尚未执行此操作),fstrim
在其上运行命令,等待其完成,然后重新启动。这只是例行维护的短暂休息,有点像以前运行碎片整理程序(请注意,不要运行碎片整理程序,它会让事情变得更糟而不是更好)。