ExFAT文件系统

有时候我需要在不同操作系统间通过U盘或移动硬盘交换文件,此时U盘/移动硬盘的文件系统选择就需要考虑跨平台以及是否支持大文件,长文件名等。我最初选择的是 VFST/FAT32 ,但是发现现代系统中,超过4GB的文件比比皆是,会导致兼容性问题。

ExFAT优势

ExFAT 文件系统是目前跨操作系统兼容的选择:

  • macOS支持ExFAT文件系统,Linux内核早期铜鼓FUSE支持,而内核5.7之后原生支持,所以使用非常方便

  • 超越 FAT32/VFAT ,已经 没有单个文件4G限制 ,这对现代的大文件交换非常有利

Gentoo使用ExFAT

  • 内核5.7及以上,可以直接安装 sys-fs/exfatprogs 软件包,包含了维护工具:

Gentoo Linux 上安装 sys-fs/exfatprogs
emerge --ask sys-fs/exfatprogs

文件复制

tar

当采用 tar 结合管道来同步数据,我通常使用:

使用 tar 结合管道复制文件
sudo chown huatai:staff /data/docs
(cd /home/huatai/docs && tar cf - .)|(cd /data/docs && tar xf -)

但是 ExFAT 文件系统不支持 uid/gid 这样的属主属性,此时会大量报错:

ExFAT 文件系统不支持 uid/gid 这样的属主属性
...
tar: ./ebook/xxx.epub : Cannot change ownership to uid 502, gid 20: Operation not permitted
tar: ./ebook/xxy.epub : Cannot change ownership to uid 502, gid 20: Operation not permitted
tar: ./ebook/xxz.epub : Cannot change ownership to uid 502, gid 20: Operation not permitted
...

解决的方法是在使用 tar 归档时将 ownergroup 都设置成 0 ,并且使用 --no-same-owner --no-same-permissions 参数

tar 命令归档时忽略文件属主
(cd /home/huatai/docs && tar --owner=0 --group=0 --no-same-owner --no-same-permissions -cf - .)|(cd /data/docs && tar -xf -)

参考