GNU/Linux文件系统配置


先来比较一下一些文件系统:
文件系统 日志 最大文件 最大文件系统 支持链接 支持透明压缩 含有专利 自由实现 推出年份 首先支持的系统 开发者 我使用过
ext4 Yes 16TiB 1EiB Yes No No Yes 2008 Linux Theodore Tso Yes
btrfs Yes 16EiB 16EiB Yes Yes No Yes 2010 Linux(OpenSUSE) 甲骨文 Yes
F2FS Yes 3.94TB 16TiB Yes No No Yes 2012 Linux Jaegeuk Kim Yes
XFS Yes 8EiB 8EiB Yes No No Yes 1993 IRIX SGI No
ZFS Yes 16EiB 很大 Yes Yes Yes(CDDL例外) 不兼容GPL 2005 OpenSolaris Sun(已被甲骨文收购) No
FAT32 No 4GiB 128GiB1 No No No Yes 1996 MS-DOS 微软 Yes
exFAT No 16EiB ? No No Yes(OIN许可) Yes 2006 WinME 微软 很少
NTFS Yes 2TiB 2TiB Yes Yes No ntfs-3g 1993 WinNT 微软 Yes
1:Windows格式化工具限制32GB
F2FS专门对闪存优化,适用于已经内置FTL表的闪存介质,不适合RAW Flash
我认为要尽量减少分区数量,这样移动文件可以很快,单个分区也有问题,就是担心文件系统损坏,重装系统时需要先备份,因此root分区和home分区应该分开。 swap分区当然也需要,我把swap分区放在root分区和home分区之间,以后root分区扩容时就能用上这片空间。 如果同时有SSD和HDD,为了启动快root分区当然要放在SSD,home分区也有一些软件和配置,我的电脑电脑只有两个SATA接口,有时候需要把2TB硬盘换成其他硬盘,我认为home目录放在SSD合适。 我还没有测试过文件系统性能,不清楚F2FS对固态硬盘的性能提升,在固态硬盘仍然使用ext4,我只在U盘上使用了F2FS
btrfs功能多,特别是透明压缩,我经常觉得硬盘不够,有些很容易压缩的数据,但又不希望每次解压才使用,就需要使用这个功能。我的2TB硬盘大部分空间都使用btrfs。

设置文件系统

如果你有SSD,那么应该开启TRIM,这能向主控报告未使用的块,主控会进行内部擦除(不一定立即擦除),以后可以直接写入,提高写入性能。
我发现Ubuntu和Trisquel系统装好后没有默认给SSD开启TRIM,使用sudo fstrim -an查看支持TRIM的分区,
/etc/fstab中的<options>字段(第四个参数)中添加discard进行实时TRIM。
使用sudo fstrim -av立即进行TRIM,使用sudo systemctl enable fstrim.timer开启定时TRIM,每周会执行一次。

/etc/fstab中的<pass>字段(最后一个,第六个参数)决定开机时执行fsck的顺序,root分区应该设为1,其他分区应该设为2,0表示不检查(swap分区就不用检查)
请看man 8 fstrimman 5 fstab来获取更多信息

迁移NTFS到Linux文件系统

我曾经使用过Windows操作系统,虽然目前把Windows系统分区都删除了,但还是留下一些储存数据的NTFS文件系统,
ntfs-3g对NTFS系统支持性没有像Linux文件系统那样好,听说微软没有公开标准,是通过是逆向工程得到的。我感觉是读取快但写入慢,不支持权限设置。
所以我想把文件从NTFS迁移到Linux文件系统,2023年8月18日到20日我删除了目前使用的设备上的最后一个NTFS分区,就是2TB硬盘上的那个

目前我没有找到通过转换元数据格式把NTFS转化成其他格式的工具,只能复制数据了。
一个简单的方法就是把NTFS中的文件拷贝到其他分区,然后删除NTFS分区。但是这需要有足够多的磁盘空间,但我只有一块大容量的2TB硬盘,而且比较满了。
另一种方式是多次移动文件并缩小NTFS分区,扩大btrfs分区。btrfs还支持多个device,可以使用一下,但我觉得不要创建太多。
先用baobab扫描一下NTFS分区,删除了一些不需要的大文件, 在NTFS分区目录,用`tar --zstd -cvf /path-to-backup/文件夹名.tar.zst 文件夹名`打包,
因为把整个NTFS分区打包压缩包太大了,硬盘存不下,所以把根目录下每个文件夹打成一个包,我还写了一个脚本自动批量压缩,以后再发吧。
zstd是比较新的算法,速度快,与其他软件相比同等速度下压缩率高,我采用zstd备份,
打包后最好保存一下哈希值,以便恢复前验证一下,打包后就可以把原文件删除了。
然后调整分区,分区移动是很耗时的,建议每次多移动一点,以减少移动次数,但缩小NTFS分区时也要留10%左右空间,有一次缩的太小就失败了
建议使用gparted调整分区,我在gparted日志里看到调整分区前会先检查分区和模拟一遍,以防错误。
提醒:操作前应该备份重要的数据,无论是待扩容还是待收缩的分区,以免导致重要数据丢失
8月18日ntfsresize提示了错误,让我用Windows下去用chkdsk /f修复,我用了一个WinePE U盘,我点了显示隐藏分区, 重启后home分区无法挂载,fsck提示超级块损坏,修复后文件都不见了,我用photorec恢复出一些文件,但没有目录结构,这次损失惨重。
其实更好的方法是使用LVM,免去移动分区的麻烦,但我没有使用LVM。
Copyright © 2023 徐瑞骏
本页面使用知识共享 署名-相同方式共享 4.0 国际协议(CC BY-SA 4.0)授权。