{"id":50998046,"url":"https://github.com/ciroiriarte/pve-hitachiblockplugin","last_synced_at":"2026-06-20T11:04:32.604Z","repository":{"id":365914363,"uuid":"1175644967","full_name":"ciroiriarte/pve-HitachiBlockPlugin","owner":"ciroiriarte","description":"ALPHA (not production-ready until validated on live hardware) — Proxmox VE 9 storage plugin for Hitachi FC block storage (VSP One Block, VSP E/G series); 1 LUN per virtual disk, array-offloaded snapshots/clones/QoS","archived":false,"fork":false,"pushed_at":"2026-06-19T13:24:03.000Z","size":216,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-19T13:28:58.544Z","etag":null,"topics":["alpha","fibre-channel","hitachi","perl","proxmox","proxmox-ve","storage","storage-plugin","vsp"],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ciroiriarte.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-08T01:19:49.000Z","updated_at":"2026-06-19T13:24:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ciroiriarte/pve-HitachiBlockPlugin","commit_stats":null,"previous_names":["ciroiriarte/pve-hitachiblockplugin"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ciroiriarte/pve-HitachiBlockPlugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciroiriarte%2Fpve-HitachiBlockPlugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciroiriarte%2Fpve-HitachiBlockPlugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciroiriarte%2Fpve-HitachiBlockPlugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciroiriarte%2Fpve-HitachiBlockPlugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ciroiriarte","download_url":"https://codeload.github.com/ciroiriarte/pve-HitachiBlockPlugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciroiriarte%2Fpve-HitachiBlockPlugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34566926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpha","fibre-channel","hitachi","perl","proxmox","proxmox-ve","storage","storage-plugin","vsp"],"created_at":"2026-06-20T11:04:31.870Z","updated_at":"2026-06-20T11:04:32.597Z","avatar_url":"https://github.com/ciroiriarte.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PVE Hitachi Block Storage Plugin\n\nA [Proxmox VE](https://www.proxmox.com/) storage plugin for Hitachi Fibre Channel\nblock storage (VSP One Block, VSP E series, and VSP G series). It provisions\n**one LUN per virtual disk** and offloads storage services — snapshots, clones,\nthin provisioning, QoS, replication — to the array, in the spirit of VMware vVols.\n\n[![OBS build (PVE 9)](https://build.opensuse.org/projects/home:ciriarte:pve-HitachiBlockPlugin/packages/pve-storage-hitachiblock/badge.svg?type=default)](https://build.opensuse.org/package/show/home:ciriarte:pve-HitachiBlockPlugin/pve-storage-hitachiblock)\n\n\u003e ### ⚠️ Project status: pre-production, not yet hardware-validated\n\u003e\n\u003e This plugin was developed against the Hitachi Configuration Manager REST API\n\u003e **specification and documentation**, and its logic is covered by an automated unit\n\u003e test suite — but **it has not yet been validated against a live array or a real\n\u003e Proxmox cluster.** The unit tests mock the array, the REST client, and the\n\u003e multipath/sysfs layer, so they cannot prove that provisioning, mapping, snapshots,\n\u003e or clones behave correctly on actual hardware.\n\u003e\n\u003e **Do not use it against production data or a production cluster yet.** Treat it as\n\u003e alpha. Before relying on it, work through\n\u003e [`docs/INTEGRATION_CHECKLIST.md`](docs/INTEGRATION_CHECKLIST.md) on your own array\n\u003e (lab/test first) — it lists every assumption the code makes, how to verify each on\n\u003e hardware, and what to change if it is wrong. Operations that create or delete LDEVs,\n\u003e map LUNs, or snapshot/clone volumes can affect or destroy data if an assumption is\n\u003e wrong on your model/microcode.\n\u003e\n\u003e Issue reports, and especially hardware-validation results, are very welcome — see\n\u003e [Contributing](#contributing).\n\n## Features\n\n- **1 LUN per virtual disk** — direct array volumes, no LVM layer.\n- **Thin provisioning** via Hitachi Dynamic Provisioning (DP) pools.\n- **Snapshots** — array-offloaded Thin Image, per LDEV, with metadata tracked in a\n  cluster-replicated registry.\n- **Copy-on-write linked clones** — space-efficient Thin Image clones from a base\n  image or a snapshot; full copies are handled by Proxmox via the device path.\n- **Online volume resize** — array expand + host-side multipath resize.\n- **QoS** — per-LDEV upper/lower IOPS and throughput limits and I/O priority.\n- **Multipath-aware** — FC WWN discovery, ALUA device stanza, automatic WWID\n  whitelisting (`find_multipaths strict`), and authoritative WWID from the array.\n- **Active-node-only LUN mapping** — keeps per-host LUN counts low; live migration\n  remaps on the fly.\n- **Management-plane controller redundancy** — `mgmt_ip` accepts multiple\n  per-controller endpoints with automatic failover and re-authentication.\n- **Storage migration** — Move Storage to/from file stores (hot/cold), plus\n  `volume_export`/`volume_import` for offline cross-node / `pvesm` migration.\n- **Disk reassignment** (`rename_volume`), **base/template images**, **orphan\n  detection**, and **partial-failure rollback** during provisioning.\n- **Replication CLI** (`hitachiblock-repl`) for TrueCopy, Universal Replicator, and\n  Global-Active Device (GAD).\n\nSee [Operations](docs/operations.md) for how each is used.\n\n## Supported platforms\n\n| Platform | `platform` | API endpoint | Default port |\n|----------|------------|--------------|--------------|\n| VSP One Block | `vsp_one` | Built-in REST API on the controller | 443 |\n| VSP E series (e.g. E590H) | `vsp_e` | Embedded Configuration Manager REST API on the GUM | 443 |\n| VSP G series | `vsp_g` | Ops Center API Configuration Manager server | 23451 |\n\nAll platforms speak the standard Configuration Manager REST API object model\n(`/ConfigurationManager/v1/objects/storages/\u003cstorageDeviceId\u003e/…`). The only\ndifference is the management endpoint (IP + port). See\n[Configuration § Platform Differences](docs/configuration.md#platform-differences).\n\n## Requirements\n\n- A Proxmox VE node/cluster with Fibre Channel HBAs and `multipath-tools`.\n- A Hitachi VSP array reachable over the Configuration Manager REST API, with a DP\n  pool, FC target ports, and an API user.\n- FC zoning between the hosts and the array.\n\nFull host- and array-side prerequisites:\n[Installation](docs/installation.md) · [Storage Appliance Prerequisites](docs/prerequisites.md).\n\n## Quick start\n\nInstall from the [OBS](https://build.opensuse.org/package/show/home:ciriarte:pve-HitachiBlockPlugin/pve-storage-hitachiblock)\nrepository on each PVE 9 node (Debian 13 / Trixie base):\n\n```bash\necho 'deb http://download.opensuse.org/repositories/home:/ciriarte:/pve-HitachiBlockPlugin/PVE_9/ /' \\\n  \u003e /etc/apt/sources.list.d/hitachiblock.list\ncurl -fsSL 'https://download.opensuse.org/repositories/home:/ciriarte:/pve-HitachiBlockPlugin/PVE_9/Release.key' \\\n  | gpg --dearmor \u003e /etc/apt/trusted.gpg.d/home_ciriarte_hitachiblock.gpg\napt update \u0026\u0026 apt install pve-storage-hitachiblock\nsystemctl restart pvedaemon\n```\n\n\u003e The repository is named `PVE_9` after the Proxmox release (not the Debian base).\n\u003e It currently ships an **alpha** build — see the status note above and\n\u003e [`docs/packaging-obs.md`](docs/packaging-obs.md) for packaging details.\n\nOr build and install from source on each node:\n\n```bash\nmake install          # or: make deb \u0026\u0026 dpkg -i ../pve-storage-hitachiblock_*_all.deb\nsystemctl restart pvedaemon\n```\n\nAdd the storage to `/etc/pve/storage.cfg`:\n\n```\nhitachiblock: myarray\n    mgmt_ip 10.0.1.100\n    storage_id 836000123456\n    pool_id 0\n    snap_pool_id 1\n    target_ports CL1-A,CL2-A\n    host_mode LINUX/IRIX\n    platform vsp_one\n    shared 1\n    content images\n    nodes node1,node2,node3\n```\n\nStore the API credentials (kept out of `storage.cfg`, in cluster-replicated\n`/etc/pve/priv`):\n\n```bash\npvesm set myarray --username admin --password secret\n```\n\nSee [Configuration](docs/configuration.md) for every parameter, multi-controller\nendpoints, TLS, and QoS, and [`conf/storage.cfg.example`](conf/storage.cfg.example)\nfor per-platform examples.\n\n## Documentation\n\n- **[Documentation index](docs/README.md)** — start here.\n- [Architecture](docs/architecture.md) — components, modules, data flows.\n- [Installation](docs/installation.md) — host prerequisites, install, multipath.\n- [Configuration](docs/configuration.md) — every parameter, credentials, redundancy.\n- [Operations](docs/operations.md) — storage services, replication CLI, migration, troubleshooting.\n- [Storage Appliance Prerequisites](docs/prerequisites.md) — what to configure on the array.\n- [Hardware Integration Checklist](docs/INTEGRATION_CHECKLIST.md) — **read before trusting it** on hardware.\n- [Vendor reference extracts](docs/reference/) — distilled Hitachi REST API / user-guide notes.\n\n## Testing\n\n```bash\nmake test    # Perl unit tests (logic + PVE contracts; the array is mocked)\n```\n\nThe unit suite does **not** touch hardware. Real validation follows the\n[Test Plan](docs/test-plan.md) and the\n[Hardware Integration Checklist](docs/INTEGRATION_CHECKLIST.md); record results under\n`t/integration/`.\n\n## Contributing\n\nContributions and hardware-validation reports are welcome — see\n[CONTRIBUTING.md](CONTRIBUTING.md). To report a security-relevant issue, see\n[SECURITY.md](SECURITY.md).\n\n## Provenance\n\nThis project's content is generated through AI prompting (Claude), directed and\nreviewed by the maintainer, who is responsible for all content. Commits carry a\n`Generated-By:` trailer to reflect this.\n\n## License\n\n[AGPL-3.0](LICENSE) — © Ciro Iriarte and contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciroiriarte%2Fpve-hitachiblockplugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fciroiriarte%2Fpve-hitachiblockplugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciroiriarte%2Fpve-hitachiblockplugin/lists"}