Recuperación de Particiones FFS con scan_ffs
Introducción
Esta herramienta es el salvavidas que usamos cuando cuando sin querer, por negligencia, cansancio (después de estar muchas horas trabajando), borracho, o por el motivo X, borramos la tabla de particiones FFS de nuestro OpenBSD.
El comando **scan_ffs** nos permite hacer una exploración del disco que queramos y este nos detectará las particiones FFS que en éste se encuentren, y nos pasará los valores de Size y Offset para luego con esto agregar la partición en el disklabel.
Esto siempre funciona siempre y cuando no hayamos sobreescrito o eliminado físicamente las particiones o parte de ellas (en este último caso podremos agregar la partición pero sólo podremos recuperar parte del contenido).
Detección
Estado anímico
Primero, no entremos en pánico. Si nos dimos cuenta de lo que hicimos justo después de borrar las particiones, es muy probable que podamos recuperarlas. Pero es el momento de estar tranquilos y trabajar con cuidado.
Que hacer con el disco afectado
Lo mejor es poner el disco con las particiones borradas (como slave o en otra controladora) en algún equipo que ya tenga instalado OpenBSD, bootear con un live CD, o si la partición no esta en los primeros 500mb (podrían ser menos también) podemos usar el mismo disco tratando de instalar el sistema operativo en el menor espacio posible.
Scanning
Vamos a suponer que ya tenemos el disco con afectado y el OpenBSD ya listo para ejecutar el scan_ffs (de la manera que mas nos guste o convenga).
Como el scan_ffs nos puede mostrar lo que va detectando de varios modos, yo lo recomiendo ejecutar primero del modo disklabel compatible (que nos muestra los numero de sectores) y luego ir ejecutándolo del modo estándar sólo para las particiones que elijamos.
Ejecutamos lo siguiente para hacer el scanning principal:
1er scanning
- scan_ffs -ls sd1
Donde:
-l: nos muestra la salida en formato disklabel compatible.
-s: detecta de forma inteligente las particiones (funciona muy bien).
sd1: el disco en donde queremos ejecutar el scanning.
Luego de esto tendremos una salida parecida a esta:
1er scanning
X: 626532 1445850 4.2BSD 2048 16384 1 # /tmp X: 2104512 2072385 4.2BSD 2048 16384 1 # /var X: 8401992 4176900 4.2BSD 2048 16384 1 # /usr X: 6972208 12578895 4.2BSD 2048 16384 1 # /home
Donde (las columnas que importan):
2da columna: Size. Tamaño de la partición.
3ra columna: Offset. Desfazaje de la partición.
9na columna: Mount Point. Punto de montaje de la partición.
Es posible que en esta lista no figure la partición que nosotros estamos buscando (mantengamos la paciencia). Acá es cuando tenemos que acordarnos de esos lujosos detalles de OpenBSD… pensemos….mmmm…., por si no lo saben hay una carpeta /var/backups en donde tiene que estar almacenado el backup nuestro último disklabel (esto se realiza en el daily cron). Así que podemos recuperar la partición /var (o /), obtener este archivo y listo.
En el caso que el resultado no sea del todo claro o no sepamos cual es la partición que estamos buscando podemos ejecutar nuevamente el scanning pero con otros parámetros:
2do scanning
- scan_ffs -b 2104512 -e 2105000 sd1
Donde:
-b: indica el sector en donde comenzará el scanning.
-e: indica el sector en donde finalizará el scanning.
sd1: el disco en donde queremos ejecutar el scanning.
De esta manera nos indicará el tamaño en bytes y la fecha de creación de la partición. Si con todos estos datos no sabemos cual es la partición que queremos recuperar, probemos con todas.
Recuperación de las particiones
Luego de que obtuvimos todos los datos de las particiones perdidas hay que agregarlas en el disklabel.
Para eso ejecutamos:
Disklabel
- disklabel -E sd1
Donde:
-E: modo edición interactiva (la que a mi mas me gusta).
sd1: el disco en donde están las particiones.
Luego con el comando interno a agregamos la partición usando los datos de Size y Offset que obtuvimos con el scan_ffs.
Conclusiones
Si bien a veces no podemos obtener la partición perdida de forma directa, con algunos firuletes con el teclado es posible remendar nuestro error. No hay información demasiado clara sobre esto, así que espero que los pueda salvar en el caso que les pase.