![可以将特定文件移动到磁盘的开头吗?](https://linux22.com/image/517840/%E5%8F%AF%E4%BB%A5%E5%B0%86%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E7%A3%81%E7%9B%98%E7%9A%84%E5%BC%80%E5%A4%B4%E5%90%97%EF%BC%9F.png)
可以将特定文件移动到磁盘开头吗?我想将虚拟机磁盘文件(虚拟磁盘)移动到磁盘开头以提高磁盘访问性能。我认为这是可能的,因为一些碎片整理软件使用此技术将系统文件移动到磁盘开头。我想要的是一种实用的方法(脚本或程序)来做同样的事情,但移动我选择的文件。
答案1
答案2
我认为最好的方法是在单独的物理硬盘的开头创建一个逻辑磁盘。有些程序可以移动现有分区并在磁盘开头创建一个新分区(谷歌搜索“partition magic 免费替代品”)
答案3
正如 Dennis 所说,您可以使用 MyDefrag 脚本来完成此任务。无论如何,我认为您必须将文件移动到磁盘末尾以提高性能。
答案4
一些 HDD 的第一个圆柱体位于内部,因此每次旋转存储的数据较少,因此下部圆柱体的速度较低。
大多数现代 HDD(据我所知,所有带有停放头的 HDD)使用相反的方式,第一个圆柱体位于外部,因此每次旋转可存储更多的数据,因此外圆柱体的速度更快。
这是基于 HDD 以恒定 RPM 旋转的概念,但并非所有 HDD 都以这种方式工作。
我拥有一个非常昂贵的 HDD,它可以同时将每个磁头移动到不同的磁柱,因此可以同时从不同的磁柱读取数据,并且它使用的内部缓冲区不是 8MiB 或 16MiB,而是使用完整的 GigaByte 缓冲区。磁盘速度非常快,以至于 Sata III 控制器限制了传输持续速度……物理磁盘可以进行 10GiB/s 的读取(从表面到缓冲区)和 6GiB/s 的写入(从缓冲区到表面)。
因此,将文件放在哪里的问题很简单,进行区域速度测试(读取和写入),这样您就会知道将文件放在哪里更好。
请注意,有些新型 HDD 使用另一种技术来“伪造”不同柱面的速度...它们会交换柱面和磁头,因此,如果您要求它写入整个柱面,它将仅使用一个磁头和许多柱面,这样,所有柱面的速度或多或少是均匀的,因此,它们会“伪造”大多数工具来对速度进行基准测试(速度似乎在整个磁盘上都是恒定的),而真实的情况是,磁盘存储了外部要求在一个柱面中执行的操作,在多个柱面中,因此速度(每个外部要求的柱面)为:快、中、慢
这个技巧对于持续性能非常有用...如果复制大量 GiB 到其中,ETA(预计到达时间)计算得非常好,因为速度如下:快、中、慢、快、中、慢...所以媒体是恒定的...但它们实际上和正常媒体一样快...实际结束时间非常相似,不同之处在于您可以更好地计算完成所需的时间。
因此,正如我坚持的那样,进行精细的速度测试,然后将文件移动到您想要的位置。
如果您不打算在 Windows XP 或更低版本中使用 HDD,也不打算在电视、机顶盒等上使用 HDD...换句话说,在无法理解 GPT 分区的地方...最好创建一个包含 20 个或更多主分区的 GPT 方案,这样每个分区只能放置一个文件(大文件,当然是不会改变的文件,比如电影),分区将被填满到 99.99%,因此没有剩余空间...对于虚拟机 HDD,最好使用固定大小(而不是动态的),由于文件不会增长,因此使用与电影等相同的方法...我倾向于每个 Windows 系统分区虚拟 HDD 使用 20GiB。
如何做这样的事情(使 99.99%)并不容易,但按照以下步骤很容易...在 GPT 方案上创建一个非常小的 NTFS 分区(所需大小的 1/100)(这将使 $MFT 文件变得非常小),在它接近空时对其进行碎片整理,因此 $MFT 等将转到分区的开始,将分区扩大到所需的两倍(这不会改变 $MFT 文件大小),复制这样的文件(只有一个文件),对其进行碎片整理,将其缩小到最大值,这样 99.99% 就不是免费的了,然后将其移动到您想要的磁盘部分。
最好按顺序进行,从两侧到中间,逐一进行。
是的,工作量太大了...但我不知道有什么工具可以避免 Windows 移动文件。
是的,这是真的,我曾经看到 Windows 造成文件碎片,即使该文件无法访问...换句话说,放置、移动、增大一个文件,Windows 可以使同一分区上的任何其他文件产生碎片...我也曾尝试在低级别(使用系统帐户权限,即黑客攻击)将非碎片文件标记为不可移动,并且我看到此类文件在从另一个磁盘复制到该分区时产生碎片,而这个分区是一个非常高清晰度的文件...是的,这听起来很荒谬,一个不可移动的、没有碎片的文件会产生碎片,因为有另一个文件写入了同一分区...所以永远不要将文件放在有可用空间的分区上,并希望它永远不会产生碎片或移动到分区的另一部分...
我看到的唯一可以使文件不被移动/碎片化的技巧是将它放在自己的分区上,并且只能放在那个分区上... GPT 允许很多分区,但不是那么多(我认为限制是 128)。
是的,最大的问题是,如果只有大约 20 个字母可以自由使用,我该如何访问这样的分区……很简单,不使用字母,而是使用 \??\ 访问。
方法如下,创建一个快捷键,运行后无需参数即可获得start \\?\Volume{...}\
该部分。{...}
mountvol.exe
这也是访问 USB 记忆棒或存储卡上分区的一个非常好的技巧...Windows 只允许挂载(分配驱动器号)分区表上的第一个分区...但你可以用这个技巧访问其中任何一个,耶耶,至少在我测试过的地方是有效的,我朋友发消息说他们不能;显然我在 Linux 下使用 linux fdisk 创建了诸如 MBR 之类的分区方案并重写了“主控”,也就是创建一个新方案,我从不使用记忆棒上附带的那个方案,它们似乎是一个很好的 MBR,我更喜欢用 Linux fdisk 工具覆盖它,然后创建多个分区,格式化它们等...使用 fdisk + mkfs...或使用 GParted,永远不要在 Windows 上(它不允许你在 USB 记忆棒/存储卡上)并且不是所有的 USB 记忆棒都可以更改可移动位。
因此,使用 GPT 的技巧,将 NTFS 分区非常小,然后扩大到适合文件大小的两倍,放入文件,尽可能缩小,将分区移动到您想要的位置(在步骤之间对其进行碎片整理,直到缩小步骤,之后就不需要进行碎片整理了)。这对于大小不变的文件非常有用,无论它们是只读还是也写(对于 VirtualBOX,非动态 .VDI 文件是完美的)。
请记住,每个 NTFS 分区只有一个文件是一个大技巧,创建尽可能小的 NTFS 是另一个技巧,使 $MFT 非常小并且不会丢失/浪费空间)。
糟糕的是... 花时间放置每个文件,并通过 .lnk(快捷方式)进行访问,以打开资源管理器,start \\?\Volume{...}\
而不是分配字母。
更不用说在这样的 NTFS 上最好逐一删除“$Recycle.Bin”和“System Volume Information”:获取它的所有者(takeown /F ... /A /R /D [Y|S|... depends on language]
命令,查看 google 上的命令参数或通过 /? 调用它),然后删除它(RD /S /Q ...
命令),然后用记事本创建一个同名的文件(因此大小正好为零,因此它们适合 $MFT,所以不占用任何空间);这样 Windows 将无法重新创建这样的文件夹,如果你不想看到这两个零大小文件,请使用命令将它们标记为 +R +H +S attrib +R +S +H ...
,这样系统会认为它们是系统隐藏的只读文件,不会显示在资源管理器中(当然,如果选中了隐藏系统文件);不要忘记这些命令必须在管理控制台中运行。
希望现在您可以像我一样,将文件放在我们想要的磁盘部分,而不是 Windows 想要的或将来想要的位置,并确保它们永远不会再被移动或碎片化。