Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| user:rion [2021/09/28 07:36] – cya (now in the CRT guide) atari | user:rion [2026/06/10 14:45] (current) – rion | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Storage Manager ====== | ||
| + | |||
| + | {{toc>}} | ||
| + | |||
| + | > Introduced in **Batocera v43**. | ||
| + | |||
| + | Batocera' | ||
| + | |||
| + | USB drives, external hard drives, SSDs, SD cards, and additional internal drives can all be used. | ||
| + | |||
| + | <WRAP tip> | ||
| + | The Storage Manager introduced in Batocera v43 allows multiple drives to be combined into a single ROM library without requiring symbolic links, manual mounts, or custom scripts. | ||
| + | </ | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | |||
| + | ===== Overview ===== | ||
| + | |||
| + | | ||
| + | |||
| + | The Storage Manager can: | ||
| + | |||
| + | * Detect compatible storage devices automatically | ||
| + | * Merge existing ROM drives | ||
| + | * Format and prepare new drives | ||
| + | * Use multiple drives simultaneously | ||
| + | * Present all ROMs as a single library under ''/ | ||
| + | * Safely eject drives | ||
| + | * Automatically refresh game lists | ||
| + | |||
| + | From the user's point of view, there is still only one ROM folder: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Batocera handles the storage pool in the background. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | A simplified overview: | ||
| + | |||
| + | < | ||
| + | Internal ROMs | ||
| + | │ | ||
| + | Drive 1 /roms | ||
| + | │ | ||
| + | Drive 2 /roms | ||
| + | │ | ||
| + | MergerFS | ||
| + | │ | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ===== Requirements ===== | ||
| + | |||
| + | A drive must contain a root-level folder named: | ||
| + | |||
| + | < | ||
| + | roms | ||
| + | </ | ||
| + | |||
| + | Supported: | ||
| + | |||
| + | < | ||
| + | Drive | ||
| + | └── roms | ||
| + | ├── nes | ||
| + | ├── snes | ||
| + | └── psx | ||
| + | </ | ||
| + | |||
| + | Not supported: | ||
| + | |||
| + | < | ||
| + | Drive | ||
| + | └── Batocera | ||
| + | └── roms | ||
| + | </ | ||
| + | |||
| + | Not supported: | ||
| + | |||
| + | < | ||
| + | Drive | ||
| + | ├── nes | ||
| + | ├── snes | ||
| + | └── psx | ||
| + | </ | ||
| + | |||
| + | The Storage Manager currently expects the '' | ||
| + | |||
| + | ===== Using Existing Drives ===== | ||
| + | |||
| + | |||
| + | |||
| + | When Batocera detects a mounted drive containing a compatible root-level '' | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | After accepting the prompt, Batocera adds the drive to the storage pool. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | After the merge completes, the ROMs stored on the drive become available alongside your existing collection. | ||
| + | |||
| + | ===== Formatting a New Drive ===== | ||
| + | |||
| + | |||
| + | |||
| + | If a blank drive is detected, Batocera can automatically prepare it for game storage. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | <WRAP important> | ||
| + | Formatting a drive will permanently erase all existing data stored on that drive. Make sure any important files have been backed up before proceeding. | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | Selecting **Format & Merge** will format the drive and add it to the Storage Manager. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | Batocera will: | ||
| + | |||
| + | * Format the drive | ||
| + | * Create a root-level '' | ||
| + | * Generate the standard ROM directory structure | ||
| + | * Merge the drive into the Storage Manager | ||
| + | * Refresh the game lists | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | ===== Using Multiple Drives ===== | ||
| + | |||
| + | Multiple drives can be used simultaneously. | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Batocera combines them into a single virtual library: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Games can be distributed across multiple drives while still appearing as one collection inside EmulationStation. | ||
| + | |||
| + | ===== Internal Drives ===== | ||
| + | |||
| + | The Storage Manager is not limited to removable USB devices. | ||
| + | |||
| + | Additional internal drives can also be used. | ||
| + | |||
| + | For example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | As long as the drive is mounted by Batocera and contains a root-level '' | ||
| + | |||
| + | This includes: | ||
| + | |||
| + | * SATA hard drives | ||
| + | * SATA SSDs | ||
| + | * NVMe SSDs | ||
| + | * USB storage devices | ||
| + | * SD cards | ||
| + | |||
| + | <WRAP info> | ||
| + | The drive name does not matter. What matters is that the mounted drive contains a root-level '' | ||
| + | </ | ||
| + | |||
| + | ===== Safe Drive Removal ===== | ||
| + | |||
| + | |||
| + | |||
| + | Drives can be safely removed from: | ||
| + | |||
| + | * **Main Menu** | ||
| + | * **System Settings** | ||
| + | * **Eject an Extra Disk** | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | After selecting the drive, Batocera asks for confirmation before removing it from the storage pool. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | Batocera automatically updates the storage pool and refreshes the game lists. | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | Games stored only on the removed drive will disappear from the library until that drive is connected and merged again. | ||
| + | |||
| + | ===== What Gets Merged? ===== | ||
| + | |||
| + | Only the ROM library is merged: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Folders such as: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | remain on internal storage. | ||
| + | |||
| + | The Storage Manager does not merge BIOS files, save files, screenshots, | ||
| + | |||
| + | ===== Internal ROM Preservation ===== | ||
| + | |||
| + | When the first additional ROM drive is merged, Batocera preserves the existing internal ROM collection. | ||
| + | |||
| + | Internally, existing ROMs stored in: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | are moved into: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | This allows internal ROMs to remain visible alongside ROMs stored on merged drives. | ||
| + | |||
| + | If all merged drives are later removed, Batocera restores the internal ROM library back to the normal ''/ | ||
| + | |||
| + | ===== Limitations ===== | ||
| + | |||
| + | The Storage Manager currently requires this layout: | ||
| + | |||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | Nested ROM folders are not detected automatically. | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | is not automatically merged. | ||
| + | |||
| + | Only the ROM library is merged. Other userdata folders remain independent. | ||
| + | |||
| + | ===== Advanced Technical Details ===== | ||
| + | |||
| + | Batocera uses **MergerFS** to combine ROM folders from multiple drives into a single virtual directory. | ||
| + | |||
| + | The merged library is presented at: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Internally, Batocera maintains a storage pool containing: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | plus any merged ROM folders. | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | These locations are combined into: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== MergerFS File Placement Policy ==== | ||
| + | |||
| + | Batocera currently uses the following MergerFS create policy: | ||
| + | |||
| + | < | ||
| + | category.create=eplfs | ||
| + | moveonenospc=true | ||
| + | minfreespace=4G | ||
| + | </ | ||
| + | |||
| + | **eplfs** means: | ||
| + | |||
| + | < | ||
| + | Existing Path, Least Free Space | ||
| + | </ | ||
| + | |||
| + | When writing a new file: | ||
| + | |||
| + | * MergerFS looks for branches where the target folder already exists | ||
| + | * Among those branches, the branch with the least free space is preferred | ||
| + | * Branches with less than 4 GB free are ignored | ||
| + | * If a drive becomes full during a write operation, the file can automatically move to another branch | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | A new ROM copied into: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | would be stored on: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | because it has the least free space while still meeting the minimum free space requirement. | ||
| + | |||
| + | <WRAP important> | ||
| + | The MergerFS implementation and file placement policy may change between Batocera releases. This section reflects the behavior introduced with Batocera v43. | ||
| + | </ | ||
| + | |||
| + | ===== Frequently Asked Questions ===== | ||
| + | |||
| + | ==== Can I use internal drives? ==== | ||
| + | |||
| + | Yes. Any drive mounted by Batocera containing a root-level '' | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== What happens if I unplug a merged drive? ==== | ||
| + | |||
| + | Batocera updates the storage pool and refreshes the game lists. | ||
| + | |||
| + | Games stored only on the disconnected drive will temporarily disappear until the drive is connected again. | ||
| + | |||
| + | ==== Are BIOS files merged? ==== | ||
| + | |||
| + | No. | ||
| + | |||
| + | Only: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | is merged. | ||
| + | |||
| + | BIOS files remain stored in: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Are saves merged? ==== | ||
| + | |||
| + | No. | ||
| + | |||
| + | Save files remain stored in the normal userdata location, for example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Can I store ROMs in a different folder? ==== | ||
| + | |||
| + | No. | ||
| + | |||
| + | The Storage Manager currently expects a root-level folder named: | ||
| + | |||
| + | < | ||
| + | roms | ||
| + | </ | ||
| + | |||
| + | ==== Does the drive name matter? ==== | ||
| + | |||
| + | No. | ||
| + | |||
| + | For example, both of these are valid if they contain a root-level '' | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ===== References ===== | ||
| + | |||
| + | * Batocera TV — '' | ||
| + | * Storage Manager demonstration: | ||
| + | * https:// | ||
| + | |||
| + | * Batocera Storage Manager source code: | ||
| + | * https:// | ||
- user/rion.1632814585.txt.gz
- Last modified: 5 years ago
- by atari