Skip to content

Instantly share code, notes, and snippets.

@65c22
Last active January 26, 2020 13:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 65c22/21b9d59dd09aa2c59ee201b224291e7b to your computer and use it in GitHub Desktop.
Save 65c22/21b9d59dd09aa2c59ee201b224291e7b to your computer and use it in GitHub Desktop.
[Tuto] Redimensionner partition USER pour emuMMC Atmosphère

Tutoriel - Redimensionner la partition USER d'un dump de NAND (pour emuMMC Atmosphère)

Introduction

Introduction:

Ce tutoriel va intéresser les amateurs de l'emuMMC intégré dernièrement au CFW Atmosphère. En effet, vous avez maintenant la possibilité sur AMS de lancer une NAND "alternatif" stockée sur votre carte SD (au lieu d'utiliser celle sur la puce mémoire de votre switch appellé sysNAND). Le redimensionnement de la partition USER (qui contient vos données utilisateur) est utile dans le cas d'un emuMMC/emuNAND pour récupérer une partie du stockage perdu (en moyenne 20Go), en effet il est inutile d'avoir un emuMMC de 32Go puisque vous installez tous vos jeux dans la SD et le dossier Nintendo.

Pour se faire nous allons avoir besoin d'un dump de NAND que vous pouvez réaliser de différentes manières (les tutoriels ne manquent pas sur le forum), j'ai personnellement utiliser la méthode Hekate. Mais à la fin vous obtenez tous les fichiers RAWNAND.bin BOOT0 et BOOT1, pour la méthode que je vais vous expliquez ci-dessous il nous faut fusionner les fichiers du dump en un seul fichier qu'on appellera EMUMMC.bin. Vous pourrez obtenir de nouveaux les trois fichiers avec le BONUS ci-dessous.

Je tiens tout de même à préciser que c'est une méthode que j'ai trouvé sur internet (https://pastebin.com/vPY4HLdV), il doit peut-être en exister une meilleure mais en tout cas ça fonctionne !

Pré-réquis:

  • Un ordinateur avec un système GNU/Linux car nous allons utiliser des outils uniquement disponible sur ce système: gdisk, gparted, les péréphériques de loop. J'esseyerais de voir pour une méthode Windows mais dans tous les cas Linux est plus pratique

  • gparted

  • gdisk

  • ninfs: cet outil permet de travailler avec les fichiers des NAND Nintendo (https://github.com/ihaveamac/ninfs). UTILISER BIEN LA VERSION MASTER ET NON LA DERNIERE RELEASE POUR LE SUPPORT DE L'EMUMMC

  • le fichier prod.keys (contenant vos biskeys pour le decryptage de la NAND) à mettre dans le dossier /root/.switch/prod.keys (car nous allons utiliser ces outils en ROOT)

  • votre fichier EMUMMC.bin (faites en une sauvegarde au cas ou vous foiriez les manipulations) obtenu via la commande (cat BOOT0 BOOT1 rawnand.bin > emummc.bin)

Etape 1 - Monter votre EMUMMC.BIN dans un pérepherique de LOOP:

Afin d'utiliser notre NAND, on va la monter avec losetup (gestion des pérépherique de LOOP sur Linux)

sudo losetup -f --show -o 0x800000 emummc.bin

Cette commande va vous retourner le LOOP dans lequel la NAND a été monté:

/dev/loopX

X étant le LOOP, dans mon cas /dev/loop1, ça sera surement différent chez vous. Mettez le bien de côté.

Etape 2 - Sauvegarder les fichiers de la partition USER du dump

Avant de redimensionner USER, on va en extraire ses données et les mettre de côté pour pouvoir les restaurer.

On crée d'abord des dossier dans lesquels on montera les différentes partitions:

mkdir ~/mount (pour le dump)
mkdir ~/mount_user (pour la partition USER)
mkdir ~/user_backup (ou on mettra le backup de USER temporairement)

On monte dans le dossier ~/mount le LOOP de l'EMUMMC avec ninfs

sudo mount_nandhac /dev/loopX ~/mount

En allant dans le dossier vous trouverez les differents IMG des partitions.

NAND

INFO: On a réaliser le montage en ROOT donc le dossier est uniquement accessible en ROOT si vous voulez le consulter

On retrouve bien notre USER.img d'une taille de 27.9Go. On va maintenant monter ce USER.img dans un autre LOOP.

sudo losetup -f --show ~/mount/USER.img

Vous allez avoir un retour

/dev/loopX2

Il est différent du premier on va l'appeller X2, gardez le de côté.

On le monte dans le dossier ~/mount_user

sudo mount /dev/loopX2 ~/mount_user

USER

On va désormais pouvoir copier les données de la partition USER dans notre dossier de backup ~/user_backup

sudo cp -r ~/mount_user/* ~/user_backup/

C'est plus ou moins long en fonction de la quantité de donnée.

Une fois la sauvegarde terminé, on peut demonter la partition USER, la NAND et le LOOP de USER.

sudo umount ~/mount_user
sudo umount ~/mount
sudo losetup -d /dev/loopX2

Etape 3 - Redimensionner la partition USER

On rentre enfin dans le vif du sujet, il faut d'abord commencer par savoir comment vous voulez redimenssioner votre partition, est-ce que vous voulez l'augumenter ou bien la reduire. Attention, si vous reduisez il faut qu'il y ait encore de la place pour vos données qu'on a sauvegardé précedemment.

Dans mon cas je vais reduire de 10Go la partition, c'est pour l'exemple.

On va commencer par ouvrir l'emummc dans gdisk:

sudo gdisk /dev/loopX

Puis:

i > 11

Afin d'obtenir les informations de la partition 11 correspondant à la partition USER. Mettez le retour de la commande côté c'est important.

On indique au logiciel qu'on travaille sur la partition 11 (USER):

d > 11

On passe au redimenssionement:

n > ENTER

On vous demande maintenant le Last Sector, c'est à dire la nouvelle taille, la partition USER faisait 27.9Go mais gdisk utilise des Gio (Gigioctet). On convertit donc 27.9Go en GigiOctet et cela nous donne 25.14Gio (1Go = 0.93Gio). On va maintenant soustraire 10Go (soit 9.31Gio) ce qui nous donne 15.83Gio, on arrondit à 16Gio et on rajoute 3Gio car le Last Sector ce n'est pas tout à fait le Size. Adaptez suivant ce que vous voulez faire comme redimenssionement.

On rentre maintenant ceci pour le Last Sector:

19G (G pour Gio, M pour Mio)

gdisk vous demande un type pour la partition, vous mettez le Partition GUID Code qu'on avait obtenu précédemment avec la commande d'information. Le type devrait être Unknown maintenant.

On fait un:

c > 11 > USER

Puis un :

x > c > 11 > (Le Partition unique GUID obtenu via la commande i précédemment)

On continue avec:

a > 11 > 0 > ENTER

Etape importante, on récupere les informations de la partition:

i > 11

Vous obtenez un retour similaire au premier, vérifie qu'ils soient identique à l'exception du Last Sector et de Size qu'on a modifié, je suis passé de 26Gio à 16.4Gio tout le reste doit être identique.

Si tout est bon vous pouvez terminer en appliquant tous les modifications

w > Y

Etape 4 - Formatter USER et restaurer les fichiers

On va maintenant formatter notre nouvelle partition USER et y restaurer les fichiers qu'on avait sauvegarder dans l'Etape 1.

On commence par monter notre EMUMMC.bin à partir du LOOP:

sudo mount_nandhac /dev/loopX ~/mount

Monter dans un LOOP la partition USER:

sudo losetup -f --show ~/mount/USER.img

qui retourne

/dev/loopX2

Et on ouvre le LOOP (donc la partition USER) avec GParted

gparted /dev/loopX2

Dans GParted, vous obtenez une seule partition et vous la formatter en FAT32 (Clic Droit sur la partition > Formatter en > fat32 et vous appliquez les changements)

Gparted

On monte desormais la partition USER dans le dossier ~/mount_user à partir du LOOP

sudo mount /dev/loopX2 ~/mount_user/

On restaure les fichiers à partir du ~/user_backup :

sudo cp -r ~/user_backup/* ~/mount_user/

On va maintenant tout demonter:

sudo umount ~/mount_user
sudo losetup -d /dev/loopX2
sudo umount ~/mount
sudo losetup -d /dev/loopX

Etape 5 - Tronquer l'image et fixer les en-têtes GPT

La partition USER est maintenant redimenssioné mais votre fichier fait encore sa taille initiale, il va falloir tronquer le fichier:

truncate -s -XXG/M emmummc.bin

EMUMMC.bin pèse 31.3Go soit 28.87Gio, on soustrait ce qu'on avait enlevé (pour moi 9.27Gio) soit 19.27Gio, on arrondit à l'unité superieur par sécurité. Je fais donc un:

truncate -s 20G emummc.bin

La taille du fichier passe 21.5Go ENJOY

Il faut maintenant corriger les en-tête GPT pour que le tout fonctionne, on monte une nouvelle fois notre EMUMMC.bin dans un LOOP

sudo losetup -f --show -o 0x800000 emummc.bin

On l'ouvre avec gdisk

sudo gdisk /dev/loopX

On fait:

x > e > w > Y

On demonte:

sudo losetup -d /dev/loopX

BONUS - Extraire le RAWNAND.bin BOOT0 et BOOT1 à partir d'un EMUMMC.BIN

dd bs=1c count=4194304 if=emummc.bin of=BOOT0
dd bs=1c skip=4194304 count=4194304 if=emummc.bin of=BOOT1
dd bs=1c skip=8388609 if=emummc.bin of=rawnand.bin

Terminé, vous avez redimenssioné votre dump, vous pouvez aller le tester ;) Dans ce tutoriel je l'ai reduit de environ 10Go mais on aurrait pu très largement viser plus haut. De cette façon on recupere une grande partie de l'espace du dump.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment