Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

raidcore-assemble

A Linux userspace tool that assembles AMD RaidXpert2 / RAIDCore fakeRAID arrays using device-mapper. No proprietary AMD drivers required.

Disclaimer: This tool is provided as-is with no warranty of any kind. It interacts directly with raw block devices and reverse-engineered metadata formats. By using this tool, you accept full responsibility for any consequences, including but not limited to data loss, data corruption, or hardware issues. The author(s) shall not be held liable for any damages resulting from the use of this software. Always back up your data before using this tool.

The Problem

AMD RaidXpert2 is a fakeRAID controller built into AMD chipsets. It uses a proprietary on-disk metadata format (RAIDCore) that has no official Linux support. Drives configured with RaidXpert2 in Windows are invisible to Linux — dmraid, mdadm, and standard filesystem tools cannot read the metadata or assemble the arrays.

This tool reverse-engineers the RAIDCore metadata format, parses the array configuration directly from disk, and assembles the virtual volume using Linux's native device-mapper subsystem.

Supported Configurations

RAID Type Status
JBOD / Span (concatenation) Fully supported
RAID 0 (stripe) Detected, experimental (needs testing with more hardware)
RAID 1 (mirror) Detected, not yet implemented
Other levels Detected and reported

Tested with:

  • AMD 600-series chipset (PCI 1022:8590)
  • NVMe SSDs in JBOD / Span configuration
  • NTFS-formatted volumes created in Windows

Other AMD chipsets with RaidXpert2 likely use the same RAIDCore metadata format and should work.

Requirements

  • Python 3.6+
  • dmsetup (device-mapper userspace tools)
  • kpartx (partition mapper for device-mapper devices)
  • ntfs-3g (optional, for mounting NTFS volumes)
  • Root privileges

Install dependencies

Debian / Ubuntu / Pop!_OS:

sudo apt install dmraid kpartx ntfs-3g

Fedora / RHEL:

sudo dnf install device-mapper kpartx ntfs-3g

Arch Linux:

sudo pacman -S device-mapper multipath-tools ntfs-3g

Installation

# Download the script
sudo curl -Lo /usr/local/bin/raidcore-assemble https://raw.githubusercontent.com/<OWNER>/<REPO>/main/raidcore-assemble
sudo chmod +x /usr/local/bin/raidcore-assemble

Or clone and symlink:

git clone https://github.com/<OWNER>/<REPO>.git
sudo ln -s "$(pwd)/<REPO>/raidcore-assemble" /usr/local/bin/raidcore-assemble

Quick Start

# 1. Scan for drives with RAIDCore metadata
sudo raidcore-assemble scan

# 2. View array details and verify configuration
sudo raidcore-assemble info

# 3. Assemble the array
sudo raidcore-assemble assemble

# 4. Mount the volume (read-only by default)
sudo raidcore-assemble mount /mnt/raidcore

# Or mount read-write
sudo raidcore-assemble mount --rw /mnt/raidcore

# 5. (Optional) Enable auto-mount on boot
sudo raidcore-assemble install --rw /mnt/raidcore

Usage

raidcore-assemble <command> [options]

Commands:
  scan          Find drives with RAIDCore metadata
  info          Show parsed array configuration and device-mapper table
  assemble      Create the device-mapper virtual device
  disassemble   Remove the device-mapper device and partitions
  mount         Mount the largest NTFS partition from the array
  unmount       Unmount and tear down everything
  install       Install a systemd service for auto-mount on boot
  uninstall     Remove the systemd service
  dump          Export raw metadata as JSON for troubleshooting

Options:
  --rw          Mount read-write (default is read-only)
  --dry-run     Show what would be done without executing (assemble only)
  --name NAME   Custom device-mapper name (default: raidcore_jbod)
  path          Mount point path (mount/install) or output file (dump)

Examples

# View the device-mapper table without assembling
sudo raidcore-assemble assemble --dry-run

# Mount with a custom device-mapper name
sudo raidcore-assemble assemble --name my_array
sudo raidcore-assemble mount --name my_array /mnt/my_array

# Save diagnostic dump for troubleshooting
sudo raidcore-assemble dump diagnostics.json

# Full teardown
sudo raidcore-assemble unmount

# Remove boot service
sudo raidcore-assemble uninstall

How It Works

Metadata Format

AMD RaidXpert2 stores RAIDCore metadata at fixed offsets on each member disk:

Offset Content
10 MiB Superblock — 64 bytes. Contains the RAIDCore magic signature, per-disk identifier, and metadata region size.
11 MiB Config block — ~3 KiB. Contains controller info (PCI IDs), disk member records, volume configuration (RAID type, total size, member count), and per-disk data mapping (physical sector offsets and sizes). A backup copy follows immediately after.

Each disk in the array carries its own superblock with a unique disk identifier, plus a shared copy of the full array configuration.

Assembly Process

  1. Scan — Read sector at 10 MiB on every NVMe/SATA block device, check for RAIDCore magic
  2. Parse — Read the config block at 11 MiB, extract disk member records and volume mapping
  3. Match — Correlate disk identifiers from the config with detected physical devices
  4. Map — For JBOD/span: create a linear device-mapper table concatenating each member's data region in order
# Example device-mapper table for a 2-disk JBOD span:
0 <disk0_sectors> linear /dev/<disk0> <data_offset>
<disk0_sectors> <disk1_sectors> linear /dev/<disk1> <data_offset>
  1. Partition scankpartx reads the GPT/MBR inside the virtual device and creates partition nodes
  2. Mount — The largest NTFS (or other) partition is mounted at the specified path

Dual-Boot Considerations

If you dual-boot with Windows:

  • Windows Fast Startup leaves the NTFS volume in a hibernated state, which prevents clean read-write mounting on Linux. Disable it in Windows: Settings > Power Options > "Turn on fast startup" (uncheck).
  • Read-only mode (the default) is always safe regardless of Fast Startup state.
  • If ntfs-3g refuses to mount read-write after a Windows session, either run chkdsk in Windows first or boot Windows and perform a clean shutdown (not hibernate/sleep).

Troubleshooting

The script finds no drives

  • Verify AMD RAID mode is enabled in BIOS/UEFI (not AHCI)
  • Check that drives are detected by the kernel: lsblk
  • Ensure you are running as root: sudo raidcore-assemble scan

Assembly succeeds but no partitions appear

  • Check dmesg | tail -20 for errors
  • The volume may use a partition scheme other than GPT/MBR
  • Run sudo blkid /dev/mapper/raidcore_jbod to check for direct filesystem (no partition table)

Mount fails with "NTFS volume is hibernated"

  • Disable Windows Fast Startup (see Dual-Boot section above)
  • Or mount read-only: sudo raidcore-assemble mount /mnt/raidcore (without --rw)

Getting help with unsupported configurations

If the tool detects your array but cannot assemble it (unsupported RAID type, garbled data, etc.):

# Generate a diagnostic dump
sudo raidcore-assemble dump diagnostics.json

This creates a JSON file containing:

  • System info (kernel version, block device layout, PCI devices)
  • Raw metadata hex from each detected drive (superblock + config block + MBR)
  • Parsed configuration fields

The dump contains no file contents or personal data — only disk geometry and RAID metadata. It is safe to share publicly.

Open an issue and attach the dump file. This provides everything needed to diagnose the problem and extend support for your hardware.

Metadata Reference

For developers and contributors, here is the known RAIDCore on-disk structure:

Superblock (10 MiB from disk start, 64 bytes)

Offset  Size  Field
0x00    8     Per-disk checksum / nonce
0x08    8     Magic: "RAIDCore" (ASCII)
0x10    8     Per-disk identifier (referenced by config records)
0x18    2     Version / flags
0x20    8     Metadata region size (bytes)
0x28    4     Block size
0x2C    4     Entry count
0x30    8     Additional metadata field
0x38    8     Per-disk UUID

Config Block (11 MiB from disk start)

Header (offset 0x000):

  • PCI vendor/device IDs at +0x1C/+0x20 (e.g., 1022:8590 for AMD)
  • Config sequence number at +0x14

Disk Member Records (offset 0x280, 0x80 bytes each):

  • Record type marker: 0x25BC
  • 8-byte disk ID at +0x04 (matches superblock +0x10)
  • Member index at +0x0C
  • Registered for all drives seen by the controller (including non-RAID drives)

Volume Record (offset 0x400):

  • Record type marker: 0x25BD
  • Total virtual volume size (sectors) at +0x50
  • RAID type code at +0x60 (observed: 5 = JBOD/span)
  • Volume member count at +0x68

Disk Mapping Records (offset 0x600, 0x40 bytes each):

  • 8-byte disk ID at +0x00
  • Member index at +0x08
  • Physical data start sector at +0x20 (64-bit LE)
  • Data size in sectors at +0x28 (64-bit LE)

Known RAID Type Codes

Code Type
0 RAID 0 (stripe)
1 RAID 1 (mirror)
5 JBOD / Span

Other codes may exist — please share a dump if you encounter one.

Contributing

Contributions are welcome, especially:

  • RAID 0/1/10 testing — If you have a RaidXpert2 RAID 0, 1, or 10 array, please run sudo raidcore-assemble dump and open an issue with the output. This will allow extending support.
  • Other AMD chipsets — The metadata format may vary slightly across chipset generations. Dumps from different hardware help verify compatibility.
  • SATA support — The tool scans SATA devices but has only been tested with NVMe. SATA confirmation welcome.

License

MIT

About

Assemble AMD RaidXpert2 / RAIDCore fakeRAID arrays on Linux using device-mapper. No proprietary drivers required.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages