BTRFS 是一种非常先进的支持写入时复制(COW)的文件系统, 支持 可写快照 , 内建磁盘阵列 , 透明压缩 等许多高级特性, 其写时复制特性在修复文件数据方面比传统就地修改的文件系统有着极大的优势. 但是, 就是由于 写时复制 这一特性 [1], 导致了在 BTRFS(和其他的 COW 文件系统) 下, torrent 在下载时出现的明明已经下载完了, 但是当重新打开下载软件或者检查文件完整性时, 发现文件总是下载不全的问题(具体细节不清楚).


目录

曾经在使用 opensuse 的时候就出现了这一问题, 当初还以为是 openSUSE 的原因…知道了问题所在, 就可以解决问题了.

1. 预分配空间

在通常的 torrent 下载软件中, 可以设置 pre-allocation, 预先分配整个文件大小, 如 transmission 就是在 配置文件中加入 "preallocation":2. 这可以减少文件碎片化, 但是对问题影响不大.

2. 禁用下载目录的 COW

更有效的方法是, 禁用下载目录 (通常是 home 下的 Dowloads文件夹) 的 写时复制功能, 让 torrent 就像在通常的文件系统中下载一样.

1
chattr -R +C /home/user/Downloads

需要注意的是[2], Downloads 需要是空目录, 这样才能保证所有写入的文件的完整性, 如果当前有文件, 不能保证当前文件的稳定性. 所以最好就是预先清空整个目录.


想当初因为这个而弃用了 openSUSE, 无知者不怪…



  1. 1.http://ram.kossboss.com/torrenting-cow-filesystems-btrfs-zfs/
  2. 2.https://wiki.archlinux.org/index.php/Btrfs_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)