How to dump and restore the Vista recovery partition on HTC Shift

The HTC Shift HDD is 40 GB, exactly 40000536576 bytes. The Host Protected Area starts at 0x88FE00000 and is exactly 3GiB, from linux dmesg output:

sda: Host Protected Area detected.
        current capacity is 71826615 sectors (36775 MB)
        native  capacity is 78126048 sectors (40000 MB)
sda: Host Protected Area disabled.
sda: 78126048 sectors (40000 MB), CHS=16383/255/63

Here’s the radare dump, showing the end of the Vista partition and the start of the Host Protected Area, where the Shift HDD stores the Vista recovery information.

Here is how gparted sees the HTC Shift partitions, the 3.00 GiB “unallocated” space at the end holds the vista recovery information, you can’t see this space in Vista.

So we can dump it using ‘dd’: 0x88FE00000 == 36773560320 , we will read & write 16384 bytes at a time, to speed up the process, so 36773560320/16384 = 2244480

# dd if=/dev/sda of=/media/disk/shift-vista-recovery.bin bs=16384 skip=2244480

If we keep the bin file in a safe place, we can happily use the unallocated space and gain 3GiB of space in our HDD.

The md5sum of my Spanish Vista is the following:

# md5sum shift-vista-recovery-es.bin
5c3a9ea3ea578419daf3f1f242755122  shift-vista-recovery-es.bin

If later on we need to restore it, to be able to recover vista using the Fn+F3 key combo at boot time, we must place it in the same place so, using ‘dd’ this would be:

dd if=/media/disk/shift-vista-recovery.bin of=/dev/sda bs=16384 seek=2244480

You can always boot from a USB pendrive using Slax, to perform the ‘dd’ operations.
Note: Replace ‘/dev/sda’ for ‘/dev/hda’ if using Slax.

This entry was posted in linux. Bookmark the permalink.

10 Responses to How to dump and restore the Vista recovery partition on HTC Shift

  1. Giorgio says:

    you may publish the file bin? Thank you.

  2. Hola Pau.
    Tengo una htc SHIFT, y he instalado Ubuntu 8.04, me funciona de muerte, por si acaso me hize una imagen .tib con acronis, para poder recuperar el sistema original.
    el problema vino cuando el disco duro externo se me estropeó.
    no he podido recuperar la imagen.
    Por este motivo te solicito la imagen de la particion oculta de tu htc shift en español.
    Te agradeceria que me proporcionaras la imagen “shift-vista-recovery.bin”.

    Saludos

  3. sam says:

    greetings,
    thanks to you for those helping you did
    i have htc shift and i installed linux 8.04 on all of 40gb harddisk, when i restart i can press fn+3 for recovery of vista but it dose not proceed, just it displays the message and i answer yes but nothing will happen afterword
    would you please help me getting my vista back
    thanks again in advance

  4. homer says:

    to pof
    instale un ubuntu mid en mi shift y no me gusto mucho y jodi el parttion del HD y borre la vista shift recovery.bin . a ver si me puedes mandar el ftp o enlace del bin, gracias yo prefero en ingles saludo

  5. Javierllt says:

    Hola
    Yo desde la inexperiencia y el nerviosismo, cometí el error garrafal de borrar la partición de recuperación. Si alguien pudiera indicarme como conseguir una copia de una dump o darme alguna indicación de que hacer se lo agradecería.

    P.D.: Ojalá hubiera visto esta página antes, está genial.

  6. Popy says:

    Hola.

    Desde ya agradecer esta fabulosa ‘guía para burros’ que me ha animado a cambiarle el disco duro original de 40GB a la Shift por otro SSD de 128 GB. La copia de la imagen de la HPA la he realizado sin problemas, y como resultado del comando ‘dd’, he obtenido estos datos:

    196959+0 records in
    196959+0 records out
    3226976256 bytes (3.2 GB) copied, 534.1 s, 6.0 MB/s

    Bien, ahora me planteo recuperar la HPA en el disco de 128GB, por lo que entiendo que la fórmula que me permite calcular el valor de seek es ésta:

    seek = (total_number_of_bytes_in_the_HDD – total_bytes_copiados ) / 16384

    es decir, seek = (128966459392 – 3226976256) / 16384 = 7674529

    siendo 128966459392 el total de bytes del disco SDD de 128GB y 3226976256 el nº efectivo de bytes de mi copia de la HPA. La duda me surge después de leer en XDA-developpers que indicas que el valor a restar debería ser de 3221225472.

    Como no lo tengo muy claro, prefiero que, si puedes, me des una orientación al respecto.

    Muchas gracias por adelantado.

  7. Popy says:

    Hola de nuevo…

    Bien, como decimos en mi tierra, ‘si no es buey, es vaca…’. Así que primero he probado a restaurar la HPA en el disco de 128GB usando el valor de seek que yo creía correcto (7674529), pero no se restaura el Vista.

    Decido usar entonces para el valor de seek el que se calcula con la fórmula que indicas en XDA-develloppers (7674880), con idéntico resultado… No es posible recuperar tampoco el Vista.

    Sin embargo, a base de repetir los procesos por si en algo me había equivocado, me fijo que en ambos casos, el resultado de ‘dd’ muestra al inicio un mensaje de aviso que dice:

    ‘dd: writting ‘/dev/hda1′: No space left on device’

    lo que me lleva a concluir que, independientemente del valor que usé para ‘seek’, el problema está en el ‘tamaño_real_en_bytes_del_nuevo_disco’, ya que entiendo por el error mostrado que estoy intentando escribir la imagen ‘más allá’ del final del disco. De hecho en ambos casos, el nº de bytes copiados con ‘dd’ es inferior al que obtuve al crear la imagen de la HPA.

    Concluyo que el valor en bytes que he usado para la capacidad total del disco es mayor de la que realmente tiene la unidad SSD. Según el fabricante, son 128GB. La hoja de características no menciona nada más al respecto, así que les pedí información acerca de si eran 128 GibiBytes o 128 GigaBytes… curiosamente me envían dos respuestas: en la primera me dicen que son GibiBytes, y en la segunda que me olvide de lo anterior, que son GigaBytes… en fin, si ni el fabricante lo tiene claro, menos lo tengo yo!.

    Para salir de dudas, uso el ‘dmesg’ desde Linux, e identifica el disco SDD como:

    hda: KingSpec KSD-ZF18.1-128MJ, ATA DISK drive
    ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
    :
    :
    Probing IDE interface ide1…
    hda: max request size : 512KiB
    hda: 251887616 sectors (128966 MB), CHS=16383/255/63, UDMA(33)

    O sea, que si considero que el tamaño real es el nº de sectores por 512 bytes/sector, obtengo el valor 128966459392 bytes que es el que usé en mis cálculos (y que además convertido a verdaderos bytes, da la capacidad de 120.1GB que indica el Linux para el disco).

    Decido repetir el proceso de restauración de la HPA, pero esta vez considerando que el tamaño del disco es de 128 * 1000 * 1000 * 1000 = 128000000000 bytes. Y esta vez sí que no hay errores al escribir la HPA al final del disco (lo he probado con los dos valores de seek ‘posibles’). Pero ni en uno ni en otro caso consigo que el Vista se restaure: siempre da el mensaje de que no hay disco de arranque o algo así.

    En resumen, un verdadero lío de cifras y la Shift sin Vista hasta que me aclare o me aclaren las cosas. O eso o bien no es posible usar la HPA restaurada en un disco de diferente tamaño que el original.

    Un saludo.

  8. Christophe Méresse says:

    Great !
    I have just one question. What is the first unallocated 1 MB partition for ?

    Thank you

  9. JCF says:

    Hi all,

    I think I blew my friend’s spanish Shift’s recovery partition.

    I installed Ubuntu 10.10 alongside Vista to see if it performed any better than Vista. Once I saw it would take me way too long to get everything working flawlessly (especially WiFi), I decided to set Windows Vista as the default system to boot in GRUB. Vista wouldn´t boot however, and it looked like some issue with the disk (some disk CRC .sys file would be the last to show on the safe boot listing before a bluescreen) so I went for the recovery procedure (Fn-F3 at boot) to rewrite the MBR (answer No to the full restore and yes to the next question).

    Vista booted in its recovery shell (or whatever that is), did its thing and prompted for a reboot. After which I keep getting a message from the Windows Boot Manager asking for the installation media because some \Windows\system32\winload.exe file is either missing or corrupt.

    It does this even if I try to recover the whole thing (Fn-F3 at boot).

    Bottom line, unless anybody can point me to a way to fix this, can anyone share a copy of a spanish recovery partition?

    Thanks a lot in advance!

  10. JCF says:

    Hello again,
    I would really appreciate some help getting a copy of the recovery partition of an HTC Shift, especially a spanish one. Could anyone help me or point me in the right direction?

    Again, thanks a lot in advance.

    Juan

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>