XFS 相对于 EXT4 拥有更多新颖的特性且在处理大量文件时效率更高
参考资料:XFS vs EXT4 ,为什么CENTOS 7.0开始选择XFS作为默认的文件系统?XFS相比ext有什么优点?,Ext4 vs XFS – Which one to choose?
NOTE:鉴于 XFS 无法缩小分区大小,为保证灵活性,建议使用 LVM
前设环境:Arch Linux 系统,LVM+EXT4 磁盘管理方案
技术参考:Change Root File System from Ext4 to Xfs on Archlinux,XFS (简体中文),LVM (简体中文)
Table of Contents
准备
备份系统资料,烧录 Arch Linux Live 环境
准备文件系统
重启到 Live 环境
缩小 EXT4 逻辑卷
压缩 Ext4 分区
参考:无损调整EXT4分区大小
e2fsck -f /dev/<volume_group>/<physical_volume>
# 检查需要调整的分区,EXT4 工具规定必须先行执行
resize2fs /dev/<volume_group>/<physical_volume> 300G
# 调整分区文件系统到 300G
缩小 LVM 逻辑卷
lvresize -L 300G /dev/<volume_group>/<physical_volume>
# 修改逻辑分区为 300G
为 XFS 分区创建 LVM 逻辑卷
参考:创建逻辑卷(LV)
lvcreate -L 300G <volume_group> -n <xfs_physical_volume> # 创建一个 300G 的逻辑卷
mkfs.xfs /dev/<volume_group>/<xfs_physical_volume> # 格式化逻辑卷为 XFS 文件系统
移动数据
NOTE:请勿使用 cp 进行数据拷贝,因为cp
会更改setuid位并遵循硬链接。
使用 tar 拷贝所有文件
挂载 XFS 分区与 EXT4 分区tar -cf - <EXT4_mount_path> | ( cd <XFS_mount_path> ; tar -xpvf - )
PS: 可以使用 pv 以查看具体状态
因为 tar 复制无法包含 SELinux label (如有)、ACL和 xattr,请使用 rsync 工具进行文件复制。
参考:How can a filesystem be copied exactly as is?
rsync -aviHAXKhPS <EXT4_dir> <XFS_dir>
配置系统
更新 GRUB2 配置
挂载根目录分区、EFI分区
mount /dev/<volume_group>/<xfs_physical_volume> /mnt # 挂载 XFS 分区
mount /dev/<EFI_Partition> /mnt/boot/efi # 挂载EFI分区
arch-chroot /mnt # 进入 chroot 环境
重新确认 swapfile
如果你使用 swapfile 进行系统休眠,请重新配置 GRUB2 相关项
重建 GRUB2 配置
grub-mkconfig -o /boot/grub/grub.cfg # 重建 GRUB2 配置
更新 Fstab 文件
退出 chroot 环境
genfstab -U /mnt >> /mnt/etc/fstab # 更新文件
vim /mnt/etc/fstab # 删除/注释 旧的 EXT4 分区挂载点
检查系统
重启,检查是否正常进入系统
检查 XFS 文件系统状态
sudo xfs_scrub / # 在线检查错误
sudo xfs_db -c frag -r / # 检查磁盘碎片
NOTE:如果发现任何错误,请立即进入 Live 环境离线修复
xfs_repair -v /dev/<volume_group>/<xfs_physical_volume>
检查错误日志
journalctl -p 3 -xb
错误处理
LVM 无法挂载
lvm vgchange -ay # 激活所有 LVM 组
mount /dev/mapper/YOUR_LVM_NAME /new_root # YOUR_LVM_NAME 填写你的 LVM 组名
exit # 退出救援模式,进入系统
XFS 无法进行碎片整理
进入 Live 系统尝试修复文件系统
mount /dev/<volume_group>/<xfs_physical_volume> /mnt # XFS 文件系统规定必须挂载一次文件系统
umount /mnt
xfs_repair -v /dev/<volume_group>/<xfs_physical_volume> # 修复
尝试碎片整理
mount /dev/<volume_group>/<xfs_physical_volume> /mnt # 碎片整理必须挂载分区
xfs_db -c frag -r /dev/<volume_group>/<xfs_physical_volume> # 检查磁盘碎片
xfs_fsr /dev/<volume_group>/<xfs_physical_volume> # 整理磁盘碎片
XFS 挂载失败
参考:mount: Structure needs cleaning. How to repair without losing data?
进入 Live 系统尝试修复文件系统
mount /dev/<volume_group>/<xfs_physical_volume> /mnt # XFS 文件系统规定必须挂载一次文件系统,因文件系统损坏,挂载必定失败
xfs_repair -v -L /dev/<volume_group>/<xfs_physical_volume> # 强行清除日志并修复(极有可能丢失文件)
NOTE
XFS 无法缩小分区,但请不要尝试只缩小LVM逻辑卷而不缩小分区。