I encrypted my phone but now want it not encrypted so have to factory reset. However, if I try to do this from the CWM Recovery it says
-- Wiping data...
Formatting /data...
Error mounting /data!
Skipping format...
Formatting /cache...
Formatting /sd-ext...
Formatting /sdcard/.android_secure...
Error mounting /sdcard/.android_secure!
Skipping format...
Data wipe complete.
When I try to factory reset from the normal GUI it doesn't give me an error but finishes very very quickly and hasn't worked (presumably the output above has happened in the logs).
What can I do?
Answer
I have also encrypted the /data
partition (on my Samsung I9300) and wanted to reset it for an upgrade. This failed with the error you mentioned, /tmp/recovery.log
contains:
ClockworkMod Recovery v6.0.3.2
recovery filesystem table
=========================
0 /tmp ramdisk (null) (null) 0
1 /efs ext4 /dev/block/mmcblk0p3 (null) 0
2 /boot emmc /dev/block/mmcblk0p5 (null) 0
3 /recovery emmc /dev/block/mmcblk0p6 (null) 0
4 /cache ext4 /dev/block/mmcblk0p8 (null) 0
5 /system ext4 /dev/block/mmcblk0p9 (null) 0
6 /data ext4 /dev/block/mmcblk0p12 (null) -16384
7 /preload ext4 /dev/block/mmcblk0p10 (null) 0
8 /modem emmc /dev/block/mmcblk0p7 (null) 0
9 /sdcard datamedia /dev/null (null) 0
10 /external_sd ext4 /dev/block/mmcblk1p1 (null) 0
-- Wiping data...
Formatting /data...
I:Formatting unknown device.
W:failed to mount /dev/block/mmcblk0p12 (Invalid argument)
Error mounting /data!
Skipping format...
DISCLAIMER: I am not responsibility for anything that goes wrong, including (but not limited to) user error.
If you wish to wipe the /data
partition completely (including media like photos), follow the below instructions:
- Boot into recovery.
- Run
adb shell
in a terminal (Linux) or Command Prompt ("CMD", Windows). After a few seconds, you should see a line containing~ #
. WARNING. Triple-check the command that you are entering here. White space and capitalization are important. Make any mistake here and you may accidentally wipe your whole flash memory including recovery images.
NOTE: if you want to encrypt your partition later, you have to leave 16KiB unallocated space on the end of the partition.
In theadb shell
, run the commandmke2fs -t ext4 /dev/block/mmcblk0p12
. Substitute/dev/block/mmcblk0p12
andext4
according to the recovery filesystem table (for/data
). Output when running the command:~ # mke2fs -t ext4 /dev/block/mmcblk0p12
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
755904 inodes, 3022848 blocks
151142 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3095396352
93 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.(Optional) Install new firmware (E.g. CM 10.1).
- Reboot.
- (Optional) In order to encrypt the partition while clearing your whole data partition, run
vdc cryptfs enablecrypto wipe PIN_OR_PASSWORD
(before Android 5.0) orvdc cryptfs enablecrypto wipe password PASSWORD_IN_HEX
(since Android 5.0, see this post for details). - Reconfigure device, choose language, enter name, install apps, etc.
Technical details below.
The factory reset menu item activates erase_volume("/data")
in recovery.c
which calls format_volume("/data")
.
format_volume
is defined in roots.c
:
int format_volume(const char* volume) {
//
// check to see if /data is being formatted, and if it is /data/media
// Note: the /sdcard check is redundant probably, just being safe
if (strstr(volume, "/data") == volume && is_data_media() && !handle_data_media) {
return format_unknown_device(NULL, volume, NULL);
}
Since the volume name indeed starts with /data
, and the recovery filesystem table contains an entry for type datamedia
and handle_data_media
is initially zero, format format_unknown_device
is called. That function is defined in extendedcommands.c
as follows:
int format_unknown_device(const char *device, const char* path, const char *fs_type)
{
LOGI("Formatting unknown device.\n");
if (fs_type != NULL && get_flash_type(fs_type) != UNSUPPORTED)
return erase_raw_partition(fs_type, device);
// if this is SDEXT:, don't worry about it if it does not exist.
if (0 == strcmp(path, "/sd-ext"))
{
//
}
if (NULL != fs_type) {
//
}
if (0 != ensure_path_mounted(path))
{
ui_print("Error mounting %s!\n", path);
ui_print("Skipping format...\n");
return 0;
}
fs_type
is NULL
and the path
is /data
. That means that the code path ends up at ensure_path_mounted(path)
which is the place where this function fails. Looking at the name, ensure_path_mounted
attempts to mount the partition by name which of course fails since the encrypted partition is not supported in CWM. Therefore, CWM refuses to "format" the partition (actually, all it does is erasing all files except for /data/media
after mounting).
Therefore the goal is to format /data
with ext4 (see recovery filesystem table) or mount the encrypted data partition somehow. I could not easily find the tools for mounting encrypted partitions, so I decided to go the easy way and just format the partition.
No comments:
Post a Comment