一、问题
在centos7.9启动docker 18.09.9报错:Error starting daemon: error initializing graphdriver: overlay2: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior. Reformat the filesystem with ftype=1 to enable d_type support. Backing filesystems without d_type support are not supported.
二、解决方案
在CentOS 7.9上启动Docker 18.09.9时遇到的错误提示表明,Docker的overlay2存储驱动需要XFS文件系统支持`d_type`功能。`d_type`是XFS文件系统的一个特性,它允许文件系统直接报告目录项的类型(比如普通文件、目录等),这对于Docker这样的容器运行时来说是很重要的。
如果您的XFS文件系统没有使用`ftype=1`选项格式化,那么您将看到上述错误。解决这个问题通常有两种方法:
方法一:重新格式化根文件系统(不推荐用于生产环境)
这涉及到数据备份、重新格式化以及恢复数据,风险较大,尤其是对于生产环境。步骤如下:
1. 备份所有重要数据。
2. 使用带有`ftype=1`选项的`mkfs.xfs`命令来重新格式化磁盘。
3. 恢复数据。
4. 重启Docker服务。
**注意**:此操作会导致数据丢失,请确保已经做好了完整的数据备份,并且清楚了解该过程的所有风险。
方法二:挂载一个新的XFS分区或使用其他支持`d_type`的文件系统
这个方法相对安全,适合大多数情况。您可以创建一个新的分区或者使用现有的分区,并将其格式化为XFS并启用`d_type`支持,然后更改Docker的数据根目录到新位置。步骤如下:
1. 创建一个新的分区(如果需要)。
2. 使用`mkfs.xfs -n ftype=1 /dev/your_partition`命令格式化新的分区。
3. 编辑Docker配置文件(通常是`/etc/docker/daemon.json`),添加或修改`"data-root": "/path/to/new/partition"`以指向新的分区。
4. 确保新的路径存在并且Docker有权限访问。
5. 重启Docker服务。
例如,如果您创建了一个新的XFS分区位于`/dev/sdb1`,您可能会这样做:
```bash# 格式化新分区
sudo mkfs.xfs -n ftype=1 /dev/sdb1# 创建挂载点
sudo mkdir /mnt/docker-data# 将新分区挂载到指定位置
sudo mount /dev/sdb1 /mnt/docker-data# 更新/etc/fstab以便开机自动挂载
echo '/dev/sdb1 /mnt/docker-data xfs defaults 0 0' | sudo tee -a /etc/fstab# 更新Docker配置
echo '{ "data-root": "/mnt/docker-data" }' | sudo tee /etc/docker/daemon.json# 重启Docker服务
sudo systemctl restart docker```
请根据实际情况调整命令中的设备名称和挂载点路径。完成这些步骤后,应该可以正常启动Docker而不再出现与`d_type`相关的错误。