解决Ubuntu系统NTFS速度过慢的问题

2023-11-02 06:20

本文主要是介绍解决Ubuntu系统NTFS速度过慢的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 我的配置
  • 一、NTFS是什么?
  • 二、准备工作
    • 1.安装必要软件
    • 2.测试速度
      • 1.测试读速
      • 2.测试写速
  • 三、解决问题
    • 1.内核方案
      • 1.测试写速
    • 2.ntfs-3g方案
    • 3.ext4方案
  • 总结


前言

一般搞程序的哪有不用NAS的,当我尝试在Ubuntu上使用NTFS格式的SATA磁盘时,诡异的问题出现了,我在Windows11上测试速度时100MB+的磁盘,安装到Ubuntu-22.04之后就读取速度没有显著下降,写入速度变成了龟速。经过诸多研究终于有了眉目,最终也确实解决了我的问题,如果你也有同样的问题,不妨看看我的解决方案。


我的配置

CPU:4*Cortex-A53 1.5GHZ
OS:Ubuntu-22.04 Jammy
ARCH:aarch64
Network:1G Ethernet
Protocol:Samba


一、NTFS是什么?

NTFS(New Technology File System)是Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式,提供长文件名、数据保护和恢复,能通过目录和文件许可实现安全性,并支持跨越分区。

二、准备工作

准备一个512GB或1TB的SATA3硬盘,机械和SSD都行,实测两者都存在速度问题。

1.安装必要软件

sudo apt update
#ntfs需要
sudo apt install ntfs-3g
#查看磁盘属性和测读速
sudo apt install hdparm

2.测试速度

这里假如你只有一个sata盘,那就是/dev/sda了,第一个分区就是/dev/sda1,前提是你在windows11上提前格式化了。如果不是SSD,就不要选4K格式化,某些条件下导致在Windows上机械磁盘性能下降。选择默认即可。

Windows测速就不多讲了,方法太多了,下面讲讲Linux上测速,使用刚才安装的hdpram

1.测试读速

#不用选分区
sudo hdparm -tT /dev/sda
/dev/sda:Timing cached reads:   1774 MB in  2.00 seconds = 887.51 MB/secTiming buffered disk reads: 346 MB in  3.00 seconds = 115.18 MB/sec

上面的115.18MB是真实地速度,和我在Windows11上速度基本一致,略差一点点,这里不多讨论。

2.测试写速

#nas用大文件多,这里直接测大文件拷贝
dd if=/dev/zero of=<挂载路径> bs=1G count=1

测试出来速度19MB每秒,这简直惊天地泣鬼神。在Windows上还有100MB+,到了Linux上就变成19MB左右了。

一开始我以为是Cortex-A53能效核太弱鸡了,后来我测试了下EMMC能够达到100MB-200MB的速度,明显不是这个原因,至少不是主要原因。

三、解决问题

1.内核方案

这里要求5.15+内核版本,不出意外地话Ubuntu-22.04Ubuntu-20.04都是5.15+的内核,Ubuntu-18.04初始是5.4+的版本,总之,必须满足这个版本要求。

请看原因:
The Linux kernel already has a NTFS implementation, but it has severe limitations (like being read-only), which is why Linux users usually use the userspace ntfs-3g implementation. This release incorporates a new and fully functional NTFS implementation contributed by Parangon Software. This implementation supports NTFS file system versions up to 3.1, normal/compressed/sparse files and journal replaying, plus other features that will be added in the future.

归根结底还是5.15之前的NTFS驱动不行,5.15之后的内核改善了这个问题,这里我们不细究NTFS工作原理,也不细究为什么旧的内核实现速度慢,只解决问题。

下面是Linux内核官方说明,感兴趣的可以自行阅读下。

KernelNewbies: Linux_5.15

#获取磁盘的uuid
sudo blkid
#配置fstab,uuid是你的日用账号,每个人可能不一样,填你自己的就行了
UUID=<你的UUID> <你的挂载路径> ntfs3 defaults,uid=1000,gid=1000,force 0 0
#测试挂载,一定要做这一步
sudo mount -a
#查看挂载情况
df -h

如果成功挂载了,就没问题了,错误了仔细检查,切记写在/etc/fstab里面的配置必须是成功的,否则操作系统无法启动,可能会进入紧急模式,或者永远起不来。

1.测试写速

#nas用大文件多,这里直接测大文件拷贝
dd if=/dev/zero of=<挂载路径> bs=1G count=1
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 11.8799 s, 90.4 MB/s

还是比Windows11略差一丢丢,但是比前面的可是好太多了,就这样吧,不排除其它因素干扰,有时间再研究。

2.ntfs-3g方案

适合内核在5.15+以下的,或者不方便升级内核的。需要使用一个参数big_writes

#指定参数挂载
sudo mount -o big_writes /dev/sda1 <挂载路径>

成功了就对了,使用这种方式挂载写入速度可以提高3倍左右,有50+MB的速度,比起19MB已经很好了,运气好的甚至能提高到70+MB的速度以上,主要还是看环境。

3.ext4方案

如果你必须要在Windows和Linux之间来回导的话,你可能真得使用NTFS这种文件系统,ext4在Windows上不太好用。如果你只需要在Linux上使用,不需要接到Windows上,其实事情就简单了。Linux对ext4的支持就比ntfs好很多,你直接把磁盘格式化成ext4格式就行了。

这样,就不存在上面头疼的NTFS问题了。


总结

1、如果需要频繁在Windows和Linux之间切换就用前面的方法,如果长期稳定在Linux使用就使用EXT4文件系统。
2、理论上适合所有的Linux发行版,有问题请留言

这篇关于解决Ubuntu系统NTFS速度过慢的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328693

相关文章

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas