分类
ArchLinux

修改 EXT4 根目录文件系统为 XFS(Arch Linux)

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 ArchlinuxXFS (简体中文)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 拷贝所有文件

  1. 挂载 XFS 分区与 EXT4 分区
  2. 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 文件系统状态

参考: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 保留数据平滑替换(升级)物理磁盘

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逻辑卷而不缩小分区。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据