8.1.2c3 El particionador (II)
§3 Particionador en Linux
En realidad, Linux dispone de varias utilidades relacionadas con el manejo de particiones en las unidades de disco; similares entre sí, aunque con características específicas. Entre ellas están las siguientes:
- cfdisk, utilidad que permite crear una partición en un espacio vacío, así como manipular la tabla de particiones de una unidad; establecer si la unidad será arrancable ("bootable") o no; borrar la partición actual; cambiar la geometría (cilindros, cabezas y sectores por pista); establecer el tipo de partición [1] de la unidad, y escribir la tabla de particiones en el disco.
- mkfs. Utilidad que permite crear un sistema de ficheros en un dispositivo (generalmente en una partición). En realidad esta utilidad es una interfaz para las rutinas específicas que permiten crear los distintos sistemas de ficheros soportados por Linux ( 8.1.2a).
- parted. Se trata de un particionador y redimensionador de particiones de disco, que permite crear; destruir; redimensionar; mover y copiar particiones tipo normal y swap de Linux. Además, en caso necesario puede crear un sistema de ficheros para la partición, que pueden ser ext2; ext3; linux-swap; reiserfs; FAT16 y FAT32. Es adecuado para reorganizar la utilización de los discos, así como para copiar los datos a otras unidades, incluso replicar instalaciones (más detalles en la página siguiente).
- fdisk. Una utilidad conducida por menú ("menu driven") que tiene el mismo nombre que su análoga en DOS y es muy similar en cuanto a su funcionamiento .
fdisk es un programa peligroso!! Sea precavido. No lo utilice en una unidad (ni aún en un equipo) con información sensible, a menos que sepa realmente qué está haciendo. Por lo menos no diga que no le he advertido!!. |
§3.1 Sinopsis
Antes de entrar en detalles sobre las formas de realizar particiones, debemos recordar que en Linux, los dispositivos, aparecen como entradas en el directorio /dev (de "devices"), y reciben nombres estandarizados según su tipo [2]. Por ejemplo:
/dev/hda, /dev/hdb, /dev/hdc. Para dispositivos IDE.
/dev/hda dispositivo maestro en el controlador primario
/dev/hdb dispositivo esclavo en el controlador primario
/dev/hdc dispositivo maestro en el controlador secundario
/dev/hdd dispositivo esclavo en el controlador secundario
/dev/sda, /dev/sdb, /dev/hdc, etc. Para dispositivos SCSI.
/dev/sda. Primper dispositivo SCSI
/dev/sdb. Segundo dispositivo SCSI
dev/hdc. Tercer dispositivo SCSI.
etc.
/dev/eda, /dev/edb, /dev/edc, etc. Para dispositivos ESDI.
etc.
Dentro de cada unidad pueden existir hasta 4 particiones, y dentro de ellas distintos volúmenes lógicos (en la terminología Linux se denominan respectivamente particiones primarias y particiones lógicas). Cualquiera que sea su tipo, las particiones dentro de cada unidad se distinguen mediante números. Por ejemplo:
sda 1er dispositivo (drive) SCSI
sda1 1ª partición primaria en el 1er dispositivo
sda2 2ª partición "
sda3 3ª " "
sda4 4ª " "
sdb 2º dispositivo SCSI
sdc 3er dispositivo SCSI
... etc.
El resultado es que un sistema puede montar distintos tipos de disco con varias particiones/volúmenes en cada uno de ellos. Por ejemplo, un sistema puede tener:
hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 hda9 hda10 hda11 >
hdc: hdc1 < hdc5 hdc6 hdc7 hdc8 >
En este caso, el primer dispositivo del primer controlador IDE tiene 4 particiones primarias y 7 secundarias (volúmenes lógicos en la terminología DOS). A su vez, el primer disco del segundo controlador contiene una partición primaria con cuatro secundarias en su interior.
Nota: un dispositivo (drive) IDE puede tener hasta 4 particiones primarias y un número ilimitado de particiones lógicas en cada una de ellas. Observe que el número de la primera partición lógica es siempre 5.
En Linux, el esquema de particiones y distribución de discos puede obtenerse con el comando
fdisk -l
. La salida informa de las características lógicas de cada unidad física conectada
en el sistema [6]: tamaño total; número de cabezas, sectores y cilindros. A continuación, un detalle de la
distribución interior de la unidad, caso de que haya sido particionada. Por ejemplo, aplicando este comando al equipo
cuya distribución de particiones y volúmenes se vio en la página anterior bajo
DOS (arrancado
ahora bajo Linux), se obtienen los siguientes
resultados:
Disk /dev/hda: 15.1 GB, 15103033344 bytes
255 heads, 63 sectors/track, 1836 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End
Blocks Id System
/dev/hda1 * 1
255 2048256 b Win95 FAT32
/dev/hda2 256
1027 6201090 f Win95 Ext'd (LBA)
/dev/hda3 1028
1052 200812+ 82 Linux swap
/dev/hda4 1053
1836 6297480 83 Linux
/dev/hda5 256
510 2048256 b Win95 FAT32
/dev/hda6 511
765 2048256 b Win95 FAT32
/dev/hda7 766
1020 2048256 b Win95 FAT32
/dev/hda8 1021
1027 56196 6 FAT16
Puede comprobarse que existe una sola unidad física conectada (IDE), y que el resultado es mucho más detallado que el proporcionado por su contrapartida DOS. La columna id señala el tipo de partición. 82 y 83 corresponden respectivamente a una partición swap y normal (ext2) de Linux [4]; b es FAT32 DOS/Windows; 6 es FAT16, y f es la partición extendida DOS (que contiene las unidades lógicas). Ver a continuación la lista completa de tipos .
Las tres primeras líneas deben interpretarse como sigue: la unidad tiene 63 sectores en cada pista (track), o lo que es lo mismo, sectores/cabeza ("Head"); abreviadamente 63 S/H. Como hay 255 cabezas/cilindro (255 H/Cyl), el número de sectores por cilindro es 63 S/H x 255 H/Cyl = 16065 S/Cyl. Como el tamaño estándar de un sector es de 512 byte ( 8.1.2), la capacidad de un cilindro es 16065 S/Cyl x 512 Bytes/S = 8225280 Bytes/Cyl. Finalmente, puesto que la unidad tiene 1836 cilindros, su capacidad total es 8225280 Bytes/Cyl x 1836 Cyl = 15.101.614.080 Bytes.
Nota: los 1.419.264 Bytes de diferencia entre el valor teórico y la capacidad "real" del dispositivo señalada en la primera línea (15.103.033.244 Bytes), son desaprovechados. Esta diferencia hay que buscarla en el ajuste entre las características reales del dispositivo y el artificio cabezas, sectores, pistas (HST) utilizado para su manejo. Por supuesto, la unidad no tiene 255 cabezas. En este caso concreto tiene solo dos. De hecho, el ajuste entre la realidad y el artificio HST puede variar incluso para una misma unidad [3].
El número total de cilindros (1836 en este caso) es importante, porque las particiones Linux se definen mediante los números de cilindro inicial y final. El valor mínimo es 1, el máximo es el último cilindro del dispositivo.
Nota: el truco para saber quién contiene qué, y si existen espacios libres/desaprovechados, consiste en controlar los valores Start y End de los cilindros utilizados por la partición. Por ejemplo, en este caso, la partición extendida DOS /dev/hda2 (segunda partición primaria de la unidad), que empieza en el cilindro 256 y termina en la 1027, contiene las particiones lógicas /dev/hada5, /dev/hada6, /dev/hda7 y /dev/hda8. A continuación sigue la partición swap de Linux (primaria) y la normal Linux, también primaria, que se extiende hasta el final del disco (último cilindro).
Utilizando la nomenclatura estándar de Linux, la distribución del dispositvo IDE sería:
hda: hda1 hda2 < hda5 hda6 hda7 hda8 > hda3 hda4
Las unidades "montadas" (que no es lo mismo que unidades conectadas) pueden verse en el fichero /etc/mtab, y el espacio libre en las distintas unidades del sistema puede verse con el comando df.
§3.2 fdisk
La forma más simple de utilizar esta utilidad es mediante el comando
fdisk dispositivo
donde dispositivo es una unidad física o lógica. Por ejemplo, en el equipo anterior puede ser /dev/hda, /dev/hda8, etc. En el primer caso, las operaciones se refierirían a la totalidad de la unidad, y en el segundo a la partición de 56196 bloques.
Una vez tecleado el comando, el sistema responde:
Command (m for help):
A continuación pueden introducirse las acciones deseadas. Si elegimos m, aparece el menú con las opciones disponibles:
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Al decidir el tipo de partición deseada, recuerde que Windows no
puede "ver" las particiones Linux, mientras que a la inversa sí. Al
final es conveniente utilizar la opción v (verificar la tabla), que
proporciona el espacio desaprovechado ("unallocated sectors"). Si las
particiones definidas no ocupan la totalidad de la unidad, se muestra el espacio
disponible para nuevas particiones o volúmenes lógicos. Si se ha agotado
la unidad, es
normal que existan algunos sectores desaprovechados (si son pocos no se
preocupe). Por ejemplo, en el sistema anterior ,
el resultado es:
310 unallocated sectors
Al finalizar nuestras operaciones es imprescindible escribir los cambios en el disco y salir con w. Salir sin cambios con q. Observará que el sistema va proporcionando nombre a las particiones (de acuerdo con las reglas antes mencionadas ) a medida que usted las crea.
La opción x conduce a un submenú que, entre otras posibilidades, permite modificar la geometría lógica del dispositivo (número de cilindros y cabezas 6.2). El programa avisa que estamos en modo "experto":
Expert command (m for help):
Seleccionando m, se muestran las nuevas opciones:
Command action
b move beginning of data in a partition
c change number of cylinders
d print the raw data in the partition table
e list extended partitions
f fix partition order
g create an IRIX (SGI) partition table
h change number of heads
m print this menu
p print the partition table
q quit without changes
r return to main menu
s change the number of sectors/track
v verify the partition table
w write table to disk and exit
La opción p muestra la tabla de particiones de la unidad. Es
exactamente la misma información que se obtiene con el comando fdisk -l
,
aunque en este caso, solo la correspondiente a la unidad seleccionada al iniciar
fdisk. Puede ser buena idea utilizar esta opción después de cada
operación para ver el resultado. En una unidad cuya definición es
sda: sda1 sda2 < sda5 sda6 sda7 sda8 >
la invocación de fdisk seria:
fdisk /dev/sda
y la opción p proporciona el siguiente resultado (consideraremos esta misma unidad en el resto de ejemplos):
Disk /dev/sda: 10.0 GB, 10056130560 bytes
240 heads, 63 sectors/track, 1299 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start
End Blocks Id System
/dev/sda1 *
1 271 2048728+
b Win95 FAT32
/dev/sda2
272 1299 7771680
f Win95 Ext'd (LBA)
/dev/sda5
272 536 2003368+
b Win95 FAT32
/dev/sda6
537 801 2003368+
b Win95 FAT32
/dev/sda7
802 1066 2003368+ b
Win95 FAT32
/dev/sda8
1067 1299 1761448+ b
Win95 FAT32
La
opción l muestra los tipos de particiones posibles en Linux (columna
Id). Son los
siguientes:
0 Empty 1c Hidden Win95 FA 70 DiskSecure Mult bb Boot Wizard hid
1 FAT12 1e Hidden Win95 FA 75 PC/IX be Solaris boot
2 XENIX root 24 NEC DOS 80 Old Minix c1 DRDOS/sec (FAT-
3 XENIX usr 39 Plan 9 81 Minix / old Lin c4 DRDOS/sec (FAT-
4 FAT16 <32M 3c PartitionMagic 82 Linux swap c6 DRDOS/sec (FAT-
5 Extended 40 Venix 80286 83 Linux c7 Syrinx
6 FAT16 41 PPC PReP Boot 84 OS/2 hidden C: da Non-FS data
7 HPFS/NTFS 42 SFS 85 Linux extended db CP/M / CTOS / .
8 AIX 4d QNX4.x 86 NTFS volume set de Dell Utility
9 AIX bootable 4e QNX4.x 2nd part 87 NTFS volume set df BootIt
a OS/2 Boot Manag 4f QNX4.x 3rd part 8e Linux LVM e1 DOS access
b Win95 FAT32 50 OnTrack DM 93 Amoeba e3 DOS R/O
c Win95 FAT32 (LB 51 OnTrack DM6 Aux 94 Amoeba BBT e4 SpeedStor
e Win95 FAT16 (LB 52 CP/M 9f BSD/OS eb BeOS fs
f Win95 Ext'd (LB 53 OnTrack DM6 Aux a0 IBM Thinkpad hi ee EFI GPT
10 OPUS 54 OnTrackDM6 a5 FreeBSD ef EFI (FAT-12/16/
11 Hidden FAT12 55 EZ-Drive a6 OpenBSD f0 Linux/PA-RISC b
12 Compaq diagnost 56 Golden Bow a7 NeXTSTEP f1 SpeedStor
14 Hidden FAT16 <3 5c Priam Edisk a8 Darwin UFS f4 SpeedStor
16 Hidden FAT16 61 SpeedStor a9 NetBSD f2 DOS secondary
17 Hidden HPFS/NTF 63 GNU HURD or Sys ab Darwin boot fd Linux raid auto
18 AST SmartSleep 64 Novell Netware b7 BSDI fs fe LANstep
1b Hidden Win95 FA 65 Novell Netware b8 BSDI swap ff BBT
La opción o
es quizás la más peligrosa!!. Si invoca fdisk sobre una unidad
física. Por ejemplo, en nuestro caso, con el comando
fdisk /dev/sda
y a continuación selecciona o y w, habrá eliminado todas las particiones existentes y en su lugar habrá una única partición primaria DOS.!!
La opción u permite cambiar el tipo de unidad que se
utilizará en el resto de opciones (por defecto se utilizan sectores). La selección conmuta entre mostrar/usar unidades
en sectores o cilindros. En cada ocasión se muestra alguno de los siguientes mensajes:
Changing display/entry units to cylinders
Changing display/entry units to sectors
La opción d permite borrar una partición. La
operatoria depende de que la unidad física a la que estamos aplicando fdisk tenga una o más
particiones o volúmenes. Por ejemplo, si solo tiene un volumen, el
borrado es inmediato [5]; la respuesta es:
Command (m for help): d
Selected partition 1
Si por el contrario la distribución interna de la unidad es la del ejemplo anterior , al seleccionar d, se solicita el número de la partición a borrar:
Command (m for help): d
Partition number (1-8):
Aquí tiene que introducir un número. Si selecciona una partición inexistente. Por ejemplo 3 en el caso anterior, se obtiene un mensaje:
Warning: partition 3 has empty type
Si selecciona un número no válido. Por ejemplo, 0 o 9, la respuesta es:
Value out of range
Nota: en los ejemplos que siguen supondremos que hemos introducido 8, con lo que hemos borrado la partición sda8, y que a continuación hemos seleccionado w para grabar los cambios. El programa termina, y ahora la definición de la unidad es:
sda: sda1 sda2 < sda5 sda6 sda7 >
Volvemos a invocar fdisk con el comando
# fdisk /dev/sda
La opción v produce la siguiente salida:
3523208 unallocated sectors
que correspondían al volumen sda8 borrado en el paso anterior
La opción n permite crear una nueva partición. Se obtiene la siguiente respuesta:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
Seleccionando p, y a continuación 1 en la unidad del ejemplo:
Partition number (1-4): 1
Partition 1 is already defined. Delete it berfore re-adding it.
Command (m for help):
Seleccionando de nuevo n y l (crear una partición lógica) se obtiene:
First cylinder (1067-1299, default 1067):
Observe que, por defecto, fisk intenta situar el principio de la nueva partición inmediatamente después del último cilindro ocupado. Pulsando Intro (valor por defecto) se obtiene:
Using default value 1067
Last cylinder or +size or +sizeM or +sizeK (1067-1299, default 1299):
Aquí puede introducirse el cilindro final o directamente el espacio deseado en Bytes, MBytes o KBytes. Aceptando el valor por defecto volvemos a crear la partición que borramos en el ejemplo anterior. La diferencia es que la nueva partición es tipo Linux. En efecto, el comando p proporciona el siguiente resultado:
Disk /dev/sda: 10.0 GB, 10056130560 bytes
240 heads, 63 sectors/track, 1299 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start
End Blocks Id System
/dev/sda1 *
1 271 2048728+
b Win95 FAT32
/dev/sda2
272 1299 7771680
f Win95 Ext'd (LBA)
/dev/sda5
272 536 2003368+
b Win95 FAT32
/dev/sda6
537 801 2003368+
b Win95 FAT32
/dev/sda7
802 1066 2003368+ b
Win95 FAT32
/dev/sda8
1067 1299 1761448+ 83
Linux
En la página siguiente se muestra la forma que recomiendo para realizar particiones (especialmente si son tipo DOS/Windows para instalar en ellas sistemas de ficheros FAT).
[1] Por defecto Linux crea las nuevas particiones como particiones Linux, pero cfdisk puede crear particiones para otros sistemas operativos.
[2] Seguramente su sistema Linux incluye un listado con las denominaciones "oficiales". En cualquier caso puede consultar la página adjunta, mantenida por Torben Mathiasen Linux allocated devices
[3] A continuación se muestra un caso real de un disco formateado y particionado con el fdisk del DOS. Inspeccionado con el fdisk de Linux muestra la siguiente información:
Disk /dev/sda: 10.0 GB, 10056130560 bytes
240 heads, 63 sectors/track, 1299 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Como puede verse, las "cuentas" cuadran (no hay espacio desaprovechado) y el tamaño teórico coincide con el indicado. Sorprendentemente, después de borradas las particiones existentes (con el fdisk de Linux) y totalmente desprovisto de ninguna estructura interna. Una vez reiniciado el equipo, el fdisk de Linux muestra la siguiente información sobre la unidad:
Disk /dev/sda: 10.0 GB, 10056130560 bytes
64 heads, 32 sectors/track, 9590 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Como puede comprobarse, la reducción de cabezas se ha compensado con el aumento de cilindros. Pero el resultado teórico 10.055.843.840 Bytes no "cuadra" con el tamaño total. La diferencia de 286.720 Bytes serán desaprovechados en este nuevo ajuste.
[4] Las particiones swap no se crean con fdisk, ni se montan con mount, ya que disponen de utilidades específicas. Son respectivamente mkswap y swapon (consulte el manual al respecto).
[5] Recuerde que todavía debe escribir los cambios con w. Mientras tanto, si sale con q, el borrado no tendrá ningún efecto.
[6] Nos referimos a conectadas eléctricamente e identificadas por el Sistema. Por ejemplo, si son unidades extraíbles, con conexión USB o PCMCIA (PC-Card) que hayan sido detectadas. Sin embargo, sus particiones no tiene necesariamente que haber sido "montadas" en el sistema de ficheros Linux.