解决Aria2报错17问题

具体来说,是在Linux系统上运行Aria2下载文件到NTFS格式磁盘时,报错17:fallocate failed. cause: Operation not supported。

省流:挂载方式调成ntfs3内核级驱动(如果Linux内核版本在5.15以上)。

起因

之前刚把Aria2的崩溃不重启问题解决好,反手又给我一个大逼兜:下什么文件都提示Error17:fallocate failed. cause: Operation not supported.

关于Fallocate预分配

这里的fallocate指的是Aria2下载文件时的文件预分配方式。通过文件预分配,Aria2可以提高文件写入效率,减少磁盘碎片。

Aria2主要具有三种预分配方式,falloc,trunc与prealloc。从语义上分析这三者压根儿不像是在同一选项里的东西,只有falloc指的是一种预分配方式,trunc是调整文件大小的操作(似乎也能用来预分配空间?),而prealloc指的是预分配这件事本身。但是存在即合理,这些问题就先抛开不谈。

文件的预分配方式可以在aria2.conf里调(默认位于/etc/aria2),将上述三个选项(包括none)填入file-allocation后面就行。

预分配所需时间: none < falloc ? trunc < prealloc

其中falloc和trunc需要文件系统和内核支持。

根据网上的建议,NTFS建议使用falloc;EXT3/4因为文件系统特性支持,建议trunc;MAC会自动分配,需要注释此项。

网上筛了一圈,好像是Linux下NTFS文件系统的挂载不支持Fallocate预分配导致的。但是我使用的是Ubuntu,平常开SMB访问也都没有问题,咋就突然说不行了?
反正没什么损失,就试试看切换一下。

修改过程

据搜索,有两种驱动可以选择,一是ntfs-3g,社区自研的用户级NTFS驱动。二是ntfs3,在Linux5.15版本内核中新加入的内核级NTFS驱动,理论上来讲无论是兼容性、速度还是可玩性都是ntfs3较好的。由于我使用的是Ubuntu Server 24.04.1,内核版本是6.8.0,因此可以直接使用ntfs3来挂载硬盘。检查内核版本命令如下:

uname -r

因为我不大喜欢老是挂载来卸载去的,上手就直接改/etc/fstab然后重启看看。

sudo vim /etc/fstab

我的电脑上只挂了一块NTFS的盘,所以很好辨认是哪块盘:

# /disks/hdb1 was on /dev/sdb2 during curtin installation
/dev/disk/by-uuid/FA98F86794F828B1 /disks/hdb1 ntfs defaults 0 1

左边的by-uuid指的是使用硬件的uuid挂载,能够避免换顺序导致挂载失败或错位。
我就瞅这个ntfs,大半天也没想出来Ubuntu搞什么幺蛾子整出来原生NTFS挂载的。搜了半天,很可能是Ubuntu自带一个ntfs-3g,然后改名成ntfs了。

开改!按i进入编辑模式,光标移动到ntfs后面,输入3。最终结果如下:

/dev/disk/by-uuid/FA98F86794F828B1 /disks/hdb1 ntfs3 defaults 0 1

Esc,冒号wq以保存并退出,输入sudo reboot now重启。
重启之后,看一下挂载,一切正常:

df -h
Pixpin 2025 02 14 15 05 20

上AriaNG下一个文件试试,也能正常下了。

上一篇
下一篇