为什么 mkntfs 需要这么长时间?

为什么 mkntfs 需要这么长时间?

在 FreeBSD 12.0 下,该命令mkntfs -Q /dev/da3s1(带有快速格式化标志)仍然需要非常对于 1 TB 硬盘驱动器来说,需要很长时间(几个小时后还没有完成)。

它给出以下警告:

The partition start sector was not specified for /dev/da3s1 and it could not be obtained automatically.  It has been set to 0.
The number of sectors per track was not specified for /dev/da3s1 and it could not be obtained automatically.  It has been set to 0.
The number of heads was not specified for /dev/da3s1 and it could not be obtained automatically.  It has been set to 0.
Cluster size has been automatically set to 4096 bytes.
To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
Windows will not be able to boot from this device.
Creating NTFS volume structures.

如何获得与 Windows 类似的快速格式化速度?

答案1

这是由于ublio库中的错误(端口的直接依赖sysutils/fusefs-ntfs) - 有一个开放的漏洞为其报告。

我最近遇到了同样的问题,我使用的解决方法不太优雅 - 重新安装sysutils/fusefs-ntfs,但禁用UBLIO支持。然后您就可以运行mkntfs来格式化您的设备。在 1TB 上,速度会很快 - 不知道与 Windows 下本地执行相比如何,但它完成了,这是对无限期挂起的改进!

如果您想在 FreeBSD 下安装 NTFS 设备,您需要重新安装sysutils/fusefs-ntfs,但UBLIO要启用,否则驱动器上的 IO 性能会非常差。您可以在路径上的某个位置以不同的名称mkntfs创建不支持的二进制文件的副本UBLIO,这样在重新安装后,如果需要,您仍然可以使用它UBLIO

答案2

解决方法(来自提到的错误的最后评论) 是在创建时显式设置分区的大小:

查看分区/驱动器:

gpart show

销毁分区/驱动器:

gpart destroy -F da3

创建 GUID 分区方案:

gpart create -s GPT da3

创建分区类型 (ntfs) 并添加大小(字节,使用“g”代表 GB):

gpart add -t ms-basic-data -s 4000g da3

如果有人能告诉我如何获得确切的可用尺寸,那就太好了

该驱动器需要 NTFS 文件系统并执行快速格式化:

mkntfs --verbose --fast --label 4TB_HD /dev/da3p1

这对我有用

答案3

刚刚遇到这个问题,但是fusefs-ntfs-2017.3.23的pkg-message建议我们阅读/usr/local/share/doc/ntfs-3g/README.FreeBSD

当前实现无法正确处理大小不是 UBLIO_BLOCKSIZE 倍数的分区(无法读取/写入最后一个簇)。例如,由于这个原因,您可能无法创建 ntfs 文件系统

UBLIO层通过环境变量进行配置

NTFS_USE_UBLIO - 1. 禁用它会大大降低性能。

UBLIO_BLOCKSIZE - 262144 (256KB)。较大可以提高大文件的读/写速度,较小可以使文件系统操作(创建、删除、移动、查找(1))执行得更快。

所以可能的解决方案是:

  1. 禁用 UBLIO 层(并减慢 NTFS 速度)。不需要重新编译任何东西。做就是了

    setenv NTFS_USE_UBLIO 0
    

    (csh) 或

    NTFS_USE_UBLIO=0
    

    (sh/bash) 在此终端中运行任何 ntfs 工具之前。

  2. -或- 调整 UBLIO_BLOCKSIZE。分区大小必须是 UBLIO_BLOCKSIZE 的倍数。以与 1 相同的方式设置此变量。

  3. -或- 调整分区大小。分区大小必须是 UBLIO_BLOCKSIZE 的倍数,默认为 262144。顺便说一句,我认为在现代 Windows (Vista+) 下分区的介质上不可能遇到此错误,因为 Windows 总是创建大小为 1048576 字节倍数的分区

相关内容