Tengo un disco duro defectuoso que no puede escribir ni leer los primeros sectores del disco. Simplemente da errores de E / S y eso es todo lo que hay. Hay otras áreas en el disco que parecen (en su mayoría) bien. Estoy tratando de montar una partición (ext4) y ver si puedo acceder a algunos archivos que me gustaría recuperar. Dado que el mount
comando admite una offset
opción, debería poder montar el sistema de archivos a pesar de que la tabla de particiones no se puede leer ni escribir. El problema es cómo encontrar el desplazamiento. Ninguna de las herramientas ext4 parece tener esta característica particular.
filesystems
partition
data-recovery
ext4
Ernest A
fuente
fuente
Respuestas:
No hay un desplazamiento estándar per-se, ya que, por supuesto, puede iniciar la partición donde lo desee. Pero supongamos por un momento que está buscando la primera partición, y se creó más o menos aceptando valores predeterminados. Hay dos lugares donde puede encontrarlo, suponiendo que estaba usando una tabla de partición DOS tradicional:
Ahora, para continuar, querrás elegir tu herramienta de volcado hexadecimal favorita y aprender un poco sobre el diseño del disco ext4 . En particular, comienza con 1024 bytes de relleno, que ext4 ignora. Luego viene el superbloque. Puede reconocer el superbloque comprobando el número mágico 0xEF53 en el desplazamiento 0x38 (desde el inicio del superbloque, o 0x438 desde el inicio de la partición, o 1080 en decimal). El número mágico es little-endian. Por lo tanto, en realidad se almacena en el disco como 0x53EF.
Así es como se ve eso con
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Tenga en cuenta que cuando da el desplazamiento para montar (o perder), debe dar el desplazamiento donde comienza el relleno, no el superbloque.
Ahora, si no es la primera partición, o si no está en uno de los dos (tres) lugares esperados, básicamente puedes buscar el número mágico 0xEF53. Esto es lo que
testdisk
(recomendado en un comentario) hace por ti.fuente
testdisk
No lo encontraría. Gracias a todos por la ayuda.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
obtener algunas coincidencias probables. Probablemente no sea muy rápido, pero puede dejarlo correr mientras encuentra un método mejor.testdisk
, solo tuve que agregar una edición para untl;dr:
encabezadoBasado en la respuesta de @ derobert , escribí un programa ( gist ) que analizará una secuencia de entrada
dd
y escaneará cada sector en busca de algo que se parezca al comienzo de una partición ext.Funcionará al menos tan rápido como
dd
pueda leer desde su disco duro. Una versión resumida está debajo.El uso más simple es justo
sudo dd if=/dev/xxx | ext2scan
, aunque es probable que desee modificar eldd
comando para mejorar el tamaño del bloque o elegir una región para buscar.Nota: encontrará no solo el comienzo de las particiones, sino también superbloques dentro de ellas.
En cualquier caso, recomendaría usar
dumpe2fs
para analizar los resultados. Puede volcar el inicio del supuesto superbloque en un archivo (al menos los primeros seis sectores, según mi prueba informal), y si es un superbloque,dumpe2fs
le dirá (entre otras cosas) las ubicaciones relativas de los otros superbloques .fuente
Adivine dónde comienza la partición y aplique algo de fuerza bruta:
Me imagino que esto podría llevar algún tiempo, pero si ya ha pasado 6 horas con testdisk, quizás valga la pena intentarlo.
fuente
echo "--->$i<---"
línea debido a eso, ya que de lo contrario es imposible medir el progreso. Creo que podría aumentarbsz
a 4096, lo que acelerará las cosas.Pruebe diferentes opciones (por ejemplo, usando debugfs y fsck.ext4):
debugfs:
Primero debe montar debugfs (no el disco duro que falla):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(esencialmente, es usar "debugfs -w" con el modo habilitado para escritura, y luego seguido de "lsdel" para enumerar todos los archivos eliminados). alternativamente puedes usar
y aquí está fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Otro es "sleuthkit" ("sudo apt-get install sleuthkit") que tiene un comando como "istat" para proporcionar información de bloques sobre los inodos, desde donde puede obtener el desplazamiento y así bloquear el contenido de datos fácilmente.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(Por cierto, si el tamaño de bloque es 1024, del comando "show_super_stats" de debugfs, entonces se deduce que el bloque 1 tiene un desplazamiento de 1024 bytes desde el inicio del disco, y cada grupo de bloques también puede tener varios bloques).
fuente
Tenía una imagen de firmware de libro electrónico que incluía la imagen de partición ext3fs, para montar y editar tuve que escanear la imagen usando la herramienta bgrep para encontrar todas las posiciones del número mágico ext3fs
0x53EF
e intentar montar usando las compensaciones encontradas.Aquí hay un script acortado que realiza el montaje:
Guión completo ubicado aquí .
fuente
Esto no se ha probado, pero creo que puede usar el método discutido en este SU Q&A titulado: ¿ Búsqueda inversa de inodo / archivo desde desplazamiento en dispositivo sin procesar en Linux y ext3 / 4?.
Parece que puede usar el inodo de un archivo + el desplazamiento de los discos + el tamaño del bloque para determinar el desplazamiento de un archivo.
fuente