技术解析

如何优化 Linux 下 ntfs-3g 读写机能?
0
2021-07-02 19:18:18
idczone
因为 /分区太小,所以只能把一些文件移到 ntfs 分区,很无奈。
/分区采用的是 ext4 。
先是在 /分区上新建一个 qcow2 文件,用于一个 kvm 虚拟机。
然后用 qemu-kvm 启动这个 qcow2 镜像并安装 win2003 r2 。
测得 win2003 的开机时间为 30 秒(从 BIOS 到桌面)。
但是将这个 qcow2 复制到一个 NTFS 分区并用 kvm 启动 NTFS 分区上的 qcow2 时,却悲剧了,不仅启动极慢,连打开一个开始菜单都要等。
NTFS 是商业产品,不知是稳定性原因还是因为微软的法律威胁,一直没有进入 Linux/BSD 的内核,只能在用户态运行,所以,效率肯定极差,反正我是从来不在 Linux/BSD 下用 NTFS 的,非要跟 Windows 交换数据,就用 VFAT 。
也不知为嘛, VFAT 同样也是微软的,却可以进入内核。

刚刚试了下 发现用 VMware 启动原有 NTFS 上的 VMware 虚拟机依旧很快,估计是 VMware 对 NTFS 做了优化。

又用 cp 和 KDE 文件管理器试了下复制这个 2.5GB 的 QCOW2 文件,
NTFS->EXT4 和 EXT4->EXT4 (复制到不同的目录)所用的时间只差 2 秒。
网上也有文章说 NTFS-3G 的性能已经比较好了 ...

我是在 tty 下用 qemu 手动启动的 KVM 。

全硬盘都 EXT4 ,给虚拟机直接用文件作此盘。
或者,全盘都 LVM ,如此,可以给部分虚拟机用 LVM 卷了。

ntfs3g 有商业版本,快很多

编译内核,里面有 ntfs 支持,或许效率高一些,没证实过。
不过一般的发行版大概不会编译入这个支持的

可以用 ufsd 替代 ntfs-3g

如果是多系统的个人桌面机,可以在 win 下把 ntfs 分区单独划出来一部分(比如 pq 之类无损分区软件),在 linux 里格式化成 ext4 并挂载

为什么复制文件的速度都差不多但是跑 KVM 虚拟机就差这么远?

Paragon 我记得有在 Linux 下的商业 NTFS 软件

如果对 I/O 性能有要求,除了上面说的 NTFS 驱动的问题,可能还需要考虑磁盘镜像格式和 QEMU 模拟的磁盘设备的类型。 qcow2 因为要实现 copy on write 的特性,在读写时需要维护额外的数据结构,必然会影响吞吐量 (特别是在你的 qcow2 镜像还依赖与另外的 base image 的时候),可以考虑用 qemu-img 转换成 raw 格式。 qemu 默认通过 -hda 参数创建的磁盘设备是模拟真正的磁盘设备,也会有额外的开销,可以考虑使用 virtio block 设备 (-device file=disk_image,if=virtio),注意要在 guest windows 里先装好 virtio 的驱动。

记得很久以前( 3 年?大概。。。)装个 qemu kvm 的 windows 2008 虚拟机, IO 的性能很差,磁盘和网络的 IO 都很差。结果发现需要在 windows 上安装 kvm 磁盘驱动和网卡驱动。。。装完就飞快了。

后来用 dd 试了下,原来在 Linux 下 NTFS 读取快但写入很慢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服