En este breve artículo voy a explicar cómo utilizar el comando file para determinar si una partición tiene formato ext2, ext3, o ext4. Y algunas cosillas extra...



De vez en cuando se presenta la ocasión en la que debemos montar una partición desconocida, de la que no sabemos cual es su formato de sistema de archivos. Claro que es posible examinar la tabla de particiones para determinar de qué tipo de partición se trata. Por ejemplo, si hemos agregado un nuevo disco rígido, al cual se accede a través de /dev/sdc:

# fdisk -l /dev/sdc

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002f2d6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1       36474   292977373+  83  Linux
/dev/sdc2           36475       60801   195406627+  83  Linux

Podemos observar que posee dos particiones /dev/sdc1 y /dev/sdc2, las cuales aparecen como tipo 83 (Linux). Esto significa que se trata de particiones ext2/3/4.

Entonces, ¿cómo es posible determinar exactamente qué formato de sistema de archivos utilizan: ext2, etx3 o ext4? Fácil, utilizando el comando file:

# man file

file se utiliza para determinar el tipo de los archivos. Recuerden que en GNU/Linux la extensión en los nombres de archivo es meramente ilustrativa (a diferencia de Windows), por lo tanto para determinar el tipo de un archivo es necesario examinar su estructura interna. Para ello existe file. Por otro lado, en GNU/Linux todo es un archivo: "Everything is a file". Esta es una característica distintiva de todo sistema basado en Unix por la cual un amplio rango de recursos de E/S tales como documentos, directorios, discos rígidos, modems, teclados, impresoras e inclusive algunos mecanismos de comunicación entre procesos, son simples streams de bytes expuestos a través del espacio de nombres del sistema de archivos. Gracias a este diseño, el mismo conjunto de herramientas, utilidades y APIs pueden ser utilizados sobre un amplio rango de recursos. Cuando se abre un archivo se crea un descriptor, la ruta al nombre del archivo consiste en el sistema de direccionado y el descriptor es la interfaz de flujo de bytes.

Esto implica que el comando file también puede ser utilizado para determinar el tipo de ciertos archivos especiales, como lo son los dispositivos por bloques o caracteres, para ello cuenta con la opción -s. Entonces, si deseamos determinar el tipo de formato de sistema de archivos de una partición, simplemente se debe ejecutar file -s pasando como parámetro el nombre de dispositivo de la misma.

Algunos ejemplos:

# file -s /dev/sdc1
/dev/sdc1: Linux rev 1.0 ext3 filesystem data (large files)
# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext2 filesystem data (mounted or unclean) (large files)
# file -s /dev/sda2
/dev/sda2: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)

De estos ejemplos se observa que la partición sdc1 posee un sistema de archivos etx3, sda1 ext2 y sda2 ext4.

También es posible ejecutar file sobre un disco rígido, lo cual puede retornar diferentes valores si utiliza una tabla de particiones MBR, GPT o no tiene tabla de particiones (por ejemplo, si está asignado a un grupo LVM):

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x3d8800, GRUB version 0.94; partition 1: ID=0x83, active, starthead 32, startsector 2048, 4194304 sectors; partition 2: ID=0x83, starthead 53, startsector 4196352, 102400000 sectors; partition 3: ID=0x82, starthead 254, startsector 106596352, 16777216 sectors; partition 4: ID=0x5, starthead 254, startsector 123373568, 853399552 sectors, code offset 0x48, OEM-ID "      м", Bytes/sector 190, sectors/cluster 124, reserved sectors 191, FATs 6, root entries 185, sectors 64514 (volumes <=32 MB) , Media descriptor 0xf3, sectors/FAT 20644, heads 6, hidden sectors 309755, sectors 2147991229 (volumes > 32 MB) , physical drive 0x7e, dos < 4.0 BootSector (0x0)

Se observa que el disco sda posee una tabla de particiones MBR; tiene el bootloader GRUB instalado en el sector de arranque; y cuenta con 4 particiones.

# file -s /dev/sdc
/dev/sdc: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 585954747 sectors; partition 2: ID=0x83, starthead 254, startsector 585954810, 390813255 sectors, code offset 0xb8

sdc también utiliza una tabla de particiones MBR y cuenta con 2 particiones.

# file -s /dev/sdb
/dev/sdb: LVM2 (Linux Logical Volume Manager) , UUID: cECnyFzhW7NnyREe9mKvIreOIo09Pui

Finalmente, sdb es un disco que está asignado completamente a un grupo de volúmenes lógicos LVM.

Entre otras funcionalidades del comando file, se utiliza generalmente para determinar tipos de documentos, por ejemplo:

$ file linuxito
linuxito: PNG image data, 1360 x 690, 8-bit/color RGB, non-interlaced
$ file afip.pdf
afip.pdf: PDF document, version 1.5

También para determinar el formato de binarios y ejecutables:

$ file openvpn-2.2.2-install.exe
openvpn-2.2.2-install.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Cabe destacar que, en los sistemas de archivos que lo soportan, por defecto file modifica la fecha de acceso de los archivos que inspecciona. Si no se desea que file modifique las fechas de acceso se debe utilizar la opción -p (preserve). Para más información ejecutar man file.


Tal vez pueda interesarte


Compartí este artículo