---
# System prepended metadata

title: Pantavisor Persistent Storage
tags: [proposal]

---

# Pantavisor Persistent Storage

A list of on-disk persistent files and directories that Pantavisor as well as some actions that could be taken to reduce the attack surface on a compromised device.

## /storage/boot/uboot.txt

Pantavisor reads and writes.  File with information about which revision to boot. Along /proc/cmdline, it serves as the communication betwen Pantavisor and bootloader. Pantavisor expects uboot.txt to be formatted as a set of keys=value pairs (pv_rev and/or pv_try) separated by the character '\0'.

**Potential malfunctions:**
* logs not progressing to next revision after non-reboot updates
* garbage collector removing DONE revision
* bootloader cannot bootup the right revision

**Actions to take:**
* make Pantavisor only get revision info from /proc/cmdline or memory (needs implementation)
* use storage.gc.keep_factory if we have enough disk space
* make bootloader to always bootup to revision 0 if uboot.txt cannot be parsed (needs implementation and only makes sense with storage.gc.keep_factory)

## /storage/cache/devmeta/

Pantavisor reads and writes. Directory that contains device metadata key-value pairs. Produced and saved by Pantavisor, then loaded again during bootups by Pantavisor to make them persistent. Can be consulted via pvcontrol.

**Potential malfunctions:**
* pvcontrol returns bad devmeta to platforms

**Actions to take:**
* New config key to make devmeta non-persistent so we avoid reading (needs implementation if needed)
* Enable pvcontrol devmeta operations for non-mgmt role so more platforms can be set to non-mgmt (needs implementation)

## /storage/cache/dropbear/

Pantavisor mounts. Just mounted in /etc/dropbear during bootup and user by Dropbear thereafter.

**Potential malfunctions:**

**Actions to take:**

## /storage/cache/meta

Pantavisor reads and writes. Directory that contains user metadata key-value pairs. Produced by platforms and saved by Pantavisor, then loaded by Pantavisor during bootups to make them persistent.

**Potential malfunctions:**
* pvcontrol returns bad usrmeta to platforms
* SSH denies access because of bad public key

**Actions to take:**
* New config key to make usrmeta non-persistent so we avoid reading when someone don't need that (needs implementation if needed)
* Enable pvcontrol usrmeta operations for non-mgmt role so more platforms can be set to non-mgmt (needs implementation)

## /storage/config/

Pantavisor reads and writes. Contains the pantahub.config and unclaimed.config. Read and wrote on rev 0 if control.remote=1. We also check if pantahub.config exists to verify /storage is mounted at some point.

**Potential malfunctions:**
* Misconfiguration of pantahub.config keys (including deprecated ones)
* Boot loop if removed

**Actions to take:**
* Use control.remote=1 to avoid reading these files
* Move all possible keys to pantavisor.config and deprecate them (needs implementation)
* Move rest of values to a new .config in intrd excepts creds (needs implementation)
* Remove checking pantahub.config to verify /storage is mounted (needs implementation)

## /storage/disks/

Pantavisor reads. Used to store permanent or revision disk overlays. It is not used when the platform persistence is set to boot.

**Potential malfunctions:**
* Platform side malfunction

**Actions to take:**
* Make sure non-encrypted disks are only used with boot persistence

## /storage/dm-crypt-file/

Pantavisor reads. Encrypted. Used to store dm disks.

**Potential malfunctions:**

**Actions to take:**

## /storage/logs/

Pantavisor writes. Where Pantavisor logserver stores the logs. Can be modified via pv-ctrl-log and pv-fd-log.

**Potential malfunctions:**
* Logs modified or removed

**Actions to take:**
* Is it worth it to check who is sending to pv-ctrl-log and pv-fd-log and verify if that is possible? (needs implementation)

## /storage/objects/

Pantavisor reads and writes. Signature and checksum validation. Where Pantavisor update system stores the revision objects. On-disk info can be directly consulted and modified with pv-ctrl.

**Potential malfunctions:**
* boot loop if object is missing

**Actions to take:**
* Use strict secureboot mode preferably
* Make sure non-mgmt roles are set to all platforms that don't need that

## /storage/trails/

Pantavisor reads and writes. Signature and checksum validation. Where Pantavisor update system stores the revision JSON state. On-disk info can be directly consulted and modified with pv-ctrl.

**Potential malfunctions:**
* boot loop if revision is missing

**Actions to take:**
* Use strict secureboot mode preferably
* Make sure non-mgmt roles are set to all platforms that don't need that