VeraCrypt 分区速度较慢吗?

VeraCrypt 分区速度较慢吗?

我刚买了一个新的外置硬盘。我想用 VeraCrypt 在上面创建一个加密分区。我对一个类似的硬盘做了同样的事情。我刚刚将一个文件复制到它上面,速度大约是 100 MB/s。另一个硬盘在加密后的速度要低得多,可能只有 10 MB/s。但我不知道硬盘的原始速度是多少。

这是否意味着加密分区比未加密的分区更慢,即使在安装后也是如此?它是否在复制时实际上加密了新复制的文件,从而大大减慢了复制操作的速度?

答案1

我对 USB 3.1 Gen 2 Type C 硬盘(能够以 10Gib/s 的速度写入,也就是略高于 1GiB/s)进行的测试是:

  • 使用 TrueCrypt、veraCrypt、DiskCryptor 或任何其他加密会使读写速度变得更慢,我得到的最好结果是 100MiB/s 左右(未加密的十分之一),因此加密会使速度慢十倍。
  • 在非加密的情况下复制一个巨大的文件(超过 600GiB 的文件),花费不到 10 分钟),复制大量非常小的文件(启用写入缓存)的速度相同,请注意,在没有写入缓存的情况下写入如此大量非常小的文件需要很长时间,也就是说速度会下降到 1KiB/s(是的,千字节),所有这些测试都没有加密。
  • 使用 VeraCrypt 加密后,速度无法达到 1GiB/s,而是下降到 100MiB/s 左右,CPU 不够快,它有 64 个核心(我稍后会解释如何改进它)...但是,复制小文件会使速度下降到接近 1KiB/s,并且启用了写入缓存...这是 VeraCrypt 的错...似乎它不允许缓存 Windows 看到的 NTFS,而 Windows 只能缓存对 HDD 本身的写入。

哦,是的,我非常幸运,我可以拥有(仅几天)一块带有 4 个插槽和 4 个微处理器的主板,每个微处理器有 16 个内核,所以总共有 64 个内核...还有 RAM,哇!RAM 分为 4 个部分,共 32GiB,每个部分靠近每个处理器插槽,每个部分有 4 个存储体,每个存储体上有 2GiB RAM,4 个部分 *4 个存储体/部分 *2GiB/存储体 = 32GiB...这是我接触过的最快的 PC。

换句话说:

  • Windows 已启用写缓存(针对 USB 设备),如果未加密,该缓存将大大提高小文件的写入速度。
  • VeraCrypt 似乎不允许 Windows 缓存对 NTFS 的写入,因为没有办法启用/禁用此类缓存,并且小文件写入非常非常慢。

我曾经测试过其他加密软件(非常昂贵),它可以模拟整个 SAS 控制器(是的,串行 SCSI),还可以模拟连接到它的整个 HDD...因此在 Windows 上您可以启用和禁用其写入缓存...使用该软件写入小文件的速度与写入大文件一样快(如果在 Windows 上启用了此类写入缓存)。

我正在谈论 Windows 写入缓存,因此我将为不知道如何操作的人解释如何启用/禁用它:

  1. 打开资源管理器并转到可以看到已安装分区的根文件夹的位置,C:,D:等。
  2. 选择其中任意一个,右键单击并转到属性。
  3. 转到硬件并选择列表中的设备(这是 VeraCrypt 的问题,它没有创建虚拟控制器)。
  4. 单击“属性”按钮。
  5. 在“常规”选项卡上单击按钮来更改配置。
  6. 现在转到标签以获取指令。
  7. 您可以选择快速提取(关闭写入缓存)或更好的性能(打开写入缓存)。

请记住,如果写入缓存已打开,请不要在未通知您可以安全弹出它的情况下拔下电源...在要求安全删除之后。

嗯,该缓存仅影响在设备上完成的写入操作,因为该设备是物理设备,它意味着写入 HDD 的加密数据,而不是写入 NTFS 结构的未加密数据。

那么会发生什么?Windows 在没有写缓存的情况下写入 NTFS 结构,然后 VeraCrypt 进行加密(是的,管道化)并将加密数据发送到 HDD,然后 Windows 看到设备已打开写缓存,因此等待一段时间以写入数据...但修改 NTFS 结构是在没有缓存的情况下完成的...所以实际上 Windows 要求 VeraCrypt 在短时间内多次加密相同的结构(当写入小文件时)...所以 VeraCrypt 必须多次加密将放在磁盘的同一群集上的内容。

与未加密相比,这会导致速度大幅减慢。

这该怪谁呢?部分原因是 Windows NTFS 不缓存结构更改,部分原因是 VeraCrypt 不模拟设备。

VeraCrypt (来自 TruCrypt 等) 的这种工作方式会导致其他罕见的问题,例如 SmartDefrag 无法查看和整理其上的文件 (Piriform Deflagger 可以,因此 SmartDrefrag 上的算法可能很糟糕)... 另外 BootIce 将它们视为 IFS: 而不是 HD#: 或 RM#:... 一些分区管理应用程序甚至无法看到它,等等。

另一个副作用(对于 Linux 用户):实际上,如果您在 Windows 上尝试,则无法将 VeraCrypt 分区格式化为 Ext4...至少我尝试过的所有允许创建(我的意思是格式化)Ext4 分区的分区工具都看不到 VeraCrypt 设备(这是很正常的,因为 VeraCrypt 不模拟设备)。

在所有这些之中...对于某些备份(在 Windows 上),我仍然使用启用了压缩的 VeraCrypt 和 NTFS...并且我没有启用物理设备写入缓存(没有意义),为什么我要缓存加密数据的写入...我想缓存 NTFS 修改,而不是发送到 HDD 的数据...VeraCrypt 为此使用了良好的写入缓存,那么为什么要双重缓存...可怕的部分是 Windows 不会在 RAM 上缓存 NTFS 更改,只缓存发送到磁盘的“集群”。

如果你认为将 veraCrypt 加密引擎放在更低的层(最接近 HDD 物理写入)会有所收获……那就错了!问题是这样的:

  1. 要求将一个小文件写入 NTFS
  2. 在 Dir 中搜索空条目(在 RAM 中)
  3. 在 Dir 上写入新条目(在 RAM 中)
  4. Windows 检查设备写入缓存(VeraCrypt 不模拟设备,因此无法查阅,因此解释为没有写入缓存)
  5. 由于 Windows 认为(非加密部分)没有写缓存,因此将 DIR 簇发送到 HDD
  6. VeraCrypt 会拦截该操作并进行加密(如果在不久的将来会重写相同的集群,则这是不必要的,就像在同一个文件夹中写入大量小文件时发生的情况一样)
  7. VeraCrypt 将加密数据发送到 HDD
  8. Windows 检查设备(这次是真实的,因此可以查阅)并查看写入缓存是否打开(或关闭)
  9. 如果已打开,它不会将“加密”群集写入物理磁盘,而是等待一会儿
  10. 转到步骤 1 以获取下一个文件

这就是问题所在...步骤 5 和后续步骤...如果 NTFS 具有写缓存,则它们将无法完成...但 VeraCrypt 没有提供该级别缓存的选项...要做到这一点,它需要模拟整个设备。

因此,发生的情况是,存储文件文件夹列表的群集会被多次发送到 VeraCrypt,每个文件一个;而不是在目录中设置所有文件后仅发送一次。

简而言之:问题在于多次加密相同的文件夹列表...认为它是在你写完每个字母后加密整个文本,而不是在你写完之后加密整个文本...这会使事情变得非常慢(当在短时间内对同一个文件夹进行大量更改时,比如添加大量小文件)。

更不用说,这个问题还会影响文件删除......将一万多个文件放在未加密磁盘上的文件夹中(打开了写入缓存),删除它们花费不到一秒钟(如果关闭了写入缓存,则需要一个多小时),现在执行同样的事情,但是对分区进行加密并打开写入缓存(是的,已激活),删除这么多的文件会导致对文件夹文件列表进行一万次加密,在同一个磁盘上也需要花费很多时间(非常接近没有加密也没有写入缓存的情况)。

因此,总体来说:加密会使操作变得更慢,不仅是由于 CPU 速度慢或其他进程的 CPU 使用率高等原因,还因为 NTFS 结构更改缺少写入缓存,这会导致对存储在同一位置的信息进行多倍加密。

希望我可以让某些人了解加密...并希望 VeraCrypt(我见过的安全性最好的)能够在加密之前激活 NTFS 写入缓存...这很容易做到,只需对任何群集进行稍微不同的加密,并且如果在结束之前对该群集进行了另一次写入,则忽略以前未加密的数据...因此加密只进行一次...换句话说...加密之前的动态缓冲区。

不好的部分是...断电、突然关机等...会使丢失的信息的大小更大...就好像你使用没有电池的 1GiB 缓存的 HDD 等...这总是速度之间的竞争或确保写入完成...我更喜欢速度,让我来解释一下为什么......

如果复制一百万个小文件(都在同一个文件夹中;Windows 真的讨厌这样,建议您这样做)只需要 10 分钟(在所有级别都打开写入缓存)而不是一周(在所有级别都关闭写入缓存)...自己算一下...该数据是真实的时间,是我在过去对 NTFS 系统进行的异常测试中获得的(FAT32 速度要快得多)。

计算如下:只需要通电十分钟和需要通电一整周的风险各是多少?我会丢失多少数据?如果缓存打开,我可能会丢失 1/600 的数据(或多或少);如果缓存关闭,我只会丢失当时正在处理的文件...但在这两种情况下,我都需要进行比较(完全比较,因为文件名可以在目录中,但内容可能不同),因此我需要几乎相同的时间来确保所有内容都已正确复制...我宁愿浪费 10 分钟,也不愿花一周时间进行比较,看看遗漏了什么或内容不同,等等。

一般来说,如果宽松对你来说不是一个选择……一开始你就不会使用 Windows,也不会使用 FAT32、NTFS 等……至少会使用 Linux 和 Ext3/4(日志记录)和发电机等。

因此,请 VeraCrypt 尽快将该写入缓冲区放入 NTFS。

最后说明:FAT32 受到相同概念的影响...不仅是 NTFS...它是 Windows 在创建或删除文件时要求目录更改的方式。

进行此测试以查看速度如何...在 lop 中创建一万个零大小的文件...注意前 100 个所用的速度/时间,以及中间或结尾处另外 100 个所用的时间...您真的会看到每分钟一个文件(在一些速度不是那么高的 CPU 中)...啊!在 ramdrive 上执行此操作(以确保 HDD 不会影响速度)。

现在要完成了...我忍不住在 Linux 上做了同样的测试(在驻留在 VeraCrypt 卷上的 Ext4 分区上)...记住在 Linux 上所有都是设备...所以 VeraCrypt 向内核呈现了一个设备...所以写缓存可以在两个级别上打开,Ext4 级别和物理集群写入...并且默认情况下,Linux 始终启用它们。

在 Linux 中它确实飞起来......正如应该做的那样,因为写入缓存已打开,在两个设备上,一个通常安装在 /media/veracrypt# 上,另一个是物理 /dev/sd$#(如果谈论加密物理分区)。

但是,嘿,VeraCrypt 没有针对 Ext4 更改的写入缓冲区,不,只有 Linux 才有这个...而且更重要的是... 只要有另一次写入,未将某些内容发送到磁盘的时间段就会被重置;一些 Linux 有一个上限,并且会将超过该上限的数据发送到磁盘,但是其他 Linux 不会并且多年都不能将数据发送到磁盘,例如,当一个集群每秒写入两次,即全年的每一秒,那么这一年的集群就永远不可能被写入物理磁盘。

因此在 Linux 上,Linux 不会多次发送文件夹列表(如果在短时间内对其进行了更改,例如在同一个文件夹中创建大量文件、复制时等),因此 VeraCrypt 只会在所有文件都设置在文件夹文件列表中之后进行一次加密...等等。比在添加每个文件后加密整个目录文件列表要快得多。

思考完毕:Windows 讨厌 Linux,Linux 喜欢...或者不是,Linux 往往会在断电时丢失大量信息,比 Windows 要多得多...只是因为它有写入缓存...哪个更好?速度?还是安全的写入?花 10 分钟复制所有内容,还是一个星期?有些人喜欢一个,其他人喜欢另一个...这取决于你。

但至少,我希望我已经澄清了为什么将大量小文件复制到加密容器(磁盘、分区、文件等)会如此之慢(当然是在 Windows 中),而复制到未加密的物理设备则不会如此之慢。

答案2

现代 CPU 非常快... 即使是上一代支持硬件 AES 的 AMD FX-8350 使用 VeraCrypt v1.19 AES-256 也能达到 5Gb/s 的速度。

第二个 USB 驱动器很可能无法发挥更好的性能。例如,它可以是 USB 2.0 驱动器。

无论如何,我建议花一些时间进行并行测试。您将获得更多信息。也许您将能够帮助其他人。

答案3

为了进一步完善迄今为止所说的内容:

与其他一些解决方案相比,VeraCrypt 似乎在性能方面存在严重缺陷(这里这里)。所引用的页面主要标题为“...SSD...”,但内容描述了使用传统 HDD 和更复杂配置(RAID/等)时性能下降的多种情况。严重情况似乎由于(A)次优编码或(二)VeraCrypt 社区的安全配置决策。本帖的其余部分是关于 (b)。

重要的提示在比较可用的不同解决方案之前,必须考虑、研究和规范一些重要参数:

  1. 其他解决方案所取得的性能提升可能是因为它们(几乎?)将加密操作完全转移到了设备本身,这是很坏尤其是在最近的一些报道之后。参见来自微软。所披露的研究主要集中于 BitLocker,但其他一些解决方案可能也在做同样的事情。
  2. 更重要的是,正如其他人指出的那样,较低的安全边际可能是部分/大部分性能改进的原因(例如更少的默认哈希迭代、更小的默认密钥长度、操作模式等)。

相关内容