# Docker Storage Driver Failed: Troubleshooting and Resolution

Docker's storage driver manages how images and containers are stored on disk. When the storage driver fails, Docker won't start, containers won't run, or you'll see mysterious errors about layers and mounts. Understanding storage drivers is essential for debugging these issues.

Common error messages:

bash
failed to start daemon: error initializing graphdriver: driver 'overlay2' failed to initialize
bash
Error loading docker daemon: Failed to initialize storage driver overlay2
bash
failed to register layer: error creating overlay mount: too many levels of symbolic links
bash
devicemapper: Error running deviceCreate

Understanding Storage Drivers

Docker supports several storage drivers, each with different characteristics:

DriverRequirementsPerformanceUse Case
overlay2ext4 or xfs (ftype=1)BestModern Linux, recommended
devicemapperdirect-lvmGoodOlder systems, RHEL 7
btrfsbtrfs filesystemGoodSpecific setups
zfszfs filesystemGoodSpecific setups
vfsNonePoorTesting only

Check your current driver:

bash
docker info | grep "Storage Driver"

Diagnosis Steps

Check Current Storage Driver

bash
docker info -f '{{.DockerRootDir}}'
docker info | grep -E "Storage Driver|Backing Filesystem"

Check Filesystem Type

```bash df -T /var/lib/docker # Output: Filesystem Type # /dev/sda1 ext4

# For overlay2 on XFS, check ftype xfs_info /var/lib/docker 2>/dev/null || echo "Not XFS" ```

Check Daemon Logs

bash
sudo journalctl -u docker.service --no-pager -n 100 | grep -i "storage\|driver\|overlay"
sudo dockerd --debug 2>&1 | head -50

Check Disk Space and Health

```bash df -h /var/lib/docker # Must have space available

# Check for disk errors dmesg | grep -i error ```

Common Causes and Fixes

Cause 1: Overlay2 on Unsupported Filesystem

Overlay2 requires ext4 or xfs with ftype=1.

Symptoms: `` failed to initialize storage driver overlay2: backing filesystem doesn't support overlay

Diagnosis: ```bash df -T /var/lib/docker # If shows nfs, ntfs, or other unsupported filesystem

# Check XFS ftype xfs_info /path/to/docker # Look for ftype=1 in output # If ftype=0, overlay2 won't work ```

Fix 1: Use ext4 filesystem

```bash # Check current filesystem df -T /var/lib/docker

# If on unsupported filesystem, move Docker: sudo systemctl stop docker sudo mkdir -p /mnt/docker-ext4 # Format new partition with ext4 sudo mkfs.ext4 /dev/sdX sudo mount /dev/sdX /mnt/docker-ext4 sudo rsync -av /var/lib/docker/ /mnt/docker-ext4/ sudo mv /var/lib/docker /var/lib/docker.old sudo ln -s /mnt/docker-ext4 /var/lib/docker sudo systemctl start docker ```

Fix 2: Recreate XFS with ftype=1

bash
sudo systemctl stop docker
sudo mkfs.xfs -f -n ftype=1 /dev/sdX
sudo mount /dev/sdX /var/lib/docker
sudo systemctl start docker

Fix 3: Change storage driver

json
// /etc/docker/daemon.json
{
  "storage-driver": "vfs"
}
bash
sudo systemctl restart docker

VFS is slow but works anywhere. Not recommended for production.

Cause 2: XFS ftype=0 Issue

On RHEL/CentOS 7, XFS default is ftype=0, which doesn't support overlay2.

Symptoms: `` failed to initialize graphdriver: driver overlay2 not supported

Fix 1: Check current XFS settings

bash
xfs_info /
# Output includes: naming =ftype=0 (problem)

Fix 2: Use separate XFS partition with ftype=1

bash
sudo systemctl stop docker
sudo mkfs.xfs -n ftype=1 /dev/sdX
sudo mount /dev/sdX /var/lib/docker
sudo systemctl start docker

Fix 3: Use devicemapper instead

json
// /etc/docker/daemon.json
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.directlvm_device=/dev/sdX",
    "dm.thinp_percent=95",
    "dm.thinp_metapercent=1",
    "dm.thinp_autoextend_threshold=80",
    "dm.thinp_autoextend_percent=20"
  ]
}

Cause 3: Devicemapper Loopback Issues

Devicemapper using loopback files (default) is slow and problematic.

Symptoms: `` devicemapper: Error running deviceCreate Transaction commit failed

Diagnosis: ``bash docker info | grep -i "devicemapper|loopback" ls -la /var/lib/docker/devicemapper/

Fix: Set up direct-lvm

  1. 1.Create a dedicated block device:

```bash # Create LVM physical volume sudo pvcreate /dev/sdX

# Create volume group sudo vgcreate docker /dev/sdX

# Create thin pool sudo lvcreate --thinpool docker --extents 95%VG docker sudo lvcreate --thinpool docker --extents 1%VG docker ```

  1. 1.Configure Docker:
json
// /etc/docker/daemon.json
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.directlvm_device=/dev/docker/docker",
    "dm.thinp_percent=95",
    "dm.thinp_metapercent=1",
    "dm.thinp_autoextend_threshold=80",
    "dm.thinp_autoextend_percent=20"
  ]
}
bash
sudo systemctl restart docker

Cause 4: Overlay Mount Errors

Overlay mounts fail due to symbolic link levels or permission issues.

Symptoms: `` error creating overlay mount: too many levels of symbolic links failed to register layer: Error processing tar file

Fix 1: Clean up overlay directories

bash
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/overlay2/*
sudo systemctl start docker

Fix 2: Check for symlink loops

bash
find /var/lib/docker -type l -exec ls -la {} \; | grep circular

Fix 3: Rebuild Docker storage

bash
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/overlay2
sudo systemctl start docker

This removes all images and containers—re-pull needed.

Cause 5: Insufficient Disk Space

Storage driver can't allocate space for layers.

Symptoms: `` failed to create overlayfs: no space left on device

Fix: Free disk space

```bash # Check space df -h /var/lib/docker

# Clean Docker resources docker system prune -a

# Or move to larger disk sudo systemctl stop docker sudo rsync -av /var/lib/docker/ /mnt/larger-disk/docker/ sudo rm -rf /var/lib/docker # Update daemon.json with new data-root sudo systemctl start docker ```

Cause 6: Permissions on Docker Directory

Docker daemon can't access storage directories.

Symptoms: `` permission denied: /var/lib/docker/overlay2 failed to initialize graphdriver: permission denied

Fix: Correct permissions

bash
sudo chown -R root:root /var/lib/docker
sudo chmod -R 755 /var/lib/docker
sudo systemctl restart docker

Cause 7: Kernel Missing Overlay Support

Older kernels lack overlay filesystem support.

Symptoms: `` failed to initialize graphdriver: driver 'overlay2' not found

Diagnosis: ```bash # Check kernel modules lsmod | grep overlay modprobe overlay 2>&1

# Check kernel version uname -r # overlay2 requires kernel >= 3.18 ```

Fix 1: Load overlay module

bash
sudo modprobe overlay
# Make permanent
echo overlay | sudo tee /etc/modules-load.d/overlay.conf
sudo systemctl restart docker

Fix 2: Update kernel

```bash # Ubuntu/Debian sudo apt update sudo apt install linux-image-generic

# RHEL/CentOS sudo yum update kernel sudo reboot ```

Fix 3: Use alternative driver

json
// /etc/docker/daemon.json
{
  "storage-driver": "devicemapper"
}

Cause 8: Btrfs/ZFS Specific Issues

When using btrfs or zfs as storage driver.

Symptoms: `` btrfs: Failed to create subvolume zfs: Dataset creation failed

Fix 1: Check filesystem is mounted

bash
mount | grep btrfs
mount | grep zfs

Fix 2: Create proper subvolume/dataset

```bash # For btrfs sudo btrfs subvolume create /var/lib/docker/btrfs

# For zfs sudo zfs create -o mountpoint=/var/lib/docker rpool/docker ```

Changing Storage Drivers

Preparing for Storage Driver Change

Changing storage drivers requires removing all data:

bash
# Warning: This removes all images, containers, and volumes
sudo systemctl stop docker
sudo rm -rf /var/lib/docker

Configuring New Driver

json
// /etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "data-root": "/var/lib/docker"
}
bash
sudo systemctl start docker
docker info | grep "Storage Driver"

Validating the Change

```bash # Check new driver docker info

# Pull test image docker pull hello-world

# Create test container docker run --rm hello-world ```

Overlay2 Best Practices

Recommended Configuration

json
// /etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.size=20G"
  ]
}

This sets maximum container writable layer size to 20G.

Monitoring Overlay2 Health

```bash # Check overlay mounts mount | grep overlay

# Check overlay directories ls -la /var/lib/docker/overlay2

# Check for orphaned layers docker system df docker image prune -a ```

Verification Steps

After fixing storage driver issues:

  1. 1.Verify driver is correct:
  2. 2.```bash
  3. 3.docker info | grep "Storage Driver"
  4. 4.docker info | grep "Backing Filesystem"
  5. 5.`
  6. 6.Test basic operations:
  7. 7.```bash
  8. 8.docker pull nginx:alpine
  9. 9.docker run --rm nginx:alpine echo "Storage driver working"
  10. 10.docker rmi nginx:alpine
  11. 11.`
  12. 12.Check no errors in logs:
  13. 13.```bash
  14. 14.sudo journalctl -u docker.service --since "5 minutes ago"
  15. 15.`
  16. 16.Verify disk usage:
  17. 17.```bash
  18. 18.docker system df
  19. 19.df -h /var/lib/docker
  20. 20.`

Storage driver failures are often about filesystem compatibility. Overlay2 is the modern standard, but it requires ext4 or XFS with ftype=1. If your filesystem doesn't support it, either change the filesystem or use an alternative storage driver like devicemapper with direct-lvm configuration.