Aquí está la respuesta (mucho más fácil), ahora que ldmtool
existe
ldmtool
lee metadatos LDM (también conocido como discos dinámicos de Windows) y (entre otras cosas) crea entradas de mapeador de dispositivos para las unidades, particiones y arreglos RAID correspondientes, lo que le permite acceder y montarlos como otros dispositivos de bloque en Linux.
El programa tiene algunas limitaciones, principalmente debido al hecho de que no modifica los metadatos LDM en absoluto. Por lo tanto, no puede crear discos LDM en Linux (use Windows para eso), y no debe montar volúmenes RAID en modo lectura-escritura a los que les falten discos. (ldmtool
no modificará los metadatos para reflejar que esto sucedió, y la próxima vez que Windows ensamble la matriz RAID, surgirán problemas, ya que no todas las unidades estarán sincronizadas).
Estos son los pasos a seguir:
- Para instalar
ldmtool
en los sistemas Debian y Ubuntu, escribaapt-get install ldmtool
. Debería ser igualmente fácil en la mayoría de las distribuciones de Linux recientes. - Ejecutar
ldmtool create all
. - Ahora debería tener un montón de nuevas entradas en /dev/mapper. Ubique el correcto (en mi caso, una matriz RAID1, entonces
/dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2
), y simplemente móntelo con algo comomount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2
.
Para que esto se haga automáticamente en el momento del arranque, es probable que deba insertar una llamada a ldm create all
en el punto correcto de la secuencia de arranque, antes del contenido de /etc/fstab
esta montado. Una buena manera de hacer la llamada sería:
[ -x /usr/bin/ldmtool ] && ldmtool create all >/dev/null || true
Pero cómo hacer que este fragmento se ejecute en el momento adecuado durante el arranque variará mucho según la distribución que esté utilizando. Para Ubuntu 13.10, inserté dicha línea en /etc/init/mountall.conf
, justo antes del exec mountall ...
call al final de la sección del script. Y ahora puedo montar mi partición Windows LDM RAID1 en /etc/fstab
. ¡Disfrútalo!
Muy bien, responderé a mi propia pregunta para evitar el mismo dolor a los demás.
0. ADVERTENCIA
En caso de que esté haciendo una recuperación, SIEMPRE COPIE SUS DATOS y trabaje en la copia. NO altere los datos 'rotos' originales. Eso dicho, sigue leyendo.
1. Su partición se parece a...
Instale el kit de detección y el disco de prueba. Esperemos que haya paquetes para su distribución :)
# mmls -t gpt LUN01
GUID Partition Table (EFI)
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description
00: Meta 0000000000 0000000000 0000000001 Safety Table
01: ----- 0000000000 0000000033 0000000034 Unallocated
02: Meta 0000000001 0000000001 0000000001 GPT Header
03: Meta 0000000002 0000000033 0000000032 Partition Table
04: 00 0000000034 0000002081 0000002048 LDM metadata partition
05: 01 0000002082 0000262177 0000260096 Microsoft reserved partition
06: 02 0000262178 1048576966 1048314789 LDM data partition
07: ----- 1048576967 1048576999 0000000033 Unallocated
Nota:testdisk le dará la misma información con menos detalles# testdisk /list LUN01
2. Extraer metadatos de discos
Toda la información sobre el orden del disco, el tamaño de los datos y otros atributos cifrados sobre la partición se encontrará en la partición de metadatos LDM. W2k8 no ha cambiado mucho desde este documento [2] aunque algunos tamaños son diferentes y algunos atributos son nuevos (y obviamente desconocidos)...
# dd if=LUN01 skip=33 count=2048 |xxd -a > lun01.metadata
# less lun01.metadata
En la línea 0002410 debería ver el nombre del servidor. ¿Tranquilizador? Pero buscamos el orden de los discos y la identificación del disco. Desplácese hacia abajo.
2.1. Orden de discos
En la línea 0003210 debería ver 'Disk1' seguido de una cadena larga.
0003200: 5642 4c4b 0000 001c 0000 0006 0000 0001 VBLK............
0003210: 0000 0034 0000 003a 0102 0544 6973 6b31 ...4...:...Disk1
0003220: 2437 3965 3830 3239 332d 3665 6231 2d31 $79e80293-6eb1-1
0003230: 3164 662d 3838 6463 2d30 3032 3662 3938 1df-88dc-0026b98
0003240: 3335 6462 3300 0000 0040 0000 0000 0000 [email protected]
0003250: 0048 0000 0000 0000 0000 0000 0000 0000 .H..............
Esto significa que el primer disco de este Volumen está identificado por la siguiente ID Única (UID):79e80293-6eb1-11df-88dc-0026b9835db3 Pero por el momento, ¡no sabemos cuál de los discos tiene este UID! Así que vaya al Disco 2 entrada y tome nota de su UID y así sucesivamente para todos los discos que tenía en su volumen. Nota:Según mi experiencia, solo cambian los primeros 8 caracteres, el resto permanece igual. De hecho, W2k8 parece incrementar la ID en 6. $ es un separador.
P.ej. :
Windows Disk1 UID : 79e80293-6eb1-11df-88dc-0026b9835db3
Windows Disk2 UID : 79e80299-...
Windows Disk3 UID : 79e8029f-...
2.2. Buscar UID de disco
Vaya a la línea 00e8200 (lun01.metadata). Debería encontrar 'PRIVHEAD'.
00e8200: 5052 4956 4845 4144 0000 2c41 0002 000c PRIVHEAD..,A....
00e8210: 01cc 6d37 2a3f c84e 0000 0000 0000 0007 ..m7*?.N........
00e8220: 0000 0000 0000 07ff 0000 0000 0000 0740 [email protected]
00e8230: 3739 6538 3032 3939 2d36 6562 312d 3131 79e80299-6eb1-11
00e8240: 6466 2d38 3864 632d 3030 3236 6239 3833 df-88dc-0026b983
00e8250: 3564 6233 0000 0000 0000 0000 0000 0000 5db3............
00e8260: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00e8270: 3162 3737 6461 3230 2d63 3731 372d 3131 1b77da20-c717-11
00e8280: 6430 2d61 3562 652d 3030 6130 6339 3164 d0-a5be-00a0c91d
00e8290: 6237 3363 0000 0000 0000 0000 0000 0000 b73c............
00e82a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00e82b0: 3839 3164 3065 3866 2d64 3932 392d 3131 891d0e8f-d929-11
00e82c0: 6530 2d61 3861 372d 3030 3236 6239 3833 e0-a8a7-0026b983
00e82d0: 3564 6235 0000 0000 0000 0000 0000 0000 5db5............
00e82e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Lo que buscamos es el UID del disco de este disco en particular. Vemos:- Id. de disco:79e80299-6eb1-11df-88dc-0026b9835db3- Id. de host:1b77da20-c717-11d0-a5be-00a0c91db73c- Id. de grupo de discos:891d0e8f-d929-11e0-a8a7-00d6b5983
Entonces, este disco con el UID 79e80299-... es el Disco 2 de Windows, pero para nosotros era el Disco físico 1. De hecho, encuentre este UID en el orden de disco que encontró arriba. Nota:No hay un orden lógico. Me refiero a que Windows decide cómo configurar el orden del disco, no usted. Por lo tanto, NO hay lógica humana y no espere que su primer disco sea el Disco 1.
Así que no asumas que el orden anterior va a seguir alguna lógica humana. Le recomiendo que revise todos los datos LDM de sus discos y extraiga su UID. (Puede usar el siguiente comando para simplemente extraer la información de PRIVHEAD:dd if=LUNXX skip=1890 count=1 |xxd -a)
por ejemplo:
(Windows) Disk1 : 79e80293-... == Physical disk 2
(Windows) Disk2 : 79e80299-... == Physical disk 1
(Windows) Disk3 : 79e8029f-... == Physical disk 3
Estoy seguro de que en algún lugar de los metadatos de LDM puede encontrar el tipo de volumen (distribuido, RAID0, RAIDX y los tamaños de banda asociados). Sin embargo, no lo he desenterrado. Usé un método de 'intentar y reintentar' para encontrar mis datos. Entonces, si sabe cómo configurar su configuración antes del drama, se ahorrará mucho tiempo.
3. Encuentre el sistema de archivos NTFS y sus datos
Ahora estamos interesados en la gran cantidad de datos que queremos restaurar. En mi caso, son ~ 512 GB de datos, por lo que no convertiremos todo en ASCII. Realmente no he buscado cómo Windows encuentra el comienzo de su partición NTFS. Pero lo que encontré es que lógicamente comienza con la siguiente palabra clave:R.NTFS. Encontremos esto y encontremos el desplazamiento que tendremos que aplicar más adelante para ver nuestro NTFS FS.
06: 02 0000262178 1048576966 1048314789 LDM data partition
En este ejemplo, los datos comienzan en 262178 y tienen una longitud de 1048314789 sectores
Encontramos arriba que Disk1 (del grupo de volumen) es en realidad el segundo disco físico. Extraeremos parte de su información para encontrar dónde comienza la partición NTFS.
# dd if=LUN02 skip=262178 count=4096 |xxd -a > lun02.DATASTART-4k
# less lun02.DATASTART-4k
0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
00fbc00: eb52 904e 5446 5320 2020 2000 0208 0000 .R.NTFS .....
00fbc10: 0000 0000 00f8 0000 3f00 ff00 0008 0400 ........?.......
00fbc20: 0000 0000 8000 8000 ffaf d770 0200 0000 ...........p....
Aquí podemos ver que NTFS comienza en 00fbc00. Entonces, sabiendo que podemos comenzar a extraer nuestros datos del sector 262178 + 00fbc00 bytes. Hagamos un poco de conversión de hexadecimal a decimal con conversión de bytes a sector también.
0xfbc00 bytes =1031168 bytes =1031168/512 sectores =2014 sectores
Entonces, nuestra partición NTFS comienza en 262178 + 2014 =264192 sectores. Este valor será un desplazamiento que usaremos más adelante en todos los discos. Llamémoslo desplazamiento NTFS. Obviamente, el tamaño total se reduce por el desplazamiento. Entonces el nuevo tamaño es:1048314789 - 2014 =1048312775 sectores
4. Intenta montar/ver los datos
De ahora en adelante, funcionará de manera inmediata porque su partición NTFS está en buen estado o no lo hará porque está haciendo esto para recuperar algunos datos. El siguiente proceso es el mismo sea cual sea su estado. Todo lo siguiente se basa en [1] (ver enlaces en la parte inferior)
Un volumen distribuido, llenará un volumen tras otro. Donde como un rayado (RAID0) copiará una porción de datos en muchos discos (es decir, un archivo se distribuye en muchos discos). En mi caso, no sabía si era un volumen expandido o rayado. La forma más fácil de saber si su volumen no está lleno es verificar si tiene muchos ceros al final de todos sus volúmenes. Si ese es el caso, entonces está rayado. Porque si está extendido, llenará el primer disco, luego el segundo. No estoy 100% seguro de eso, pero eso es lo que observé. Así que agregue un montón de sectores desde el final de la partición de datos LDM.
4.0 Preparativos para acceder a sus datos
Primero monte su archivo dd o su dispositivo a través de un dispositivo de bucle invertido con el NTFSoffset y el tamaño que calculamos anteriormente. Sin embargo, el desplazamiento y el tamaño deben estar en bytes y no en sectores para usarse con losetup.offset =264192*512 =135266304size =1048312775*512 =536736140800
# losetup /dev/loop2 DDFILE_OR_DEVICE -o 135266304 --size 536736140800
# blockdev --getsize /dev/loop2
1048312775 <---- total size in sectors, same number than before
Nota:puede agregar '-r' para montar en modo de solo lectura.
Haga lo anterior para todos los discos físicos que forman parte de su volumen. Muestre el resultado con:losetup -aNota:si no tiene suficientes dispositivos de bucle, puede crear más fácilmente con :# mknod -m0660 /dev/loopNUMBER b 7 NUMBER &&chown root.disk /dev/loopNUMBER
Verifique su alineación abriendo el primer Disco del grupo (por ejemplo:Disco2) para ver si la primera línea es R.NTFS. Si no, entonces su alineación es incorrecta. Verifique sus cálculos anteriores y vuelva a intentarlo. O no está mirando el primer disco de Windows
por ejemplo:
First disk of the volume has been mounted on /dev/loop2
# xxd /dev/loop2 |head
0000000: eb52 904e 5446 5320 2020 2000 0208 0000 .R.NTFS .....
0000010: 0000 0000 00f8 0000 3f00 ff00 0008 0400 ........?.......
Todo está bien. Pasemos a la parte molesta :)
4.1 Extendido
Los discos distribuidos son en realidad una cadena de discos. Llenas el primero, luego usas el segundo y así sucesivamente. Cree un archivo que se vea así, por ejemplo:
# Offset into Size of this Raid type Device Start sector
# volume device of device
0 1048312775 linear /dev/loop2 0
1048312775 1048312775 linear /dev/loop1 0
2096625550 1048312775 linear /dev/loop3 0
Notas:- Recuerde usar el buen orden de disco (que encontró antes). por ejemplo:Disco físico 2 seguido de Disco físico 1 y Disco físico 3:2096625550 =2 * 1048312775 y, obviamente, si tiene un cuarto disco, tendrá 3 veces el tamaño del desplazamiento del cuarto disco.
4.2 A rayas
El problema con el modo rayado (también conocido como RAID0) es que debe saber cuál es su tamaño de banda. Aparentemente por defecto es 64k (en mi caso fue 128k pero no sé si fue sintonizado por el administrador de sistemas de Windows :). De todos modos, si no lo sabe, solo tiene que probar todos los valores estándar posibles y ver cuál le brinda un posible sistema de archivos NTFS viable.
Cree un archivo como el siguiente para 3 discos con un tamaño de fragmento de 128k
.---+--> 3 chunks of 128k
0 3144938240 striped 3 128 /dev/loop2 0 /dev/loop3 0 /dev/loop1 0
`---> total size of the volume `----------+-----------+---> disk order
/!\ :El tamaño del volumen no es exactamente el tamaño que calculamos antes. dmsetup necesita un tamaño de volumen divisible por el tamaño del fragmento (también conocido como tamaño de franja) Y por la cantidad de discos en el volumen. Entonces en nuestro caso. Tenemos 3 discos de 1048312775 sectores. Entonces, el tamaño 'normal' es 1048312775*3=3144938325 sectores, pero debido a la restricción anterior, volveremos a calcular el tamaño y lo redondearemos.# echo "3144938325/128*128" | bc3144938240 sectores
So 3144938240 is the size of your volume in a striped scenario with 3 disk and
128 chunks (aka stripes)
4.3 Montarlo.
Ahora agreguemos todo junto con dmsetup:
# dmsetup create myldm /path/myconfigfile
# dmsetup ls
myldm (253, 1)
# mount -t ntfs -o ro /dev/mapper/myldm /mnt
Si no monta. Entonces puedes usar testdisk:
# testdisk /dev/mapper/myldm
--> Analyse
----> Quick search
------> You should see the volume name (if any). If not it seems compromised :)
--------> Press 'P' to see files and copy with 'c'
5. Conclusión
Lo anterior funcionó para mí. Su experiencia puede ser diferente. Y tal vez haya una manera mejor y más fácil de hacerlo. Si es así, compártalo para que nadie más tenga que pasar por esta molestia :) Además, puede parecer difícil, pero no lo es. Siempre que copie sus datos en algún lugar, intente y vuelva a intentarlo hasta que pueda ver algo. Me tomó 3 días entender cómo juntar todas las partes. Con suerte, lo anterior te ayudará a no perder 3 días.
Nota:Todos los ejemplos anteriores han sido inventados. Puede haber algunas inconsistencias entre los ejemplos a pesar de mi minuciosidad;)
Buena suerte.
6. Enlaces
- [1]:http://www.kernel.org/doc/Documentation/filesystems/ntfs.txt
- [2]:http://russon.org/ntfs/ldm/technical/index.html
- [3]:http://svnweb.freebsd.org/base/stable/9/sys/geom/part/g_part_ldm.c
- [4]:http://ntfs.com/ldm.htm
- [5]:http://sourceforge.net/projects/linux-ntfs/files/LDM%20Documentation/