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 (简体中文)
准备
备份系统资料,烧录 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逻辑卷而不缩小分区。