OpenStack Error: 'Failed to initialize driver' — fix cinder-volume backend startup
Fix cinder-volume 'Failed to initialize driver / Bad or unexpected response from the storage volume backend API': diagnose backend credentials, enabled_backends, and driver deps so the service starts.
- #openstack
- #cinder
- #troubleshooting
- #errors
Stuck on this OpenStack error? Get the free incident triage checklist
A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.
Exact Error Message
# /var/log/cinder/cinder-volume.log
ERROR cinder.volume.manager [-] Failed to initialize driver.
ERROR cinder.volume.manager Traceback (most recent call last):
ERROR cinder.volume.manager File ".../cinder/volume/manager.py", line 512, in init_host
ERROR cinder.volume.manager File ".../cinder/volume/drivers/rbd.py", line 411, in check_for_setup_error
ERROR cinder.volume.manager cinder.exception.VolumeBackendAPIException:
Bad or unexpected response from the storage volume backend API:
Error connecting to ceph cluster: [errno 13] RADOS permission denied
WARNING cinder.volume.manager [-] Update driver status failed: (config name rbd-1)
is uninitialized.
The service-level symptom is a backend that is down/disabled in cinder service-list, and every volume create on that backend failing with No valid backend was found.
What It Means
cinder-volume loads one driver per backend listed in enabled_backends. During startup it calls the driver’s check_for_setup_error() to confirm it can actually talk to the storage system (Ceph/RBD, LVM/iSCSI, NetApp, Pure, etc.). Failed to initialize driver means that check raised — the backend credentials, connectivity, or a required library/binary is wrong — so Cinder marks that backend uninitialized and refuses to schedule volumes to it.
This is a configuration or dependency problem on the storage node, not a problem with any individual volume. Until the driver initializes, the backend does not report capacity to the scheduler and appears effectively offline.
Common Causes
- Wrong or missing backend credentials (Ceph keyring/
rbd_user, iSCSI/vendor API login). - A required client library or CLI is missing (e.g.
python3-rados/ceph-common, vendor SDK). - Network/firewall blocks the storage backend (Ceph mons, iSCSI portal, management API).
enabled_backendsreferences a config section that does not exist or has a typo.- The LVM volume group named in
volume_groupis missing on an LVM backend. - A backend TLS certificate is untrusted or the management endpoint URL is wrong.
Diagnostic Commands
Check which backends Cinder thinks are up:
openstack volume service list
sudo tail -f /var/log/cinder/cinder-volume.log
Confirm the enabled backends and their driver settings:
sudo crudini --get /etc/cinder/cinder.conf DEFAULT enabled_backends
sudo crudini --get /etc/cinder/cinder.conf rbd-1 volume_driver
sudo crudini --get /etc/cinder/cinder.conf rbd-1 rbd_user
Reproduce the backend connectivity check by hand. For a Ceph/RBD backend:
sudo -u cinder rbd -p volumes --id cinder --keyring /etc/ceph/ceph.client.cinder.keyring ls
For an LVM backend, confirm the volume group exists:
sudo vgs cinder-volumes
Step-by-Step Resolution
- Read the traceback’s last line — it names the real cause (permission denied, connection refused, missing library). Fix that specific dependency first. For Ceph, install and verify the client:
sudo apt-get install -y ceph-common python3-rados # or dnf install
sudo -u cinder ceph -s --id cinder --keyring /etc/ceph/ceph.client.cinder.keyring
- Correct the backend credentials/section in
cinder.conf. Ensureenabled_backendsmatches real section names exactly:
[DEFAULT]
enabled_backends = rbd-1
[rbd-1]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_user = cinder
rbd_ceph_conf = /etc/ceph/ceph.conf
volume_backend_name = ceph-ssd
- Fix file ownership so the
cinderuser can read the keyring/config:
sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
sudo chmod 600 /etc/ceph/ceph.client.cinder.keyring
- Restart the volume service and watch the driver initialize cleanly:
sudo systemctl restart cinder-volume
sudo grep -E 'Driver initialization completed|Failed to initialize driver' \
/var/log/cinder/cinder-volume.log | tail
INFO cinder.volume.manager [-] Driver initialization completed successfully. (config name rbd-1)
- Confirm the backend is now up and reporting capacity:
openstack volume service list --service cinder-volume
| cinder-volume | storage-01@rbd-1 | nova | enabled | up |
- Validate end to end by creating a small test volume:
openstack volume create --size 1 driver-smoke-test
openstack volume show driver-smoke-test -c status # available
Prevention
- Manage
cinder.confand backend credentials with configuration management soenabled_backendsand section names never drift. - Bake required driver dependencies (
ceph-common, vendor SDKs) into the storage node image. - Monitor
openstack volume service listand alert when acinder-volumebackend goesdown. - Test backend connectivity (rbd/vgs/vendor API) as a pre-deploy check before restarting the service.
- Keep keyring/config file ownership as
cinder:cinderwith restrictive permissions.
Related Errors
No valid backend was found— the scheduler side of a backend that failed to initialize.VolumeBackendAPIException: Bad or unexpected response— the generic wrapper this error uses.RADOS permission denied— a Ceph keyring/caps problem specifically.Volume group "cinder-volumes" not found— an LVM backend missing its VG.
Frequently Asked Questions
Why is only one of my backends down? Each backend in enabled_backends initializes independently. A credential, dependency, or connectivity problem on one backend takes only that backend offline while the others stay up.
The config looks right — why does the driver still fail? The traceback’s final line is authoritative. It usually points at something outside cinder.conf: a missing client library, unreadable keyring, blocked port, or missing LVM volume group. Reproduce that check by hand.
Do I need to restart cinder-volume after fixing it? Yes. check_for_setup_error() runs at startup, so the backend stays uninitialized until you restart the service and see “Driver initialization completed successfully.”
How do I stop this recurring after upgrades? Pin driver dependencies in your node image and validate connectivity before rollout — the automation patterns in the prompt library help script that. For more storage fixes, see the OpenStack guides.
Fixed it? Get 500 OpenStack & DevOps AI prompts — free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.
Did this fix your issue?
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.