Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| user:rion [2026/06/10 07:15] – rion | user:rion [2026/06/10 14:45] (current) – rion | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== Storage |
| {{toc>}} | {{toc>}} | ||
| Line 5: | Line 5: | ||
| > Introduced in **Batocera v43**. | > Introduced in **Batocera v43**. | ||
| - | Batocera' | + | 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 ===== | ===== Overview ===== | ||
| - | {{ : | + | |
| The Storage Manager can: | The Storage Manager can: | ||
| Line 19: | Line 26: | ||
| * Format and prepare new drives | * Format and prepare new drives | ||
| * Use multiple drives simultaneously | * Use multiple drives simultaneously | ||
| - | * Present all ROMs as a single library under `/ | + | * Present all ROMs as a single library under '' |
| * Safely eject drives | * Safely eject drives | ||
| * Automatically refresh game lists | * 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 ===== | ===== Requirements ===== | ||
| Line 48: | Line 79: | ||
| └── roms | └── roms | ||
| </ | </ | ||
| + | |||
| + | Not supported: | ||
| + | |||
| + | < | ||
| + | Drive | ||
| + | ├── nes | ||
| + | ├── snes | ||
| + | └── psx | ||
| + | </ | ||
| + | |||
| + | The Storage Manager currently expects the '' | ||
| ===== Using Existing Drives ===== | ===== Using Existing Drives ===== | ||
| - | {{ : | + | |
| + | |||
| + | When Batocera detects a mounted drive containing a compatible root-level '' | ||
| + | |||
| + | {{wiki: | ||
| - | When Batocera detects a mounted drive containing a compatible `roms` folder, it offers to merge the drive into the Storage Manager. | + | After accepting the prompt, Batocera adds the drive to the storage pool. |
| - | {{ : | + | {{wiki: |
| - | After the merge completes, the ROMs become available alongside your existing collection. | + | After the merge completes, the ROMs stored on the drive become available alongside your existing collection. |
| ===== Formatting a New Drive ===== | ===== Formatting a New Drive ===== | ||
| - | {{ : | + | |
| If a blank drive is detected, Batocera can automatically prepare it for game storage. | If a blank drive is detected, Batocera can automatically prepare it for game storage. | ||
| - | {{ :use_external_storage_format_confirmation.png |Format | + | {{wiki:use_external_storage_format_new_drive_prompt.png? |
| - | Selecting **Format & Merge** | + | <WRAP important> |
| + | Formatting a drive will permanently | ||
| + | </ | ||
| - | {{ :use_external_storage_formatting_drive.png |Formatting drive}} | + | |
| + | |||
| + | Selecting **Format & Merge** will format the drive and add it to the Storage Manager. | ||
| + | |||
| + | {{wiki:use_external_storage_format_confirmation.png? | ||
| Batocera will: | Batocera will: | ||
| + | |||
| * Format the drive | * Format the drive | ||
| - | * Create a `roms` folder | + | * Create a root-level '' |
| * Generate the standard ROM directory structure | * Generate the standard ROM directory structure | ||
| * Merge the drive into the Storage Manager | * Merge the drive into the Storage Manager | ||
| + | * Refresh the game lists | ||
| + | |||
| + | {{wiki: | ||
| ===== Using Multiple Drives ===== | ===== Using Multiple Drives ===== | ||
| Line 93: | Line 149: | ||
| / | / | ||
| </ | </ | ||
| + | |||
| + | Games can be distributed across multiple drives while still appearing as one collection inside EmulationStation. | ||
| ===== Internal Drives ===== | ===== Internal Drives ===== | ||
| Line 98: | Line 156: | ||
| The Storage Manager is not limited to removable USB devices. | The Storage Manager is not limited to removable USB devices. | ||
| - | Additional internal | + | Additional internal drives can also be used. |
| + | |||
| + | For example: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | As long as the drive is mounted | ||
| + | |||
| + | 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 | ||
| + | </ | ||
| ===== Safe Drive Removal ===== | ===== Safe Drive Removal ===== | ||
| - | {{ : | + | |
| Drives can be safely removed from: | Drives can be safely removed from: | ||
| - | * Main Menu | + | |
| - | * System Settings | + | |
| - | * Eject an External | + | |
| - | {{ :use_external_storage_safe_eject_confirmation.png |Eject confirmation}} | + | {{wiki:use_external_storage_safe_eject_menu.png? |
| - | {{ : | + | After selecting the drive, Batocera asks for confirmation before removing it from the storage pool. |
| - | Batocera automatically updates the storage pool and refreshes game lists. | + | {{wiki: |
| + | |||
| + | Batocera automatically updates the storage pool and refreshes | ||
| + | |||
| + | {{wiki: | ||
| + | |||
| + | Games stored only on the removed drive will disappear from the library until that drive is connected and merged again. | ||
| ===== What Gets Merged? ===== | ===== What Gets Merged? ===== | ||
| - | Only: | + | Only the ROM library is merged: |
| < | < | ||
| / | / | ||
| </ | </ | ||
| - | |||
| - | is merged. | ||
| Folders such as: | Folders such as: | ||
| Line 132: | Line 215: | ||
| / | / | ||
| / | / | ||
| + | / | ||
| + | / | ||
| </ | </ | ||
| remain on internal storage. | 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 ===== | ===== Advanced Technical Details ===== | ||
| - | Batocera uses **MergerFS** to combine ROM folders from multiple drives. | + | Batocera uses **MergerFS** to combine ROM folders from multiple drives |
| - | Current | + | 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 | ||
| < | < | ||
| Line 148: | Line 305: | ||
| </ | </ | ||
| - | **eplfs** means **Existing Path, Least Free Space**. | + | **eplfs** means: |
| + | |||
| + | < | ||
| + | Existing Path, Least Free Space | ||
| + | </ | ||
| When writing a new file: | When writing a new file: | ||
| - | * A branch containing | + | * MergerFS looks for branches where the target folder |
| - | * The branch with the least free space is preferred | + | * Among those branches, the branch with the least free space is preferred |
| * Branches with less than 4 GB free are ignored | * Branches with less than 4 GB free are ignored | ||
| - | * Files can move automatically if a drive becomes full | + | * If a drive becomes full during a write operation, the file can automatically |
| + | |||
| + | 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 | ||
| + | |||
| + | 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 ===== | ===== References ===== | ||
| - | Batocera TV – '' | + | * Batocera TV — '' |
| + | * Storage Manager demonstration: | ||
| + | * https:// | ||
| - | https://youtu.be/XpH27Yswe38? | + | * Batocera Storage Manager source code: |
| + | * https://github.com/ | ||
- user/rion.1781075749.txt.gz
- Last modified: 3 months ago
- by rion