
Suite de particionado de discos para discos GPT y MBR, que ofrece herramientas interactivas y scriptables para crear, modificar y reparar tablas de particiones, incluida la corrección de estructuras MBR corruptas.
GPT fdisk (también conocido como gdisk, cgdisk y sgdisk) y FixParts por Roderick W. Smith, [email protected]
Este paquete incluye el código fuente de cuatro programas relacionados con el particionado de discos:
gdisk -- Este programa está modelado según fdisk de Linux, pero opera en discos con Tabla de Particiones GUID (GPT) en lugar de los discos con Registro de Arranque Principal (MBR) que modifica fdisk. Como tal, gdisk es una herramienta interactiva en modo texto para manipular particiones, pero no modifica el contenido de dichas particiones (normalmente sistemas de archivos, pero a veces espacio de intercambio u otros datos).
cgdisk -- Este programa está modelado según cfdisk de Linux, pero opera en discos GPT en lugar de los discos MBR que modifica cfdisk. Como tal, cgdisk es una herramienta en modo texto basada en curses para manipular particiones, lo que significa que utiliza una interfaz que depende de las teclas de dirección y una visualización dinámica, en lugar de las letras de comando y una visualización con desplazamiento como usa gdisk.
sgdisk -- Este programa es conceptualmente similar a los programas sfdisk de Linux y gpt de FreeBSD, pero sus detalles operativos difieren. Permite la manipulación de discos GPT mediante opciones de línea de comandos, por lo que es adecuado para su uso en scripts o por expertos para realizar tareas específicas que podrían requerir varios comandos en gdisk.
fixparts -- Este programa, a diferencia de los tres anteriores, opera en discos MBR. Está diseñado para solucionar ciertos problemas que pueden ser creados por diversas utilidades. Específicamente, puede corregir particiones extendidas con tamaño incorrecto y particiones primarias ubicadas en medio de particiones extendidas. También permite cambiar el estado de partición primaria frente a lógica (dentro de los límites de lo legal en el esquema MBR) y realizar algunos otros cambios menores. NO admite la creación de nuevas particiones; para eso, debe utilizar fdisk, parted u otra herramienta.
Más detalles sobre las capacidades de estas herramientas se presentan a continuación.
Los cuatro programas se basan en el mismo conjunto de código subyacente; solo difieren en sus interfaces de control (definidas en gdisk.cc, cgdisk.cc, sgdisk.cc y fixparts.cc, respectivamente) y en qué código de soporte utilizan.
El programa gdisk está diseñado como un programa similar a fdisk (en cierta medida) para discos particionados con GPT, cgdisk es similar a cfdisk, y sgdisk proporciona la mayor parte de la funcionalidad de gdisk en un programa más amigable para scripts. Aunque libparted y los programas que la utilizan (GNU Parted, gparted, etc.) proporcionan la capacidad de manejar discos GPT, tienen ciertas limitaciones que gdisk supera. Las ventajas específicas de gdisk, cgdisk y sgdisk incluyen:
La capacidad de convertir discos particionados con MBR en el lugar al formato GPT, sin perder datos
La capacidad de convertir etiquetas de disco BSD en el lugar para crear particiones GPT, sin perder datos
La capacidad de convertir del formato GPT al formato MBR sin pérdida de datos (solo gdisk y sgdisk)
Especificación más flexible de los GUID de código de tipo de sistema de archivos, que GNU Parted tiende a corromper
Identificación clara del número de sectores no asignados en un disco
Una interfaz de usuario familiar para los usuarios habituales de fdisk y cfdisk de Linux (solo gdisk y cgdisk)
El código del cargador de arranque MBR se deja intacto
La capacidad de crear un MBR híbrido, que permite que sistemas operativos que no reconocen GPT accedan hasta tres particiones GPT en el disco (solo gdisk y sgdisk)
Por supuesto, GPT fdisk no está exento de limitaciones. Lo más notable es que carece de la conciencia de sistemas de archivos y las funciones relacionadas con sistemas de archivos de GParted. No se puede redimensionar el sistema de archivos de una partición ni crear una partición con un sistema de archivos ya existente con gdisk, por ejemplo. No existe una versión GUI de gdisk.
El paquete GPT fdisk proporciona tres archivos de programa: el interactivo en modo texto gdisk, el basado en curses cgdisk y el controlado por línea de comandos sgdisk. Los dos primeros están destinados a usarse en el particionado manual de discos o en el cambio de detalles de particionado; sgdisk está destinado a usarse en scripts para ayudar a automatizar tareas como la clonación de discos o la preparación de múltiples discos para la instalación de Linux.
La creación de este programa fue motivada por las súplicas de ayuda que he visto en foros en línea de usuarios que han encontrado sus tablas de particiones corruptas por diversas herramientas de particionado con errores. Aunque la mayoría de los sistemas operativos pueden manejar los discos afectados sin problemas, las herramientas basadas en libparted (GParted, parted, la mayoría de los instaladores de Linux, etc.) tienden a fallar cuando se presentan con estos discos. Normalmente, el síntoma es un disco que parece no contener particiones; sin embargo, a veces la herramienta libparted presenta particiones diferentes de las que ve el sistema operativo.
He observado cuatro causas de estos síntomas, tres de las cuales FixParts puede corregir:
Datos GPT antiguos -- Si un disco se utiliza como disco GPT y luego se reutiliza como disco MBR, los datos GPT pueden no borrarse por completo. Esto sucede si el disco se reparticiona con fdisk o el instalador de Microsoft Windows, por ejemplo. (Las herramientas basadas en libparted eliminan correctamente los datos GPT antiguos al convertir de GPT a formato MBR.) FixParts verifica este problema al iniciar y ofrece corregirlo. Si opta por borrar los datos GPT, este borrado ocurre inmediatamente, a diferencia de otros cambios que realiza el programa.
Particiones extendidas con tamaño incorrecto -- Algunas herramientas crean una partición extendida que es demasiado grande, normalmente terminando después del último sector del disco. FixParts corrige automáticamente este problema (si utiliza la opción 'w' para guardar la tabla de particiones).
Particiones primarias dentro de una partición extendida -- Algunas utilidades crean o mueven particiones primarias al rango cubierto por la partición extendida. FixParts normalmente puede corregir este problema convirtiendo la partición primaria en una partición lógica o cambiando una o más particiones lógicas en primarias. Sin embargo, tales correcciones no siempre son posibles, al menos no sin eliminar o redimensionar otras particiones.
Datos RAID residuales -- Si un disco se utiliza en una matriz RAID y luego se reutiliza como disco no RAID, algunas utilidades pueden confundirse y no ver el disco. FixParts NO puede corregir este problema. Debe destruir los datos RAID antiguos, o posiblemente eliminar el paquete dmraid del sistema, para solucionar este problema.
Cuando se ejecuta, FixParts presenta una interfaz similar a fdisk, que le permite ajustar los tipos de partición (primaria, lógica u omitida), cambiar los códigos de tipo, cambiar el indicador de arranque, etc. Aunque puede eliminar una partición (omitiéndola), no puede crear nuevas particiones con el programa. Si está acostumbrado a particionar discos, especialmente con fdisk de Linux, dos características inusuales de FixParts requieren una explicación:
Sin particiones extendidas -- Internamente, FixParts lee la tabla de particiones y descarta los datos de cualquier partición extendida que encuentre. Cuando guarda la tabla de particiones, el programa genera una nueva partición extendida. Este diseño significa que el programa corrige automáticamente muchos problemas relacionados con la partición extendida. También significa que no verá evidencia de particiones extendidas en la interfaz de usuario de FixParts, aunque realiza un seguimiento de los requisitos y le impide crear diseños ilegales, como una primaria entre dos lógicas.
Numeración de particiones -- En la mayoría de las herramientas de Linux, las particiones 1-4 son primarias y las particiones 5 y superiores son lógicas. Aunque una tabla de particiones legal cargada en FixParts inicialmente cumplirá con esta convención, algunos tipos de tabla dañada pueden no hacerlo, y varios cambios que realice también pueden causar desviaciones. Cuando FixParts escribe la tabla de particiones, su numeración se alterará para ajustarse a las convenciones estándar de MBR, pero debe usar el etiquetado explícito de las particiones como primarias o lógicas en lugar de los números de partición para determinar el estado de una partición.
Para compilar GPT fdisk, debe tener instaladas las herramientas de desarrollo adecuadas, especialmente el Compilador de Colección GNU (GCC) y su compilador g++ para C++. También he probado la compilación con Clang, que parece funcionar; sin embargo, no he realizado pruebas exhaustivas de los binarios resultantes, más allá de verificar algunos conceptos básicos. En Windows, se puede usar Microsoft Visual C++ 2008 en su lugar. Además, tenga en cuenta estos requisitos:
En Linux, FreeBSD, OS X y Solaris, debe estar instalado libuuid. Este es el estándar para Linux y OS X, aunque es posible que deba instalar un paquete llamado uuid-dev o algo similar para obtener los encabezados. En FreeBSD, debe instalarse el puerto e2fsprogs-libuuid.
La biblioteca ICU (http://site.icu-project.org), que proporciona soporte para nombres de particiones Unicode, es opcional en todas las plataformas excepto Windows, donde no es compatible. El uso de esta biblioteca era necesario para obtener un soporte adecuado de nombres de particiones UTF-16 en versiones de GPT fdisk anteriores a 0.8.9, pero a partir de esa versión ya no debería ser necesario. No obstante, puede usarla si tiene problemas con el nuevo soporte UTF-16. Esta biblioteca normalmente está instalada en Linux y OS X, pero es posible que necesite instalar los encabezados de desarrollo (libicu-dev o algo similar en Linux; o el paquete libicu36-dev de Fink en OS X). Para compilar con soporte ICU, debe modificar el Makefile: busque líneas comentadas que se refieran a USE_UTF16, -licuuc, -licudata o -licucore. Descoméntelas y comente los equivalentes que carecen de estas líneas.
El programa cgdisk requiere la biblioteca ncurses y sus archivos de desarrollo (encabezados). La mayoría de las distribuciones de Linux instalan ncurses de forma predeterminada, pero es posible que necesite instalar un paquete llamado libncurses5-dev, ncurses-devel o algo similar para obtener los archivos de encabezado. Estos archivos ya estaban instalados en mi sistema de desarrollo Mac OS X; sin embargo, es posible que se hayan instalado como dependencias de otros programas que he instalado. Si tiene problemas para instalar ncurses, puede compilar gdisk y/o sgdisk sin cgdisk especificando solo los objetivos que desea compilar para make.
El programa sgdisk requiere la biblioteca popt y sus archivos de desarrollo (encabezados). La mayoría de las distribuciones de Linux instalan popt de forma predeterminada, pero es posible que necesite instalar un paquete llamado popt-dev, popt-devel o algo similar para obtener los archivos de encabezado. Los usuarios de Mac OS pueden encontrar una versión de popt para Mac OS desde Darwin Ports (http://popt.darwinports.com) o Fink (http://www.finkproject.org); sin embargo, primero deberá instalar DarwinPorts o Fink (las instrucciones existen en las páginas de los proyectos relevantes). Alternativamente, puede compilar gdisk y/o cgdisk solos, sin sgdisk; gdisk no requiere popt.
Cuando todas las herramientas y bibliotecas de desarrollo necesarias estén instaladas, puede descomprimir el paquete y escribir "make" en el símbolo del sistema en el directorio resultante. (Es posible que deba escribir "make -f Makefile.mac" en Mac OS X, "make -f Makefile.freebsd" en FreeBSD, "make -f Makefile.solaris" en Solaris, o "make -f Makefile.mingw" para compilar usando MinGW para Windows). También es posible que deba agregar directorios de encabezados (include) o directorios de bibliotecas configurando la variable de entorno CXXFLAGS o editando el Makefile. El resultado deben ser archivos de programa llamados gdisk, cgdisk, sgdisk y fixparts. Escribir "make gdisk", "make cgdisk", "make sgdisk" o "make fixparts" compilará solo los programas solicitados. Puede usar estos programas en su lugar o copiar los archivos a un directorio adecuado, como /usr/local/sbin. Puede copiar las páginas del manual (gdisk.8, cgdisk.8, sgdisk.8 y fixparts.8) a /usr/local/man/man8 para que estén disponibles.
¡ESTE SOFTWARE ES BETA! ¡SI BORRA SU DISCO DURO O SE COME A SU GATO, NO ME CULPE A MÍ! Hasta la fecha, he probado el software en varias unidades flash USB, discos duros físicos y discos virtuales en los entornos QEMU y VirtualBox. Muchos otros también han usado el software en sus computadoras. Creo que todos los errores de corrupción de datos han sido eliminados, pero sé muy bien que las probabilidades de que se me haya escapado algo son altas. Esto es particularmente cierto para discos grandes (más de 2 TiB); mis únicas pruebas directas con tales discos son con discos virtuales QEMU y VirtualBox. Sin embargo, he recibido informes de usuarios de éxito con matrices RAID de más de 2 TiB.
Mi principal plataforma de desarrollo es un sistema que ejecuta la versión de 64 bits de Gentoo Linux. También he probado en varias otras distribuciones de Linux de 32 y 64 bits, Mac OS X 10.5 y 10.6 basado en Intel, FreeBSD 7.1 de 64 bits y Windows 7.
Este programa está licenciado bajo los términos de la GNU GPL (consulte el archivo COPYING).
Este código es principalmente mío; sin embargo, he utilizado tres funciones de otros dos programas con licencia GPL:
El código utilizado para generar CRC está tomado del programa efone de Krzysztof Dabrowski y ElysiuM deeZine. (Consulte los archivos de código fuente crc32.h y crc32.cc).
Una función para encontrar el tamaño del disco está tomada de Linux fdisk de A. V. Le Blanc. Este código ha sido posteriormente muy modificado.
Los contribuyentes de código adicionales incluyen:
Yves Blusseau ([email protected])
David Hubbard ([email protected])
Justin Maggard ([email protected])
Dwight Schauer ([email protected])
Florian Zumbiehl ([email protected])
Guillaume Delacour (contribuyó el script gdisk_test.sh)