# 05 - Linstor & Storage Implementation This document details the configuration enforcement executed by the Linstor roles. ## LVM Global Filter To prevent PVE from detecting double LVM signatures (raw block vs DRBD layer), the playbook injects the following global filter into `/etc/lvm/lvm.conf`: `global_filter =[ "r|^/dev/drbd|", "r|^/dev/mapper/[lL]instor|" ]` ## Storage Provisioning The `community.general.lvg` task targets raw block devices strictly when the target string starts with `/dev/`. **The playbook does not invoke `wipefs`.** If residual partition tables exist on the target block device, the LVM module will purposefully fail to prevent data destruction. ## Double Provisioning Protection (local-lvm) By default, Proxmox creates a local storage entry named `local-lvm` pointing to the `pve/data` thin-pool. If the playbook detects that you are reusing `pve/data` as a Linstor backend, it automatically executes `pvesm remove local-lvm`. This prevents users from accidentally deploying local VMs to the underlying pool, which causes silent thin-pool exhaustion and DRBD corruption. The `local` directory storage (`/var/lib/vz`) is intentionally retained for ISOs and backups. ## HA Controller Topology Linstor Controller HA is handled via `drbd-reactor`. 1. A 200M DRBD resource (`linstor_db`) is spawned across all nodes. 2. The default `linstor-controller` systemd service is disabled. 3. A `var-lib-linstor.mount` unit is deployed. 4. The local `/var/lib/linstor` mount point is secured with the immutable flag (`chattr +i`). This guarantees that if the DRBD resource fails to mount, the local filesystem rejects writes, preventing database split-brains. 5. `drbd-reactor` manages the floating VIP and promoter plugin logic.