C'est facile à réaliser sur un PC Linux :
- Fixez les deux cartes SD au PC.
- Vider la deuxième partition de l'ancienne carte SD sur la nouvelle. C'est également possible directement depuis l'appareil Android. Voir Créer un vidage de partition .
- Redimensionnez la taille du système de fichiers à 30 Go (la nouvelle taille de la partition) en utilisant la méthode suivante
resize2fs
.
COPIER TOUT LE SYSTÈME DE FICHIERS :
L'approche ci-dessus fonctionne également sur Android si vous êtes en mesure d'attacher la nouvelle carte SD par le biais d'un lecteur de carte SD USB OTG, alors que l'ancienne est dans le téléphone.
Ou vous pouvez le faire en 2 étapes, comme vous êtes déjà en train d'essayer :
-
Créer un dump de la partition :
~# gzip -9ck /dev/block/mmcblk1p2 >/storage/sdcard1/sdcard2root.img.gz
Vous pouvez utiliser dd
o cat
ou même cp
. Assurez-vous que vous avez suffisamment d'espace sur le stockage externe primaire (physiquement interne) pour enregistrer l'image vidée (et éventuellement compressée) de la deuxième partition de la carte SD.
La compression n'est utile qu'en cas de faible densité. Pour éviter de copier les blocs du système de fichiers libérés (des fichiers supprimés), utilisez la commande e2image -rap
. Ou rejeter le mappage des blocs logiques et physiques en utilisant fstrim
(sur un système de fichiers monté) ou e2fsck -E discard
et supprimer le cache des pages en utilisant sync; echo -n 1 >/proc/sys/vm/drop_caches
.
-
Insérez une nouvelle carte SD et effectuez le partitionnement en utilisant parted
o gdisk
o fdisk
.
-
Ecrire l'image de la partition sur la nouvelle carte SD :
~# gzip -dck /storage/sdcard1/sdcard2root.img.gz >/dev/block/mmcblk1p2
-
Maximiser la taille du système de fichiers par rapport à la taille de la partition :
~# resize2fs /dev/block/mmcblk1p2
COPIER LE CONTENU DU SYSTÈME DE FICHIERS :
Une autre méthode consiste à ne copier/déplacer que le contenu du système de fichiers (fichiers, répertoires, etc.) et non la structure entière du système de fichiers. Mais les métadonnées des fichiers doivent être préservées, sinon les choses risquent de se casser (puisque la partition doit être montée à l'intérieur d'un système de fichiers). /data
). Il comprend timestamps
, permission mode
, owner
, group
y extended attributes
en particulier dans les contextes SELinux. Certains binaires exécutables (dans /system
) peuvent également avoir des capacités de fichier définies (enregistrées en tant qu'attributs étendus), mais cela n'est généralement pas nécessaire pour les données utilisateur. D'autres métadonnées comme les ACL (également enregistrées en tant qu'attributs étendus) et les attributs de fichiers ( drapeaux d'inode ) ne sont généralement pas utilisés sur les appareils Android.
Sous Linux, des outils comme rsync
(ou même cp
) peut préserver les métadonnées requises. Pour référence, voir este y este réponse. Sur Android (pour déplacer le contenu en 2 étapes) tar
est un bon choix :
~$ cd /path/to/old_sdcard/mountpoint/
~$ tar --create --preserve-permissions --selinux --verbose --gzip --file=/storage/sdcard1/sdcard2root.tar.gz .
Insérez la nouvelle carte SD, effectuez le partitionnement (si nécessaire), et créez le système de fichiers en utilisant la fonction mkfs.ext4
(par défaut, il prend toute la partition). Pour restaurer la sauvegarde :
~$ cd /path/to/new_sdcard/mountpoint/
~$ tar --extract --preserve-permissions --selinux --verbose --gunzip --file=/storage/sdcard1/sdcard2root.tar.gz