使用 `ftype=1` 重新创建 XFS 文件系统

使用 `ftype=1` 重新创建 XFS 文件系统

我有一个 CentOS 7 系统,其中根文件系统是 XFS(使用 创建ftype=0,这是安装系统时的默认 CentOS 设置)。不幸的是,Dockeroverlay2存储驱动程序要求使用 创建文件系统ftype=1

https://docs.docker.com/storage/storagedriver/overlayfs-driver/#prerequisites

因此,现在我想用 重新创建根文件系统ftype=1。我考虑按如下方式执行此操作:

  1. 启动某种类型的救援映像。
  2. xfsdump根文件系统 (FS) 至远程位置。
  3. 使用 重新创建根文件系统ftype=1
  4. xfsrestore来自远程转储的根 FS。

不过,我不确定的一件事是输出是否xfsdump包含与设置相关的任何内容。也就是说,在具有不同设置的 XFS 文件系统上ftype执行此操作会有什么问题吗?xfsrestoreftype

或者有没有更好的方法来解决这个特定问题(不涉及重新安装整个系统、重新分区等)?

答案1

我提出的方法似乎效果不错。以下是我的程序:

  1. 启动进入CentOS-7-x86_64-LiveGNOME-1804.iso
  2. 打开一个终端并sudo -s
  3. 扫描 LVM 卷:vgscan
  4. 更改为适当的卷组(centos就我而言):vgchange -ay centos
  5. 扫描该组中的逻辑卷:lvscan
  6. 为根文件系统 (FS) 创建挂载点:mkdir /mnt/root
  7. 挂载根FS对应的逻辑卷:mount /dev/centos/root /mnt/root
  8. 转储至远程主机:xfsdump -J - /mnt/root | ssh <host> 'cat >/data/rootfs.dump'
  9. 卸载根文件系统:umount /mnt/root
  10. 重新创建根文件系统:mkfs.xfs -f -n ftype=1 /dev/centos/root
  11. 挂载重新创建的根文件系统:mount /dev/centos/root /mnt/root
  12. 从远程主机恢复:ssh <host> 'cat /data/rootfs.dump' | xfsrestore -J - /mnt/root
  13. 重启。一切都应该和以前一样,除了xfs_info /现在应该显示ftype=1

注意:我的xfsdump电话引发了以下形式的警告

xfsdump: WARNING: failed to get bulkstat information for inode 10485897

据一位似乎是 XFS 开发人员的人称(关联):

它们可以被忽略 - 它们是先前未链接的 inode,但仍部分存在于快照卷上,并且对于 xfsdump 用来提取快照中所有 inode 的 by-handle 接口可见。

答案2

我可以确认这对我也有效!谢谢。我xfs_admin -u /dev/centos/root在步骤 5 之后使用提取了原始 UUID。然后我xfs_admin -U UUID /dev/centos/root在步骤 10 之后使用。我执行的另一个步骤是在步骤 11 之后,我将 selinux 设置为 permissive ( setenforce 0),因为我的第一次尝试产生了 selinux 警告或错误。我不知道这是否有必要,但错误消失了。

相关内容