Compatibility with LINSTOR

Where blockstor behaves differently from LINSTOR, and what is not there.

Blockstor implements the LINSTOR REST API, so linstor-csi, piraeus-operator, ha-controller, golinstor and the linstor client work against it. This page lists the differences an operator can notice. The full list, kept for the project’s parity tests, is in docs/cli-parity-known-deltas.md.

Not implemented

FeatureWhat happens
Backups, backup shipping, remotes such as S3The API answers 501 Not Implemented. Use snapshots and restore inside the cluster.
SchedulesThe API answers 501 Not Implemented.
adviseNot available.
In-place snapshot rollbackRefused on purpose, because it destroys every newer snapshot. Restore the snapshot into a new volume instead.
Per-connection DRBD peer options (resource-connection drbd-peer-options)Not available.
External DRBD metadata (StorPoolNameDrbdMeta)Not supported yet.
Other providers: SPDK, NVMe-oF, OpenFlex, ExosNot supported.

Behaves differently

AreaLINSTORBlockstor
Active network interfacelinstor node interface modify --active switches the satellite’s connection to another interface.Has no effect. DRBD uses the address picked in the order described in Networking and ports, not an active flag. A change of address reaches DRBD after the node’s satellite pod restarts.
Default action on lost quorumon-no-quorum io-erroron-no-quorum suspend-io: I/O blocks until quorum returns and then resumes, so a replica that was cut off does not get stuck after the network heals.
Shrinking a volumeAllowed for stacks that support it.Refused. --force lowers the size in the definition only; the backing devices and DRBD keep their size.
DRBD ports and minorsPorts from 7000, minors from 1000.Ports from 20000 to 20999, minors from 20000. Blockstor can run on the same nodes as LINSTOR without collisions. Change the port range per node with the DrbdOptions/TcpPortRange property.
Spawning more replicas than there are nodesFails and places nothing.Places as many replicas as it can, reports the shortfall, and adds the rest when more nodes join.
Turning a tiebreaker into a replica with dataCan skip the initial sync.Runs a full sync, to avoid a DRBD split where both sides refuse to connect.
Removing a replica below quorumRemoves the quorum options from the definition and prints a note.Sets quorum off explicitly, with the same effect on DRBD.
DRBD option valuesValidated against the DRBD schema.Not validated: a wrong value is stored and fails later on the node. Check values before you set them.
Autoplacer weightsMaxFreeSpace is 1, the other weights 0.All four weights default to 1.
controller versionReports a git commit hash.Through the REST API, release images report the commit they were built from. A development build that was not given one reports a placeholder instead.
node infoShows OS, CPU and memory.These fields are empty.

Using the linstor client

The linstor client works against blockstor’s API server. Port-forward the plain HTTP port and point the client at it. That port has no authentication. It listens on the pod’s loopback address, so a port-forward reaches it and other pods do not; see Networking and ports.

kubectl -n blockstor-system port-forward deploy/blockstor-apiserver 3370:3370
linstor --controllers http://localhost:3370 node list

For everyday work the blockstor CLI is simpler: it needs no port-forward and no certificates, and it accepts the same commands.