OpenStack Error Guide: Cinder 'No weighed backends available' Scheduler Failure
Fix Cinder 'No valid host was found. No weighed backends available': revive dead cinder-volume, pass CapacityFilter, and align volume_backend_name.
- #openstack
- #troubleshooting
- #errors
- #cinder
Overview
No weighed backends available is the cinder-scheduler’s way of saying it could not find a single storage backend that satisfies every filter for a volume request. The scheduler collects backends that are up and reporting capacity, runs them through a filter chain (Capacity, AvailabilityZone, CapabilitiesFilter, and any custom filters), and weighs the survivors. When the chain eliminates every candidate, the request fails and the volume goes to error.
You will see it in the create result or scheduler log:
ERROR cinder.scheduler.flows.create_volume Failed to run task
cinder.scheduler.flows.create_volume.ScheduleCreateVolumeTask;
volume:create: No valid host was found. No weighed backends available to schedule for volume <id>.
This is distinct from a backend driver error: the volume never reaches a cinder-volume host because the scheduler rejected all of them up front. The cause is almost always one of three things — no backend is actually up and reporting, every backend fails the capacity check, or the requested volume type points at a volume_backend_name (or AZ) that no live backend provides.
Symptoms
openstack volume createimmediately produces a volume inerrorwith no driver log entry on anycinder-volumehost.- cinder-scheduler logs
No weighed backends available. - It only happens for a specific volume type, or only in a specific availability zone, while other creates succeed.
- It started right after a
cinder-volumehost went down, a backend filled up, or a volume type’s extra_specs changed.
openstack volume show <VOLUME_ID> -c status -c volume_type -f value
error
ceph-ssd
Common Root Causes
1. cinder-volume service is down or not reporting
If no cinder-volume is up, there are zero candidates to weigh. A backend also “disappears” if it is up but stopped sending capacity reports.
cinder service-list --binary cinder-volume
+---------------+----------------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+---------------+----------------------+------+---------+-------+----------------------------+
| cinder-volume | hostgroup@ceph-ssd | nova | enabled | down | 2026-06-24T08:55:02.000000 |
| cinder-volume | hostgroup@lvm-hdd | nova | enabled | up | 2026-06-24T09:31:40.000000 |
+---------------+----------------------+------+---------+-------+----------------------------+
The ceph-ssd backend is down; any volume type pinned to it has no host.
2. CapacityFilter — backend is full or over its threshold
The backend is up, but its free capacity (adjusted by reserved_percentage and max_over_subscription_ratio) cannot fit the requested size. For thin backends, over-subscription accounting can eliminate a pool that looks free at the raw level.
cinder get-pools --detail
| free_capacity_gb | 12.0 |
| total_capacity_gb | 2048.0 |
| reserved_percentage | 5 |
| max_over_subscription_ratio| 1.0 |
| provisioned_capacity_gb | 2010.0 |
A 50 GB request against 12 GB free fails the CapacityFilter.
3. volume_backend_name mismatch in the volume type
The volume type’s volume_backend_name extra_spec does not match any live backend’s reported volume_backend_name. The CapabilitiesFilter then drops every host. This is the most common cause after a config or type change.
openstack volume type show ceph-ssd -c properties -f value
cinder get-pools --detail | grep -E 'volume_backend_name|^\| name'
volume_backend_name='ceph_ssd' # from the volume type
volume_backend_name = ceph-ssd # what the backend actually reports
The underscore vs. hyphen difference (ceph_ssd vs ceph-ssd) means nothing matches.
4. AvailabilityZoneFilter mismatch
The request asks for an AZ (explicitly, or via default_availability_zone / the source volume’s AZ) that the only matching backend is not in.
openstack availability zone list --volume
cinder service-list --binary cinder-volume # Zone column
| cinder-volume | hostgroup@ceph-ssd | az-ssd | up |
A create with --availability-zone nova cannot land on a backend whose zone is az-ssd (unless allow_availability_zone_fallback is enabled).
5. Backend capabilities / extra_specs not satisfied
The volume type requests a feature the backend does not report — e.g. multiattach='<is> True', QoS, or thin_provisioning_support. The CapabilitiesFilter eliminates backends that do not advertise it.
openstack volume type show multiattach-type -c properties -f value
cinder get-pools --detail | grep -i multiattach
multiattach='<is> True'
multiattach_support = False
6. Backend up but capabilities not yet reported
A freshly (re)started cinder-volume is up in the service list but has not pushed its first capability/capacity report, so the scheduler has no pool data for it and skips it.
cinder get-pools # backend missing from the pool list
If the host is up in service-list but absent from get-pools, wait for the next report interval (or check the volume log for a driver init failure that prevents reporting).
Diagnostic Workflow
Step 1: Confirm at least one backend is up
cinder service-list --binary cinder-volume
Any backend in down state cannot be scheduled to. Restart it before anything else:
# Kolla-Ansible
docker restart cinder_volume
# Traditional packages
sudo systemctl restart openstack-cinder-volume
Step 2: Identify the requested volume type and its backend name / AZ
openstack volume show <VOLUME_ID> -c volume_type -c availability_zone -f value
openstack volume type show <TYPE> -c properties -f value
Note the volume_backend_name and any feature extra_specs the type demands.
Step 3: List live pools and their reported capabilities
cinder get-pools --detail
Compare, for the failing type:
- the type’s
volume_backend_nameagainst each pool’s reportedvolume_backend_name, - the requested size against
free_capacity_gb/ over-subscription math, - requested features (multiattach, QoS) against reported capabilities.
Step 4: Read the scheduler log to see which filter eliminated hosts
# Kolla-Ansible
docker logs cinder_scheduler 2>&1 | grep -iE "Filter|weighed|<VOLUME_ID>" | tail -30
# Traditional packages
sudo journalctl -u openstack-cinder-scheduler | grep -iE "Filter|weighed" | tail -30
DEBUG cinder.scheduler.filters.capacity_filter Insufficient free space for volume creation on host hostgroup@lvm-hdd#lvm-hdd (requested / avail): 50/12
INFO cinder.scheduler.base_filter Filtering removed all hosts for the request. Filter results: AvailabilityZoneFilter: (start: 2, end: 1), CapacityFilter: (start: 1, end: 0)
The (start: N, end: 0) line names the exact filter that zeroed out the candidates.
Step 5: Fix the mismatch and re-create
Depending on the eliminating filter:
- Capacity: free space, lower
reserved_percentage, or raisemax_over_subscription_ratiofor thin backends. - Capabilities / backend name: correct the volume type’s
volume_backend_nameto match the reported value. - AZ: create in the right zone or enable
allow_availability_zone_fallback = True.
openstack volume type set --property volume_backend_name=ceph-ssd ceph-ssd
openstack volume create --type ceph-ssd --size 50 retry-vol
Example Root Cause Analysis
Every create with --type ceph-ssd fails with No weighed backends available, while the default type works fine.
cinder service-list shows hostgroup@ceph-ssd is up, so it is not a dead service. The scheduler log narrows it down:
INFO cinder.scheduler.base_filter Filtering removed all hosts for the request.
Filter results: AvailabilityZoneFilter: (start: 1, end: 1), CapabilitiesFilter: (start: 1, end: 0)
The CapabilitiesFilter removed the one candidate. Comparing the type to the reported pool:
openstack volume type show ceph-ssd -c properties -f value
cinder get-pools --detail | grep -E 'name|volume_backend_name'
volume_backend_name='ceph_ssd'
| name | hostgroup@ceph-ssd#ceph-ssd |
| volume_backend_name | ceph-ssd |
A recent edit set the type’s volume_backend_name to ceph_ssd (underscore), but the backend reports ceph-ssd (hyphen). The CapabilitiesFilter finds no match and drops the host. Fix the type:
openstack volume type set --property volume_backend_name=ceph-ssd ceph-ssd
openstack volume create --type ceph-ssd --size 50 retry-vol
The name now matches, the backend survives the filter chain, and the volume schedules and becomes available.
Prevention Best Practices
- Alert on
cinder service-listfor anycinder-volumeindownstate — a dead backend is the fastest path to “No weighed backends available” for everything pinned to it. - Keep
volume_backend_namein each volume type byte-for-byte identical to the value the backend reports incinder get-pools. Hyphen/underscore and case typos are the single most common cause. - Graph backend capacity and
provisioned_capacity_gbvstotal * max_over_subscription_ratio, and alert before the CapacityFilter starts rejecting normal-sized requests. - Document the AZ of each backend and make sure your
default_availability_zone(orallow_availability_zone_fallback) matches where backends actually live. - After any ml2/volume-type/backend change, run a smoke
openstack volume create --type <type> --size 1per type to confirm the scheduler still finds a host. - For fast triage, the free incident assistant can read a scheduler filter-result line and name the eliminating filter. See more in OpenStack guides.
Quick Command Reference
# Are backends up and reporting?
cinder service-list --binary cinder-volume
# What does each live pool report (capacity + capabilities)?
cinder get-pools --detail
# Which type/AZ did the failed request ask for?
openstack volume show <VOLUME_ID> -c volume_type -c availability_zone -f value
openstack volume type show <TYPE> -c properties -f value
# Which filter eliminated all hosts?
docker logs cinder_scheduler 2>&1 | grep -iE "Filter results|Insufficient" | tail -20
sudo journalctl -u openstack-cinder-scheduler | grep -iE "Filter results|Insufficient" | tail -20
# Common fixes
openstack volume type set --property volume_backend_name=<reported_name> <TYPE>
# free capacity / adjust reserved_percentage or max_over_subscription_ratio in cinder.conf, then:
docker restart cinder_volume
sudo systemctl restart openstack-cinder-volume
# Retry
openstack volume create --type <TYPE> --size 1 retry-vol
Conclusion
No weighed backends available means the cinder-scheduler filtered out every backend before it could pick one. The volume never reaches a driver, so the answer is in the scheduler, not the backend log. Work it in order:
- Confirm at least one
cinder-volumeisupinservice-list. - Read the volume type’s
volume_backend_name, requested size, AZ, and feature extra_specs. - Compare those against what
cinder get-pools --detailactually reports. - Read the scheduler
Filter resultsline to see which filter zeroed the candidates. - Fix the specific mismatch — dead service, full capacity, backend-name typo, AZ, or unsupported capability — and re-create.
The (start: N, end: 0) filter line is your fastest route to the cause: it names exactly which check eliminated the last host.
Download the Free 500-Prompt DevOps AI Toolkit
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.