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 fstrim
和man 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)授权。