Part 11 of the grommunio 2026 series validates disaster recovery and single mailbox restore in a real isolated QEMU lab with grommunio 2026.06.1. The test covers a full restore of a fresh appliance and a targeted mailbox import into another mailbox.
Quick overview
- Full DR: SQL dump, /var/lib/gromox and relevant configuration restored on a separate restore VM.
- Single mailbox restore: mailbox exported as Gromox Mailbox Transfer and imported into a second mailbox.
- Visual acceptance: Admin UI and grommunio Web show restored users and mail.
- Result: FULL_DR = PASS, SINGLE_MAILBOX_RESTORE = PASS.
Tested baseline
The tests ran on a grommunio 2026.06.1 appliance. The restore did not reuse the same VM. A separate restore VM was started from a clean baseline and populated only from the backup artifacts.
cat /etc/os-releasegrommunio-admin versionrpm -qa | grep -E "^(grommunio|gromox|mariadb|nginx|postfix|redis)" | sortsystemctl --failed
Test data
The acceptance run used a dedicated local test domain with three users. The names in this article are lab examples; no production credentials or internal recovery secrets are published.
- Domain: restore.test
- Source mailbox: druser@restore.test
- Target mailbox for the validated restore: restoretarget2@restore.test
- Test messages: DR-FULL-BASELINE-20260915-A and DR-SINGLE-RESTORE-20260915-B
Create the backup
For the full DR test, database, Gromox stores and central configuration were backed up separately. A mailbox transfer stream was created for the later single mailbox restore.
mysqldump --all-databases --single-transaction --routines --triggers --events --add-drop-database > grommunio-mysql-all.sqltar --xattrs --acls -czf gromox-varlib.tar.gz -C /var/lib gromoxtar --xattrs --acls -czf grommunio-etc.tar.gz /etc/grommunio* /etc/gromox /etc/nginx /etc/postfixgromox-exm2mt -u druser@restore.test -ar / > druser-full-mailbox.mtsha256sum * > SHA256SUMS
Evidence: backup artifacts and checksums
The backup artifacts were verified with SHA256. The mailbox export contains both test mails that later reappear in the full DR and single mailbox restore.
Restore full disaster recovery
The restore VM started without the test domain. Services were stopped, data and configuration were restored, the database was imported and the grommunio services were started again.
systemctl stop postfix gromox-delivery gromox-delivery-queue gromox-http gromox-zcore gromox-midb gromox-imap gromox-pop3 gromox-event gromox-timer grommunio-admin-api php-fpm nginxsystemctl stop mariadbtar --xattrs --acls -xzf gromox-varlib.tar.gz -C /var/libtar --xattrs --acls -xzf grommunio-etc.tar.gz -C /systemctl start mariadbmysql < grommunio-mysql-all.sqlsystemctl start redis@grommunio php-fpm nginx grommunio-admin-api gromox-event gromox-timer gromox-midb gromox-zcore gromox-http gromox-imap gromox-pop3 gromox-delivery-queue gromox-delivery postfix
Ownership note: on the grommunio appliance, the relevant system users and groups are normally created consistently by the appliance image. If backup and restore happen between differently built systems, however, tar restores with --xattrs --acls can still expose wrong numeric UID/GID mappings. After extraction, verify owners, groups, ACLs and key directory permissions.
getent passwd gromoxgetent group gromoxnamei -l /var/lib/gromoxfind /var/lib/gromox -maxdepth 2 -printf '%u:%g %m %p\n' | head -50
Evidence: full DR restore on the restore VM
After the restore, the CLI again shows the restore.test domain, users and both test mails. Admin UI and webmail then confirm the same state visually.
Proof in the Admin UI
After the restore, the services were active and the restored users were visible in the Admin UI.
Validate mailbox content after full DR
After the full DR restore, the source mailbox contained both test messages. This was verified with a Gromox export and in grommunio Web.
zypper install -y binutilsgromox-exm2mt -u druser@restore.test -ar / > druser-after-full-dr.mtstrings druser-after-full-dr.mt | egrep "DR-FULL|DR-SINGLE|DRFULL|SINGLE-B"
Single mailbox restore into another mailbox
The targeted mailbox restore used a splice export. The first raw import without -s restored the content but created a nested store tree. The validated article path therefore uses -s.
gromox-exm2mt -u druser@restore.test -ars / > druser-full-mailbox-splice.mtgromox-mt2exm -u restoretarget2@restore.test < druser-full-mailbox-splice.mtsystemctl restart gromox-http gromox-midb gromox-zcore
Evidence: targeted single mailbox restore
The splice export was imported into restoretarget2@restore.test. The target mailbox then contains both test mails and a normal folder structure.
Afterwards, both test messages were visible in the target mailbox without changing the source mailbox.
Result check / technical acceptance
| Area | Check | Expected result | Status |
|---|---|---|---|
| Version | Confirm grommunio 2026.06.1 | The appliance version is documented clearly | PASS |
| Backup | Back up SQL, Gromox data, configuration and mailbox export | All restore artifacts are complete | PASS |
| Integrity | Verify SHA256 checksums on host and restore VM | Artifacts were transferred unchanged | PASS |
| Full DR | Restore on a separate VM | Domain, users, services and mailbox contents are restored | PASS |
| Single mailbox restore | Import mailbox export into target mailbox | The target mailbox contains the restored mail | PASS |
| Web evidence | Check Admin UI and grommunio Web | Users and mails are visually verifiable | PASS |
| Secret handling | Review screenshots and public content | No production credentials or internal secrets are published | PASS |
Version
- Check
- Confirm grommunio 2026.06.1
- Expected result
- The appliance version is documented clearly
- Status
- PASS
Backup
- Check
- Back up SQL, Gromox data, configuration and mailbox export
- Expected result
- All restore artifacts are complete
- Status
- PASS
Integrity
- Check
- Verify SHA256 checksums on host and restore VM
- Expected result
- Artifacts were transferred unchanged
- Status
- PASS
Full DR
- Check
- Restore on a separate VM
- Expected result
- Domain, users, services and mailbox contents are restored
- Status
- PASS
Single mailbox restore
- Check
- Import mailbox export into target mailbox
- Expected result
- The target mailbox contains the restored mail
- Status
- PASS
Web evidence
- Check
- Check Admin UI and grommunio Web
- Expected result
- Users and mails are visually verifiable
- Status
- PASS
Secret handling
- Check
- Review screenshots and public content
- Expected result
- No production credentials or internal secrets are published
- Status
- PASS
Operational notes
This test shows the technical restore path in the lab. Production operation additionally needs regular restore exercises, defined RPO/RTO targets, separate backup locations, monitoring, encryption, access control and documented responsibilities. High availability does not replace backup because replication can also replicate mistakes and accidental deletion.






