[RECOVERY][MOD] MultiROM for Xperia X Performance

Search This thread

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
vh3puLb.png
Introduction

MultiROM is one-of-a-kind multi-boot mod. It can boot any Android ROM as well as other systems like Ubuntu Touch, once they are ported to that device. Besides booting from device's internal memory, MultiROM can boot from USB drive connected to the device via OTG cable. The main part of MultiROM is a boot manager, which appears every time your device starts and lets you choose ROM to boot. You can see how it looks on the left image below and in gallery. ROMs are installed and managed via modified TWRP recovery. You can use standard ZIP files to install secondary Android ROMs and MultiROM even has its own installer system, which can be used to ship other Linux-based systems.

Features:
* Multiboot any number of Android ROMs
* Restore nandroid backup as secondary ROM
* Boot from USB drive attached via OTG cable

You can also watch a video which shows it in action.



Warning!

It _is_ dangerous. This whole thing is basically one giant hack - none of these systems are made with multibooting in mind. It is no longer messing with data partition or boot sector, but it is possible that something goes wrong and you will have to flash factory images again. Make backups. Always.



Installation
Manual installation
Firstly, there are videos on youtube. If you want, just search for "MultiROM installation" on youtube and watch those, big thanks to all who made them. There is also an awesome article on Linux Journal.

MultiROM has 2 parts you need to install + one optional (deprecated) :
  • MultiROM (multirom-YYYYMMDD-v33x-device.zip) - download the ZIP file from second post and flash it in recovery.
  • Modified recovery (multirom-YYYYMMDD-recovery-fota-device.zip) - download the ZIP file from second post and use a recovery
    to flash it into the FOTA partition (see TWRP 3 for more informations).
  • UNNECESSARY: Patched kernel - You can use those kernels on most Marshmallow based primary ROMs to add kexec boot support.
    Kexec support is no longer required thanks to the no-kexec workaround by nkk71.
    For convenience reasons, I enabled the workaround by default if kexec is not found.
You current rom will not be erased by the installation.
Download links are in the second post.



Adding ROMs
1. Android
Go to recovery, select Advanced -> MultiROM -> Add ROM. Select the ROM's zip file and confirm.

Recommended values are (not needed for ext4 storages) :
  • Cache : Keep default value
  • Data : Minimum 4000 for proper usage
  • System : 1500 to 2000 should be enough for most installs


Using USB drive
During installation, recovery lets you select install location. Plug in the USB drive, wait a while and press "refresh" so that it shows partitions on the USB drive. You just select the location (extX, NTFS and FAT32 partitions are supported) and proceed with the installation.
If you wanna use other than default FAT32 partition, just format it in PC. If you don't know how/don't know where to find out how, you probably should not try installing MultiROM.
If you are installing to NTFS or FAT32 partition, recovery asks you to set image size for all the partitions - this cannot be easilly changed afterward, so choose carefully. FAT32 is limited to maximum of 4095MB per image - it is limitation of the filesystem, I can do nothing about that.
Installation to USB drives takes a bit longer, because the flash drive is (usually) slower and it needs to create the images, so installation of Android to 4Gb image on a pretty fast USB drive takes about 20 minutes maximum.
Enumerating USB drive can take a while in MultiROM menu, so when you press the "USB" button in MultiROM, wait a while (max. 30-45s) until it searches the USB drive. It does it by itself, no need to press something, just wait.​



Updating/changing ROMs

1. Primary ROM (Internal)
  • Flash ROM's ZIP file as usual, do factory reset if needed (it won't erase secondary ROMs)
  • Go to Advanced -> MultiROM in recovery and do Inject curr. boot sector.
  • OPTIONAL: Reflash the kernel patcher to add kexec support
2. Secondary Android ROMs
If you want to change the ROM, delete it and add new one. To update ROM, follow these steps:
  • Go to Advanced -> MultiROM -> List ROMs and select the ROM you want to update.
  • Select "Flash ZIP" and flash ROM's ZIP file.



Explanation of recovery menus

Main menu
- Add ROM - add ROM to boot
- List ROMs - list installed ROMs and manage them
- Inject boot.img file - When you download for example kernel, which is distrubuted as whole boot.img (eg. franco kernel), you have to use this option on it, otherwise you would lose MultiROM.
- Inject curr. boot sector - Use this option if MultiROM does not show up on boot, for example after kernel installation.
- Settings - well, settings.

Manage ROM
- Rename, delete - I believe these are obvious
- Flash ZIP (only Android ROMs) - flash ZIP to the ROM, for example gapps
- Add/replace boot.img - replaces boot.img used by this ROM, this is more like developer option.
- Re-patch init - this is available only for ubuntu. Use it when ubuntu cannot find root partition, ie. after apt-get upgrade which changed the init script.​


Source code


MultiROM available for Dora also thanks to :
- [MENTION]Tasssadar[/MENTION]
- [MENTION]nkk71[/MENTION]
- The XperiaMultiROM team​

XDA:DevDB Information
MultiROM for Xperia X Performance, Tool/Utility for the Sony Xperia X Performance

Contributors
Adrian DC
Source Code: http://forum.xda-developers.com/google-nexus-5/orig-development/mod-multirom-v24-t2571011


Version Information
Status: No Longer Updated

Created 2016-10-08
Last Updated 2019-08-06
 

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
Reserved

Downloads

1. Main downloads

MultiROM for Xperia X Performance (Dora): https://mega.nz/#F!Ckd2HbwI!NFv3bh7J87lHTi3cujnV_g
Downloads mirror : https://basketbuild.com/devs/AdrianDC

MultiROM: multirom-2017MMDD-v33x-device.zip
Modified recovery (based on TWRP 3): multirom-2017MMDD-recovery-fota-device.zip

Regular TWRP with my same sources: https://mega.nz/#F!DtsERIzb!OFINTFpTQ6CF85alkcIpgA



2. Uninstaller

MultiROM uninstaller: multirom-2017MMDD-uninstaller-device.zip
Flash this ZIP file to remove MultiROM from your device. It will erase all secondary ROMs.
Otherwise, reflash a ROM or a boot.img without injection (or the v33x zip) to remove MultiROM boot from your device.
Then delete the "multirom..." folders from internal & external storages.
If you don't want MultiROM menus in recovery, re-flash a normal TWRP, but it is not needed,
those menus don't do anything if MultiROM is not installed.



How to install for the first time

  • Flash the 2 MultiROM zips as explained
  • Reboot to the FOTA Recovery (Volume +)
  • In MultiROM TWRP, Add a ROM, set everything properly
  • Wait for the ROM to be installed (can take a while)
  • In MultiROM screen, choose the ROM location
  • For the concerned ROM, "Flash zip" for wished zips (GApps, SuperSU, Addons...)
  • Reboot the phone


How to install only the recovery

  • (Option 1) Flash the ...-recovery-fota-device.zip from a recovery
  • (Option 2) Extract the img from ...-recovery-fota-device.zip,
    then use 'fastboot flash recovery twrp.img' to install to FOTA partition
  • Reboot the phone


Migrate Stock ROM to internal or MicroSD

  • Reboot to the FOTA Recovery (on boot or with power keys)
  • Ensure you have already installed Sony Stock Patcher or a custom bootimage
  • Perform a ROM Backup (at least system, data, cache, boot)
  • Add a ROM, select the previously made backup
  • Wait for the ROM to be installed (can take a while)
  • Reboot the phone


Update Stock ROM on internal or MicroSD

  • Backup internal data / storage
  • Upgrade to last FTF official release you want
  • Reboot to the FOTA Recovery (on boot or with power keys)
  • Install the Recovery image you want to use
  • Install Sony Stock Patcher or a custom bootimage
  • Perform a ROM Backup (at least system, cache, boot)
  • Add a ROM, select the previously made backup
  • Wait for the ROM to be installed (can take a while)
  • Inside *Storage*/multirom-*/, move the data folder
    from the old installation to the new one
  • Rename and delete the ROMs as you wish
  • Reboot the phone



Changelog
Code:
MultiROM v33x - TWRP 3.1.1 - 07/06/2017
=========================================
* New implementation to handle external boot
   on Ext4 / F2FS MicroSD or USB Drive in order
   to allow access to the external storage for media,
   through the storage 'external_multirom' path

MultiROM v33x - TWRP 3.1.1 - 24/05/2017
======================================
* Fix touchscreen init race condition on a specific variant

MultiROM v33x - TWRP 3.1.1 - 22/05/2017
======================================
* Include all recent improvements from TWRP 3.1.1
* Touchscreen init improvement to match Stock .223
* Fix for SDCardFS full support of the internal storage
* Known common issue : encrypted boot for now

MultiROM v33x - TWRP 3.1.0 - 17/03/2017
======================================
* Include all recent improvements from TWRP 3.1.0
* Proper TWRP support of Stock Nougat encryption
* Known common issue : encrypted boot for now
* Fix USB handling for Sony Stock ROMs

MultiROM v33x - TWRP 3.0.3 - 05/03/2017
======================================
* Built in a clean new tree of Android 7.1.1 (replaces 6.0)
* Multiple fixes to support 7.1 changes
* Include all recent improvements from TWRP 3.0.3
* Fix the 7.1 busybox cpio corruption, needed for MultiROM

MultiROM v33x - TWRP 3.0.2 - 22/12/2016
=========================================
* Kernel updated to Stock Nougat, with proper
> and minimal patching for custom changes
* Touchscreen handling of Stock Nougat
* Encryption handling of Stock Nougat

MultiROM v33x - TWRP 3.0.2 - 18/12/2016
=========================================
* Minor improvements of MultiROM
* Added support for Sony Stock ELF (64 bits) bootimages
* libbootimg changes from my recent updates

MultiROM v33x - TWRP 3.0.2 - 08/10/2016
=========================================
* Initial dora public release


Recent ROMs tested so far :
Code:
Stock SONY 7.1 : OK (Primary & Second)
Stock SONY 7.0 : OK (Primary & Second)
Stock SONY 6.0 : OK (Primary & Second)
AOSP 7.1.1 : OK (Primary & Second, Work in Progress)
CyanogenMod 14.1 : OK (Primary & Second, Work in Progress)

Other ROMs : To confirm & report here
 

Attachments

  • 1.png
    1.png
    62.4 KB · Views: 1,162
  • 2.png
    2.png
    64.5 KB · Views: 1,100
  • 3.png
    3.png
    59 KB · Views: 1,115
  • 4.png
    4.png
    61 KB · Views: 1,055
Last edited:

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
Reserved

FAQ and other notes
About security
In order to make multi-booting possible, MultiROM has to sacrifice some security measures. Firstly, on secondary Android ROMs, /system is not mounted read-only. While there are other things preventing malicious software from messing with /system, this might potentialy make it easier for such software to attack that system.
Next, MultiROM doesn't work with /data encryption. Not many people who use custom ROMs also use encryption anyway, so that isn't much of a concern.​

What do the ROMs share?
All ROMs are separate, except /sdcard, which is shared between all Android ROMs.​

Why is my USB connection to computer not detected ?
Uncheck the "Enable ADB" option in MultiROM Settings.​

How many ROMs can I have?/Where are the ROMs stored?
You can have as many ROMs as you can fit in your /sdcard. All the ROMs are stored in /sdcard/multirom/roms or on an USB drive./external SD card. This folder is unaccessible in Android, to prevent mediascanner from scanning it. You can either in recovery, or obtain root and go to /data/media/0/multirom/roms.

Can I have different versions of Android working alongside
Yes.​

The menu with all the ROMs won't show up during boot, how to fix it?
Either re-flash the MultiROM zip or go to recovery, Advanced -> MultiROM -> Inject curr. boot sector.

The reason for this is that something rewrote your boot.img, which happens for example when you flash a kernel. MultiROM's boot menu is part of the boot image, so it has to be added into it again.


Something wrong happened, I lost something or it's really laggy
You have been warned about making backups & the fact this is more experimental than stable.
You alone will be responsible for loosing data or having an usable ROM when you really needed it.

Everyone in this thread will try to help you, but we can't do backups of your data ourselves.
Thanks for your understanding, remember to read the previous comments and please try to help each other.

Current local manifest of the MultiROM build
Code:
<!-- https://github.com/AdrianDC/multirom_development_sony -->
 
Last edited:

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
MultiROM 20170522: Release based on TWRP 3.1.1, including changes to match 7.1.1 touchscreen init.
Regular TWRP 20170521: TWRP 3.1.1 release, including changes to match 7.1.1 touchscreen init.
 
Last edited:
  • Like
Reactions: serajr

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
Note about MultiROM and SDCardFS devices

Here's a general note about MultiROM that involves issues with SDCardFS usage:

More and more devices OEMs are starting to use SDCardFS enabled by default on their releases.
Depending on the device and installations, we started finding random behaviours of MultiROM secondary ROMs.

Basically the issue is that a booted secondary ROM using SDCardFS would prevent access to the "Internal Storage",
mostly visible by an "unmounted" internal storage and mostly all Google applications failing in sequence.

A more in-depth search shows that running an "ls -l" on the internal storage paths
fail directly with an "-EXDEV" > "cross-device linkage" error, which means the original and target devices don't match.
The SDCardFS kernel driver is actually returning this -EXDEV failure when it detects such an issue.

Going a step further means comparing which partitions are mounted where, through "mount".

We can confirm SDCardFS is being used by the ROM through the following outputs :
/data/media on /mnt/runtime/default/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
/data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
/data/media on /mnt/runtime/read/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
/data/media on /mnt/runtime/write/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)


However, it also means that /data/media is "mounted" as an sdcardfs file system in the regular internal storage paths.
And the interesting part concerning MultiROM is that we actually mount /data/media on our own to match our paths.

On a "working" secondary installation, we have this type of mount :
/dev/block/mmcblk0p54 on /data/media type ext4 (rw,seclabel,relatime,noauto_da_alloc,errors=panic,data=ordered)

However on a "failing with -EXDEV" secondary installation, we have this type of mount :
/dev/block/mmcblk0p54 on /data/media/0 type ext4 (rw,seclabel,relatime,noauto_da_alloc,errors=panic,data=ordered)

As we can see, the internal partition is being mounted on /data/media/0, which is not an issue by itself,
but the fact the /data/media is later mounted as internal storage means that we're creating a cross-device linkage:
/data/media is owned by the /data partition, running from our external storage with MultiROM, and its sub-path ./0 is on the Internal,
whereas the working situation is that /data/media is directly owned by its original partition hence no cross-device linkage.


Now the question would be : Why the mounted path differs ?
The "multirom_create_media_link" function handles the internal storage mounting (https://github.com/multirom-dev/multirom/commit/c9bd12186baa6911d46138c6c77379c6c3eaa767)
A proper output of this function in the kernel logs is "multirom: Making media dir: api 25, media_new 1, /realdata/media to /data/media"
and a faulty one for SDCardFS to work is "Making media dir: api 25, media_new 0, /realdata/media to /data/media/0"

This was never an issue since 4+ years because the paths and loop would be invisibly used,
and the missing path created through the recursive mkdir hence path resolution was never an issue.
On the other hand, SDCardFS prevents this linkage therefore introducing the issue.

An initial fix can be found here, tested on the Xperia X Performance with and without an internal storage matching the issue.
https://github.com/multirom-dev/multirom/pull/11/commits/81295cd6971317d955cb0c78b41d147b891a601b
The change is also valid for non-sdcardfs devices, tested on Sony 8960 for example, since the path is used the same way.

I wrote this in public here in case other MultiROM devs or new maintainers would face such an issue,
and would not (yet) use our "multirom-dev" sources for updated MultiROM projects.
 
Last edited:

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
New special release of MultiROM from 20170607.

Implements something I wished to fix for at least 10 months on MultiROM:
External storage (MicroSD or USB Drive) using Ext4 or F2FS file systems are
now finally accessible from the Android userspace once booted from them,
by means of a special new storage folder called 'external_multirom' that serves
as a bridge between the external storage and Android.


You can therefore once again use the external MicroSD with Ext4 and store music, data, ...,
without Android blocking access to it with "Corrupted storage" notifications.

Why use Ext4 / F2FS MicroSD in the first place ? With MultiROM, these allow us
to install secondary ROMs directly on the MicroSD without setting space sizes / limits,
therefore directly on the drive instead of independent disk images as done for vFAT / FAT32.
The storage space is unlimited / shared between all installs and are faster to create / run / use.

About SDCardFS : A similar issue as the one reported and fixed in the previous post happens here,
the 'external_storage' is also a cross-device linkage and SDCardFS will fail on purpose to give access to the path.
Disabling SDCardFS (through the build.prop property) allows to use the ROM as usual while also accessing the path.

All technical details about the issue and the implementation can be seen here : https://github.com/AdrianDC/multirom_core/commit/0acfa4c53429a7fcf7c2c573b857f2ae69ca5b5a
 
  • Like
Reactions: dic1911

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
MultiRom doesn't seem to show up on boot even if I "inject current boot sector".
It is working though as the recovery works fine and I already installed a secondary rom.
I can't boot into it though.

See the third post. You can't keep your device encrypted if you want the bootimage to access data. Therefore a factory reset to erase the data partition (including internal data, careful) is needed.
 
  • Like
Reactions: Dezqo

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
Thanks for answering, no idea how I didn't notice that :)
Since there is no way to "decrypt" without wiping, is this completely impossible or just not yet integrated?
It's my day to day phone and even though I make nandroid backups I can't to wipe right now.

An easy way would be backup, save internal files to a computer, factory reset, restore data.
Factory reset is important, not just a "Wipe" because the encryption sectors would be kept with a wipe.
 
  • Like
Reactions: Dezqo

AdrianDC

Recognized Developer
Dec 22, 2009
2,206
12,975
Île-de-France
adriandc.github.io
Thanks. Just to be clear, if I make a backup from TWRP to my sdcard and then factory reset, will the device then be decrypted or are any more steps necessary?
Sorry for all the questions but it seems not many people have actually tried MultiRom on this device.

Be specific. The term sdcard mostly designates internal storage.
Therefore you should backup to the "MicroSD" + backup all your relevant data from internal to MicroSD or PC.

Once factory reset, data partition is formatted, hence you start clean.
TWRP recommends to reboot to recovery at this stage, which you should do as advised.
 
  • Like
Reactions: Klaus N.

Top Liked Posts

  • There are no posts matching your filters.
  • 7
    vh3puLb.png
    Introduction

    MultiROM is one-of-a-kind multi-boot mod. It can boot any Android ROM as well as other systems like Ubuntu Touch, once they are ported to that device. Besides booting from device's internal memory, MultiROM can boot from USB drive connected to the device via OTG cable. The main part of MultiROM is a boot manager, which appears every time your device starts and lets you choose ROM to boot. You can see how it looks on the left image below and in gallery. ROMs are installed and managed via modified TWRP recovery. You can use standard ZIP files to install secondary Android ROMs and MultiROM even has its own installer system, which can be used to ship other Linux-based systems.

    Features:
    * Multiboot any number of Android ROMs
    * Restore nandroid backup as secondary ROM
    * Boot from USB drive attached via OTG cable

    You can also watch a video which shows it in action.



    Warning!

    It _is_ dangerous. This whole thing is basically one giant hack - none of these systems are made with multibooting in mind. It is no longer messing with data partition or boot sector, but it is possible that something goes wrong and you will have to flash factory images again. Make backups. Always.



    Installation
    Manual installation
    Firstly, there are videos on youtube. If you want, just search for "MultiROM installation" on youtube and watch those, big thanks to all who made them. There is also an awesome article on Linux Journal.

    MultiROM has 2 parts you need to install + one optional (deprecated) :
    • MultiROM (multirom-YYYYMMDD-v33x-device.zip) - download the ZIP file from second post and flash it in recovery.
    • Modified recovery (multirom-YYYYMMDD-recovery-fota-device.zip) - download the ZIP file from second post and use a recovery
      to flash it into the FOTA partition (see TWRP 3 for more informations).
    • UNNECESSARY: Patched kernel - You can use those kernels on most Marshmallow based primary ROMs to add kexec boot support.
      Kexec support is no longer required thanks to the no-kexec workaround by nkk71.
      For convenience reasons, I enabled the workaround by default if kexec is not found.
    You current rom will not be erased by the installation.
    Download links are in the second post.



    Adding ROMs
    1. Android
    Go to recovery, select Advanced -> MultiROM -> Add ROM. Select the ROM's zip file and confirm.

    Recommended values are (not needed for ext4 storages) :
    • Cache : Keep default value
    • Data : Minimum 4000 for proper usage
    • System : 1500 to 2000 should be enough for most installs


    Using USB drive
    During installation, recovery lets you select install location. Plug in the USB drive, wait a while and press "refresh" so that it shows partitions on the USB drive. You just select the location (extX, NTFS and FAT32 partitions are supported) and proceed with the installation.
    If you wanna use other than default FAT32 partition, just format it in PC. If you don't know how/don't know where to find out how, you probably should not try installing MultiROM.
    If you are installing to NTFS or FAT32 partition, recovery asks you to set image size for all the partitions - this cannot be easilly changed afterward, so choose carefully. FAT32 is limited to maximum of 4095MB per image - it is limitation of the filesystem, I can do nothing about that.
    Installation to USB drives takes a bit longer, because the flash drive is (usually) slower and it needs to create the images, so installation of Android to 4Gb image on a pretty fast USB drive takes about 20 minutes maximum.
    Enumerating USB drive can take a while in MultiROM menu, so when you press the "USB" button in MultiROM, wait a while (max. 30-45s) until it searches the USB drive. It does it by itself, no need to press something, just wait.​



    Updating/changing ROMs

    1. Primary ROM (Internal)
    • Flash ROM's ZIP file as usual, do factory reset if needed (it won't erase secondary ROMs)
    • Go to Advanced -> MultiROM in recovery and do Inject curr. boot sector.
    • OPTIONAL: Reflash the kernel patcher to add kexec support
    2. Secondary Android ROMs
    If you want to change the ROM, delete it and add new one. To update ROM, follow these steps:
    • Go to Advanced -> MultiROM -> List ROMs and select the ROM you want to update.
    • Select "Flash ZIP" and flash ROM's ZIP file.



    Explanation of recovery menus

    Main menu
    - Add ROM - add ROM to boot
    - List ROMs - list installed ROMs and manage them
    - Inject boot.img file - When you download for example kernel, which is distrubuted as whole boot.img (eg. franco kernel), you have to use this option on it, otherwise you would lose MultiROM.
    - Inject curr. boot sector - Use this option if MultiROM does not show up on boot, for example after kernel installation.
    - Settings - well, settings.

    Manage ROM
    - Rename, delete - I believe these are obvious
    - Flash ZIP (only Android ROMs) - flash ZIP to the ROM, for example gapps
    - Add/replace boot.img - replaces boot.img used by this ROM, this is more like developer option.
    - Re-patch init - this is available only for ubuntu. Use it when ubuntu cannot find root partition, ie. after apt-get upgrade which changed the init script.​


    Source code


    MultiROM available for Dora also thanks to :
    - [MENTION]Tasssadar[/MENTION]
    - [MENTION]nkk71[/MENTION]
    - The XperiaMultiROM team​

    XDA:DevDB Information
    MultiROM for Xperia X Performance, Tool/Utility for the Sony Xperia X Performance

    Contributors
    Adrian DC
    Source Code: http://forum.xda-developers.com/google-nexus-5/orig-development/mod-multirom-v24-t2571011


    Version Information
    Status: No Longer Updated

    Created 2016-10-08
    Last Updated 2019-08-06
    7
    Reserved

    FAQ and other notes
    About security
    In order to make multi-booting possible, MultiROM has to sacrifice some security measures. Firstly, on secondary Android ROMs, /system is not mounted read-only. While there are other things preventing malicious software from messing with /system, this might potentialy make it easier for such software to attack that system.
    Next, MultiROM doesn't work with /data encryption. Not many people who use custom ROMs also use encryption anyway, so that isn't much of a concern.​

    What do the ROMs share?
    All ROMs are separate, except /sdcard, which is shared between all Android ROMs.​

    Why is my USB connection to computer not detected ?
    Uncheck the "Enable ADB" option in MultiROM Settings.​

    How many ROMs can I have?/Where are the ROMs stored?
    You can have as many ROMs as you can fit in your /sdcard. All the ROMs are stored in /sdcard/multirom/roms or on an USB drive./external SD card. This folder is unaccessible in Android, to prevent mediascanner from scanning it. You can either in recovery, or obtain root and go to /data/media/0/multirom/roms.

    Can I have different versions of Android working alongside
    Yes.​

    The menu with all the ROMs won't show up during boot, how to fix it?
    Either re-flash the MultiROM zip or go to recovery, Advanced -> MultiROM -> Inject curr. boot sector.

    The reason for this is that something rewrote your boot.img, which happens for example when you flash a kernel. MultiROM's boot menu is part of the boot image, so it has to be added into it again.


    Something wrong happened, I lost something or it's really laggy
    You have been warned about making backups & the fact this is more experimental than stable.
    You alone will be responsible for loosing data or having an usable ROM when you really needed it.

    Everyone in this thread will try to help you, but we can't do backups of your data ourselves.
    Thanks for your understanding, remember to read the previous comments and please try to help each other.

    Current local manifest of the MultiROM build
    Code:
    <!-- https://github.com/AdrianDC/multirom_development_sony -->
    5
    MultiROM 20170317 update : Includes my fix for USB handling inside Sony Stock ROMs,
    due to stock files permissions losses : https://github.com/AdrianDC/multirom_core/commit/f42b7c5c7c07471882193c2e1e6d53f17dc71236
    3
    Reserved

    Downloads

    1. Main downloads

    MultiROM for Xperia X Performance (Dora): https://mega.nz/#F!Ckd2HbwI!NFv3bh7J87lHTi3cujnV_g
    Downloads mirror : https://basketbuild.com/devs/AdrianDC

    MultiROM: multirom-2017MMDD-v33x-device.zip
    Modified recovery (based on TWRP 3): multirom-2017MMDD-recovery-fota-device.zip

    Regular TWRP with my same sources: https://mega.nz/#F!DtsERIzb!OFINTFpTQ6CF85alkcIpgA



    2. Uninstaller

    MultiROM uninstaller: multirom-2017MMDD-uninstaller-device.zip
    Flash this ZIP file to remove MultiROM from your device. It will erase all secondary ROMs.
    Otherwise, reflash a ROM or a boot.img without injection (or the v33x zip) to remove MultiROM boot from your device.
    Then delete the "multirom..." folders from internal & external storages.
    If you don't want MultiROM menus in recovery, re-flash a normal TWRP, but it is not needed,
    those menus don't do anything if MultiROM is not installed.



    How to install for the first time

    • Flash the 2 MultiROM zips as explained
    • Reboot to the FOTA Recovery (Volume +)
    • In MultiROM TWRP, Add a ROM, set everything properly
    • Wait for the ROM to be installed (can take a while)
    • In MultiROM screen, choose the ROM location
    • For the concerned ROM, "Flash zip" for wished zips (GApps, SuperSU, Addons...)
    • Reboot the phone


    How to install only the recovery

    • (Option 1) Flash the ...-recovery-fota-device.zip from a recovery
    • (Option 2) Extract the img from ...-recovery-fota-device.zip,
      then use 'fastboot flash recovery twrp.img' to install to FOTA partition
    • Reboot the phone


    Migrate Stock ROM to internal or MicroSD

    • Reboot to the FOTA Recovery (on boot or with power keys)
    • Ensure you have already installed Sony Stock Patcher or a custom bootimage
    • Perform a ROM Backup (at least system, data, cache, boot)
    • Add a ROM, select the previously made backup
    • Wait for the ROM to be installed (can take a while)
    • Reboot the phone


    Update Stock ROM on internal or MicroSD

    • Backup internal data / storage
    • Upgrade to last FTF official release you want
    • Reboot to the FOTA Recovery (on boot or with power keys)
    • Install the Recovery image you want to use
    • Install Sony Stock Patcher or a custom bootimage
    • Perform a ROM Backup (at least system, cache, boot)
    • Add a ROM, select the previously made backup
    • Wait for the ROM to be installed (can take a while)
    • Inside *Storage*/multirom-*/, move the data folder
      from the old installation to the new one
    • Rename and delete the ROMs as you wish
    • Reboot the phone



    Changelog
    Code:
    MultiROM v33x - TWRP 3.1.1 - 07/06/2017
    =========================================
    * New implementation to handle external boot
       on Ext4 / F2FS MicroSD or USB Drive in order
       to allow access to the external storage for media,
       through the storage 'external_multirom' path
    
    MultiROM v33x - TWRP 3.1.1 - 24/05/2017
    ======================================
    * Fix touchscreen init race condition on a specific variant
    
    MultiROM v33x - TWRP 3.1.1 - 22/05/2017
    ======================================
    * Include all recent improvements from TWRP 3.1.1
    * Touchscreen init improvement to match Stock .223
    * Fix for SDCardFS full support of the internal storage
    * Known common issue : encrypted boot for now
    
    MultiROM v33x - TWRP 3.1.0 - 17/03/2017
    ======================================
    * Include all recent improvements from TWRP 3.1.0
    * Proper TWRP support of Stock Nougat encryption
    * Known common issue : encrypted boot for now
    * Fix USB handling for Sony Stock ROMs
    
    MultiROM v33x - TWRP 3.0.3 - 05/03/2017
    ======================================
    * Built in a clean new tree of Android 7.1.1 (replaces 6.0)
    * Multiple fixes to support 7.1 changes
    * Include all recent improvements from TWRP 3.0.3
    * Fix the 7.1 busybox cpio corruption, needed for MultiROM
    
    MultiROM v33x - TWRP 3.0.2 - 22/12/2016
    =========================================
    * Kernel updated to Stock Nougat, with proper
    > and minimal patching for custom changes
    * Touchscreen handling of Stock Nougat
    * Encryption handling of Stock Nougat
    
    MultiROM v33x - TWRP 3.0.2 - 18/12/2016
    =========================================
    * Minor improvements of MultiROM
    * Added support for Sony Stock ELF (64 bits) bootimages
    * libbootimg changes from my recent updates
    
    MultiROM v33x - TWRP 3.0.2 - 08/10/2016
    =========================================
    * Initial dora public release


    Recent ROMs tested so far :
    Code:
    Stock SONY 7.1 : OK (Primary & Second)
    Stock SONY 7.0 : OK (Primary & Second)
    Stock SONY 6.0 : OK (Primary & Second)
    AOSP 7.1.1 : OK (Primary & Second, Work in Progress)
    CyanogenMod 14.1 : OK (Primary & Second, Work in Progress)
    
    Other ROMs : To confirm & report here
    3
    Note about MultiROM and SDCardFS devices

    Here's a general note about MultiROM that involves issues with SDCardFS usage:

    More and more devices OEMs are starting to use SDCardFS enabled by default on their releases.
    Depending on the device and installations, we started finding random behaviours of MultiROM secondary ROMs.

    Basically the issue is that a booted secondary ROM using SDCardFS would prevent access to the "Internal Storage",
    mostly visible by an "unmounted" internal storage and mostly all Google applications failing in sequence.

    A more in-depth search shows that running an "ls -l" on the internal storage paths
    fail directly with an "-EXDEV" > "cross-device linkage" error, which means the original and target devices don't match.
    The SDCardFS kernel driver is actually returning this -EXDEV failure when it detects such an issue.

    Going a step further means comparing which partitions are mounted where, through "mount".

    We can confirm SDCardFS is being used by the ROM through the following outputs :
    /data/media on /mnt/runtime/default/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
    /data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
    /data/media on /mnt/runtime/read/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)
    /data/media on /mnt/runtime/write/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,uid=1023,gid=1023,multiuser,allow_utime_grp)


    However, it also means that /data/media is "mounted" as an sdcardfs file system in the regular internal storage paths.
    And the interesting part concerning MultiROM is that we actually mount /data/media on our own to match our paths.

    On a "working" secondary installation, we have this type of mount :
    /dev/block/mmcblk0p54 on /data/media type ext4 (rw,seclabel,relatime,noauto_da_alloc,errors=panic,data=ordered)

    However on a "failing with -EXDEV" secondary installation, we have this type of mount :
    /dev/block/mmcblk0p54 on /data/media/0 type ext4 (rw,seclabel,relatime,noauto_da_alloc,errors=panic,data=ordered)

    As we can see, the internal partition is being mounted on /data/media/0, which is not an issue by itself,
    but the fact the /data/media is later mounted as internal storage means that we're creating a cross-device linkage:
    /data/media is owned by the /data partition, running from our external storage with MultiROM, and its sub-path ./0 is on the Internal,
    whereas the working situation is that /data/media is directly owned by its original partition hence no cross-device linkage.


    Now the question would be : Why the mounted path differs ?
    The "multirom_create_media_link" function handles the internal storage mounting (https://github.com/multirom-dev/multirom/commit/c9bd12186baa6911d46138c6c77379c6c3eaa767)
    A proper output of this function in the kernel logs is "multirom: Making media dir: api 25, media_new 1, /realdata/media to /data/media"
    and a faulty one for SDCardFS to work is "Making media dir: api 25, media_new 0, /realdata/media to /data/media/0"

    This was never an issue since 4+ years because the paths and loop would be invisibly used,
    and the missing path created through the recursive mkdir hence path resolution was never an issue.
    On the other hand, SDCardFS prevents this linkage therefore introducing the issue.

    An initial fix can be found here, tested on the Xperia X Performance with and without an internal storage matching the issue.
    https://github.com/multirom-dev/multirom/pull/11/commits/81295cd6971317d955cb0c78b41d147b891a601b
    The change is also valid for non-sdcardfs devices, tested on Sony 8960 for example, since the path is used the same way.

    I wrote this in public here in case other MultiROM devs or new maintainers would face such an issue,
    and would not (yet) use our "multirom-dev" sources for updated MultiROM projects.