我有一个 CentOS 7 系统,其中根文件系统是 XFS(使用 创建ftype=0
,这是安装系统时的默认 CentOS 设置)。不幸的是,Dockeroverlay2
存储驱动程序要求使用 创建文件系统ftype=1
:
https://docs.docker.com/storage/storagedriver/overlayfs-driver/#prerequisites
因此,现在我想用 重新创建根文件系统ftype=1
。我考虑按如下方式执行此操作:
- 启动某种类型的救援映像。
xfsdump
根文件系统 (FS) 至远程位置。- 使用 重新创建根文件系统
ftype=1
。 xfsrestore
来自远程转储的根 FS。
不过,我不确定的一件事是输出是否xfsdump
包含与设置相关的任何内容。也就是说,在具有不同设置的 XFS 文件系统上ftype
执行此操作会有什么问题吗?xfsrestore
ftype
或者有没有更好的方法来解决这个特定问题(不涉及重新安装整个系统、重新分区等)?
答案1
我提出的方法似乎效果不错。以下是我的程序:
- 启动进入
CentOS-7-x86_64-LiveGNOME-1804.iso
。 - 打开一个终端并
sudo -s
。 - 扫描 LVM 卷:
vgscan
- 更改为适当的卷组(
centos
就我而言):vgchange -ay centos
- 扫描该组中的逻辑卷:
lvscan
- 为根文件系统 (FS) 创建挂载点:
mkdir /mnt/root
- 挂载根FS对应的逻辑卷:
mount /dev/centos/root /mnt/root
- 转储至远程主机:
xfsdump -J - /mnt/root | ssh <host> 'cat >/data/rootfs.dump'
- 卸载根文件系统:
umount /mnt/root
- 重新创建根文件系统:
mkfs.xfs -f -n ftype=1 /dev/centos/root
- 挂载重新创建的根文件系统:
mount /dev/centos/root /mnt/root
- 从远程主机恢复:
ssh <host> 'cat /data/rootfs.dump' | xfsrestore -J - /mnt/root
- 重启。一切都应该和以前一样,除了
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 警告或错误。我不知道这是否有必要,但错误消失了。