BackupsResearch » History » Version 18
Denis 'GNUtoo' Carikli, 06/08/2020 06:49 PM
Add more rationale for and against adb pull directly
1 | 1 | Denis 'GNUtoo' Carikli | h1. BackupsResearch |
---|---|---|---|
2 | |||
3 | {{>toc}} |
||
4 | |||
5 | 8 | Denis 'GNUtoo' Carikli | h2. Introduction |
6 | |||
7 | The [[BackupTheEFS]] page has instructions to backup the EFS. This page instead tries to document why it is done in that way, and what are the advantages and disadvantages of various other backups methods. |
||
8 | |||
9 | 9 | Denis 'GNUtoo' Carikli | This can also be useful to write more generic backup instructions to do a more complete backup. |
10 | |||
11 | 1 | Denis 'GNUtoo' Carikli | h2. Doing the backup of partitions or other block devices |
12 | |||
13 | h3. adb shell cat pipe |
||
14 | |||
15 | 17 | Denis 'GNUtoo' Carikli | Old versions of the "EFS backup instructions":https://redmine.replicant.us/projects/replicant/wiki/BackupTheEFS/17 (up to revision 17) used the following command: |
16 | 1 | Denis 'GNUtoo' Carikli | <pre> |
17 | 17 | Denis 'GNUtoo' Carikli | adb shell "cat /dev/block/platform/*/by-name/EFS" > EFS.img |
18 | 1 | Denis 'GNUtoo' Carikli | </pre> |
19 | |||
20 | At some point or under some condition, this stopped working and the backup were corrupted. |
||
21 | 2 | Denis 'GNUtoo' Carikli | |
22 | h3. adb shell cat adb pull |
||
23 | |||
24 | 14 | Denis 'GNUtoo' Carikli | With something like that: |
25 | 1 | Denis 'GNUtoo' Carikli | <pre> |
26 | 14 | Denis 'GNUtoo' Carikli | adb shell "cat /dev/block/platform/*/by-name/EFS > /EFS.img" |
27 | 2 | Denis 'GNUtoo' Carikli | adb pull /EFS.img ./ |
28 | 1 | Denis 'GNUtoo' Carikli | </pre> |
29 | 2 | Denis 'GNUtoo' Carikli | |
30 | 18 | Denis 'GNUtoo' Carikli | h4. Two steps |
31 | |||
32 | Doing it in two stages like that seem to be widely used in other instructions (like the ones found in XDA forums). |
||
33 | |||
34 | The advantage is that the '*' enables to use the same command across many more devices. |
||
35 | |||
36 | And we need two steps because the '*' is not interpreted by a shell when using adb pull: |
||
37 | <pre> |
||
38 | $ adb pull /dev/block/platform/*/by-name/EFS |
||
39 | adb: error: remote object '/dev/block/platform/*/by-name/EFS' does not exist |
||
40 | $ adb pull "/dev/block/platform/*/by-name/EFS" |
||
41 | adb: error: remote object '/dev/block/platform/*/by-name/EFS' does not exist |
||
42 | $ adb pull '/dev/block/platform/*/by-name/EFS' |
||
43 | adb: error: remote object '/dev/block/platform/*/by-name/EFS' does not exist |
||
44 | </pre> |
||
45 | |||
46 | This method requires the partition to be small enough. Otherwise it will create several issues: |
||
47 | * If the partition is bigger than the RAM, the resulting file in / will end up exhausting all the ram, and the backup will fail. |
||
48 | * It instead the partition is big but still fits, doing that would not be very efficient as you would copy the partition once on / to then copy it again through adb. |
||
49 | |||
50 | h4. dd |
||
51 | 2 | Denis 'GNUtoo' Carikli | |
52 | Normally cat should produce a valid backup, however it might be better to use dd for extra safety. |
||
53 | |||
54 | 10 | Denis 'GNUtoo' Carikli | On Replicant 6.0 0004, at least the recoveries for the following devices have 'dd': |
55 | 2 | Denis 'GNUtoo' Carikli | * Galaxy Nexus |
56 | * Galaxy SIII |
||
57 | |||
58 | h3. adb pull the block device |
||
59 | |||
60 | The following should also work: |
||
61 | <pre> |
||
62 | adb pull /dev/block/mmcblk0p3 ./EFS.img |
||
63 | </pre> |
||
64 | 3 | Denis 'GNUtoo' Carikli | |
65 | 1 | Denis 'GNUtoo' Carikli | The advantage is that it can also backup huge partitions like the user data partition or Replicant system partition. |
66 | 10 | Denis 'GNUtoo' Carikli | |
67 | TODO: |
||
68 | * Validate if doing "adb pull /dev/block/platform/*/by-name/EFS ./EFS.img" work, and if so, validate it for all the devices. |
||
69 | 15 | doak complex | * [by doak] No, it does not (expansion of @*@ fails), but this would do: |
70 | 16 | doak complex | <pre> |
71 | part="`adb shell "ls /dev/block/platform/*/by-name/EFS" | head --bytes=-2`" |
||
72 | adb pull "$part" ./EFS.img |
||
73 | </pre> |
||
74 | Be aware of the @head --bytes=-2@ which is needed to get rid of the nasty @0x0d 0x0a@ line ending returned by @adb@. |
||
75 | (Tested on Recovery of Replicant 6.0 0003.) |
||
76 | 5 | Kurtis Hanna | |
77 | 11 | Denis 'GNUtoo' Carikli | h2. Backup applications. |
78 | |||
79 | It might be a good idea to have a list of backup applications and/or to ship one with Replicant. |
||
80 | 5 | Kurtis Hanna | |
81 | * This backup app might be a good option for Replicant 9 or 10: https://github.com/stevesoltys/backup |
||
82 | 12 | Denis 'GNUtoo' Carikli | * F-droid might also has applications. As F-droid packages are not all FSDG compliant, we would need to make sure that the backup application we recommend or ship are FSDG compliant. |
83 | |||
84 | It might also be a good idea to understand if the backup solution chosen is sustainable in the long term: If the development stop or upstream decide to make the new version proprietary some users might have a hard time adapting to new backup applications or systems. |