29 enero 2016

Formato a bajo nivel en GNU/Linux

Esta es una pregunta que estuve haciéndome por un buen tiempo. "¿Cómo puedo formatear a bajo nivel en GNU/Linux?". Bueno, la respuesta es muy sencilla... NO SE PUEDEVoy a explicar por qué no se puede. Los primeros discos rigidos usaban un mecanismo impreciso para el movimiento de los cabezales basado en tecnología de motores de paso. Este mecanismo movía el motor un número determinado de pasos y la pista correcta "debería" aparecer bajo el cabezal. No obstante, si el disco era usado en posición vertical, la gravedad podía mover el cabezal haciendo que se desalineara ligeramente e impidiendo la localización de la pista deseada. La expansión térmica también podía hacer que la pista se moviera relativamente de la posición donde el cabezal esperaba encontrarla, resultando en un error de lectura.

Los daños en la superficie de los discos y en los materiales de almacenamiento magnéticos (con una baja resistencia a la desmagnetización) fueron problemas muy comunes que impedían la lectura de la data y ocasionaban muchos dolores de cabeza.

El formato a bajo nivel era usado entonces para establecer el patron MFM del disco, redefinir la geometría física (ubicando las pistas en las nuevas posiciones donde el motor de paso movía el cabezal) y mapeando los sectores defectuosos. Este último proceso se lograba estableciendo nuevos límites para el disco, permitiéndole al dispositivo funcionar nuevamente "como nuevo" pero con una considerable pérdida de espacio.

Esas son las razones por las cuales el término Formato a Bajo Nivel (o LLF - Low Level Formatting en inglés) se hizo tan popular en los 80 y continua siendo usado en la actualidad de una forma incorrecta.

Los nuevos discos rigidos están diseñados de una forma más precisa; usan estructuras internas complejas y mapean los sectores defectuosos de manera transparente y automática. Esta complejidad hace que los discos solo sean formateados a bajo nivel en la fábrica por el resto de su vida útil. No existe manera de hacer un formato a bajo nivel en un disco rígido IDE/ATA/SATA/SCSI moderno (al menos no sin destruirlo...) y tampoco existe razón para intentarlo.

Existe una manera para redefinir la geometría lógica del disco y es haciendo particiones. Pero debe tenerse en cuenta que geometría lógica es una cosa completamente diferente de geometría física

Actualmente es común oír sobre formato a bajo nivel cuando la gente tiene problemas serios con el disco rigido, bien sea por un virus en el sector de booteo, o porque el dispositivo a empezado a descubrir un montón de sectores dañados o incluso porque desean intentar recuperar ese viejo disco rígido con "aparentes" daños en la superficie.

Después de investigar y leer mucho me dí cuenta que es imposible hacer un formato a bajo nivel en un disco nuevo. Lo que se necesita hacer es una Reinicialización a la Configuración de Fábrica o Formato a Nivel Medio. La reinicialización incluye identificar (y mapear si es posible) cualquier sector que no pueda ser escrito y leído correctamente, así como también el llenado de todas las localidades direccionables del disco con cero bytes (conocido también como Zero-Filling o Zero-Byte Filling). Cuando reinicializas un disco rígido, basicamente usas una utilidad que sobreescribe todo el disco con ceros. Cada localidad del disco es limpiada.

Para reinicializar un disco cada fabricante debería proporcionar una aplicación especial desarrollada para tal fin. Sin embargo estas aplicaciones la mayoría de las veces solo funcionan sobre MS-Windows o MS-DOS.

Afortunadamente eso no es limitante para nosotros, pues podemos hacer la reinicialización en GNU/Linux boteando desde un diskette de inicio (proba el Tom's Root/Boot en http://www.toms.net/rb) y ejecutando:

Para un floppy:
[root@gostir ~]# dd if=/dev/zero of=/dev/fda

o quizas:
[root@gostir ~]# fdformat /dev/fd0H1440

 Para un disco IDE:
[root@gostir ~]# dd if=/dev/zero of=/dev/hda
 
Para un disco SCSI o USB:
[root@gostir ~]# dd if=/dev/zero of=/dev/sda

Al terminar el proceso el dispositivo no tendrá particiones, necesitamos definir nuestra geometría lógica y formatear las nuevas particiones. Eso podemos lograrlo con:

[root@gostir ~]# mke2fs -j /dev/sda1

Con estos dos comandos tendremos nuestro disco como salido de la fábrica ;)