viernes, agosto 26, 2005

Cambiar de tamaño particiones NTFS en un DL360

Hoy he tenido que cambiar de tamaño unas particiones NTFS en un servidor DL360 que tenía Windows 2000 instalado sobre un RAID 1 creado por la controladora hardware en los dos discos que se le pueden poner. Puesto que tengo una licencia de Partition Magic 8, probé en principio con él. Sin embargo, este producto no funciona sobre las versiones server de Windows. Decidí pues, mirar una vieja alternativa, ntfsresize, un conjunto de herramientas de fuentes abiertas que permiten manejar el sistema de ficheros. Normalmente se usan desde una distribución de rescate. Viene por ejemplo con Knoppix. Sin embargo, me parece algo lento de ejecutar desde CDROM. Prefiero recurrir a distribuciones más específicas para este tipo de funciones como Crash Recovery. Usando la última versión de la misma, arranqué el servidor desde el CDROM, y monté la distro

Lo primero, en este caso, es que los DL360G4 utilizan una controladora RAID Smart Array 6i. Esta controladora utiliza el módulo del kernel cciss como controlador y normalmente crea en el directorio /dev las entradas como /dev/cciss/c0dn donde n representa el disco definido en la controladora y entradas del tipo /dev/cciss/c0d0py donde y representa la partición. Así, por ejemplo la primera partición definida sobre el primer disco sería /dev/cciss/c0d0p1. Este dispositivo es de tipo block (bloque) y utiliza como major number (al menos sobre el primer disco) 104. El disco completo (sin particiones) utiliza como minor number 0, y las particiones utilizan como minor 1 en adelante. Es importante saber este esquema puesto que Crash Recovery no crea las entradas adecuadas en /dev, y tenemos que crearlas nosotros a mano con ayuda de mknod.

Para efectuar correctamente la operación, lo primero que debe hacerse es, una vez cargado el Crash Recovery y las utilidades, cargar el módulo del kernel de la controladora y crear los dispositivos de bloque para acceder a la tabla de particiones y a la partición de Windows que se quiera cambiar el tamaño. En este ejemplo voy a suponer que solo existe una única partición en el disco que queremos cambiar. Para ello:

[tinker:root](~)#modprobe -k cciss
[tinker:root](~)#mknod c0d0 b 104 0
[tinker:root](~)#mknod c0d0p1 b 104 1
La primera línea nos carga el driver, y las dos segundas crean en el directorio actual dos entradas, la primera hace referencia a todo el disco, de tal manera que permite editar la tabla de particiones y la segunda para acceder a la primera partición del disco, cosa que necesitará la utilidad ntfsresize

Ahora, lo primero que debe de hacerse es obtener la información de la tabla actual de particiones, anotarla y guardarla en sitio seguro, puesto que se va a modificar la misma, ya que el proceso de cambio de tamaño no es automático y exige borrar la partición y crearla de nuevo. Es especialmente importante anotar el cilindro de inicio de la partición:

[tinker:root](~)#fdisk -l c0d0
Disco /dev/cciss/c0d0: 72.8 GB, 72833679360 bytes
255 cabezas, 32 sectores/pista, 17433 cilindros
Unidades = cilindros de 8160 * 512 = 4177920 bytes

Disposit. Inicio Principio Fin Bloques Id Sistema
/dev/cciss/c0d0p1 * 1 15935 65014784 7 HPFS/NTFS
Ahora se pasa comprobar hasta cuando se puede reducir la partición actual:
[tinker:root](~)#ntfsresize -i c0d0p1 ntfsresize v1.6.99 NTFS volume version: 3.1 Current volume size: 72833679360 bytes (72800 MB) Scanning volume ... 100.00 percent completed You could resize at 37601280000 bytes or 37601 MB (freeing 35199 MB).
Como se ve hay que hacer referencia explícita a la partición NTFS que se quiere reducir. La utilidad imprime hasta cuanto podemos achicar la partición de NTFS. Es importante que esta partición esté lo más desfragmentada posible y que tengan los datos situados al principio. Como nota adicional, comentar que está calculado los tamaños de manera aproximada. (no tengo los datos reales de cuando realicé la instalación).

Supongase que se quiere dejar la partición original con un tamaño de 40G, y liberar el resto. Lo primero es efectuar la posible operación de manera no destructiva:

[tinker:root](~)#ntfsresize -s 40G -n c0d0p1
ntfsresize v1.6.99
NTFS volume version: 3.1
Current volume size: 72833679360 bytes (72800 MB)
New volume size : 39999406080 bytes (39999 MB)
Scanning volume ...
100.00 percent completed
Updating $BadClust file ...
Updating $Bitmap file ...
Updating Boot record ...
The read-only test run ended successfully.
Una vez superado el test, podemos cambiar el tamaño de la partició:
[tinker:root]:(~)# ntfsresize -s40G /dev/cciss/c0d0p1
ntfsresize v1.6.99
NTFS volume version: 3.1
Current volume size: 72833679360 bytes (72800 MB)
New volume size : 39999406080 bytes (39999 MB)
Scanning volume ...
100.00 percent completed
WARNING: Every sanity check passed and only the DANGEROUS operations left.
Please make sure all your important data had been backed up in case of an unexpected failure!
Are you sure you want to proceed (y/[n])? y
Schedule chkdsk NTFS consistency check at Windows boot time ...
Resetting $LogFile ... (this might take a while)
Updating $BadClust file ...
Updating $Bitmap file ...
Updating Boot record ...
Syncing device ...
NTFS had been successfully resized on device '/dev/cciss/c0d0p1'.
You can go on to resize the device e.g. with 'fdisk'.
IMPORTANT: When recreating the partition, make sure you
1) create it with the same starting disk cylinder
2) create it with the same partition type (usually 7, HPFS/NTFS)
3) do not make it smaller than the new NTFS filesystem size
4) set the bootable flag for the partition if it existed before
Otherwise you may lose your data or can't boot your computer from the disk!
Ahora viene la parte más peligrosa de todo el proceso. Ahora hay que borrar la tabla de particiones original y ajusta la partición que hemos cambiado el tamaño. Para ello se usa fdisk.
[tinker:root]:(~)# fdisk c0p0

Command (m for help): p
Disk /dev/cciss/c0d0: 255 heads, 32 sectors, 17433 cylinders
Units = cylinders of 8160 * 512 bytes

DeviceBootStartEndBlocksIdSystem
/dev/cciss/c0d0 *115935650147847HPFS/NTFS

br/> Command (m for help): d
Partition number (1-4): 1

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15935, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-15935, default 15935): +40G
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 7
Changed system type of partition 1 to 7 (HPFS/NTFS)

Command (m for help): a
Partition number (1-4):1

Command (m for help): p

Disk /dev/cciss/c0d0: 255 heads, 32 sectors, 17433 cylinders Units = cylinders of 16065 * 512 bytes
DeviceBootStartEndBlocksIdSystem
/dev/cciss/c0d0*1957478123840 7 HPFS/NTFS
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
Este es el paso donde un error puede dar al traste con la tabla de particiones, por lo cual es fundamental haber hecho una copia de seguridad de los datos importantes. Una vez modificada la tabla, se debe de reiniciar Windows, dejar que pase el chkdsk para que compruebe las modificaciones correctas, y ya debe de tenerse el espacio libre necesario al final de la antigua partición.

Es interesante comentar que conviene darse un margen a la hora de cambiar el tamaño de la partición, es decir, de no ajustar los datos excesivamente, sino dejar espacio libre suficiente en la partición que estamos reduciendo. Hay que tener en cuenta que realmente lo que se hace es borrar y recrear la partición, y un error de cálculo lleva a que estemos sobreescribiendo alguna de ellas.

No olvidar tampoco poner el flag de arranque en el fdisk, porque podemos encontrarnos si no es así con la desagradable sorpresa de que el sistema no arranca.

Por último, agradecer a la gente de ntfsresize su magnífico trabajo y este documento donde he sacado la información (y la salida de los programas) para escribir esta entrada de blog.

1 comentario:

Anónimo dijo...

Save Save and Save again
Consider a voluntary subscription by clicking on the PayPal button. Make payments with PayPal - it's fast, free and secure! Search * Tips Hacksaw cut back * TODAY * We interrupt this editorial page Save Save ...
What a terrific blog,congratulations! I’ve already added it to my bookmark!

I too have a somewhat interesting online dating service site/blog. It encompasses all online dating service and can substantially reduce LD phonecalls and increase sales and profit!

Perhaps you’d care to check it out and experience the excitement over 30 days,all for just $1-Thank You:-)