De vuelta al ruedo, luego de unas merecidas (¿?) vacaciones. Pido disculpas por no haber dejado un batch de artículos para que se entretengan durante mi ausencia, pero tuve un fin de año bastante agitado.

En este artículo voy a explicar cómo dar formato NTFS a una partición de forma sencilla desde la línea de comandos. El formato NTFS (New Technology File System) es un sistema de archivos propietario desarrollado por Microsoft a partir de Windows NT. Es el sistema de archivos por defecto para los sistemas operativos Windows en la actualidad. NTFS tiene varias mejoras tecnológicas sobre FAT y HPFS, tales como un mejor soporte para metadatos; el uso de estructuras de datos avanzadas para mejorar la performance, confiabilidad y utilización de espacio en disco; y extensiones adicionales tales como listas de control de acceso (ACL) y journaling.

En GNU/Linux, la capacidad para gestionar sistemas de archivos NTFS es provista por el driver NTFS-3G. NTFS-3G provee la funcionalidad necesaria para leer y escribir sistemas de archivos NTFS desde Linux, Mac OS X, FreeBSD, BeOS y Haiku con licencia GNU GPL y open-source. A diferencia del driver NTFS incluido en el kernel Linux, tiene muy pocas limitaciones en cuanto a la escritura de archivos: permite crear, renombrar, mover o borrar ficheros de cualquier tamaño en particiones NTFS, con la excepción de ficheros cifrados. Aunque todavía no posee la funcionalidad necesaria para modificar ACLs ni permisos. A partir de la versión 2.6 del kernel Linux, NTFS-3G monta las particiones NTFS usando el módulo de espacio de usuario FUSE (Filesystem in Userspace).



¿Por qué un usuario de GNU/Linux querría dar formato NTFS a una partición?

Dar formato NTFS a una partición es una forma sencilla para compartir datos y archivos entre GNU/Linux y Windows en sistemas dual-boot, ya que es un formato de sistema de archivos que ambos sistemas operativos pueden gestionar (leer/escribir).

Por supuesto existen alternativas para gestionar sistemas de archivos ext2/3/4 desde sistemas operativos Microsoft Windows. El proyecto Ext2Fsd mantiene un driver de sistemas de archivos ext3/4 open-source para Windows 2K/XP/Vista/7. Aunque personalmente, como no confío en Windows, no deseo que sea capaz de leer (y mucho menos escribir) mis particiones ext2/3/4. Por ello me inclino por dar formato NTFS a una partición para que sea compartida por ambos sistemas operativos.

En el siguiente caso escenario, tengo la partición ext4 /dev/sda8 (montada bajo la rama /data) la cual deseo cambiar a NTFS (formatear) para que pueda ser accedida luego desde Windows:

emi@vaio ~ $ mount | grep data
/dev/sda8 on /data type ext4 (rw)

Antes de comenzar es necesario desmontar el sistema de archivos:

emi@vaio ~ $ sudo umount /dev/sda8
emi@vaio ~ $ mount | grep data
emi@vaio ~ $ 

En GNU/Linux, para dar formato NTFS existe la herramienta mkntfs, la cual se incluye en el paquete ntfs-3g:

emi@vaio ~ $ man mkntfs

mkntfs se utiliza para crear un sistema de archivos NTFS en un dispositivo (generalmente una partición de disco) o un archivo (por ejemplo, para ser utilizado por una máquina virtual).

Para dar formato NTFS a la partición /dev/sda8 utilizo el siguiente comando (ADVERTENCIA: ¡¡¡Se perderán todos los datos contenidos dentro de la partición!!!):

emi@vaio ~ $ sudo mkntfs -f -L Data -c 65536 -v /dev/sda8
Windows cannot use compression when the cluster size is larger than 4096 bytes.  Compression has been disabled for this volume.
Creating NTFS volume structures.
Creating root directory (mft record 5)
Creating $MFT (mft record 0)
Creating $MFTMirr (mft record 1)
Creating $LogFile (mft record 2)
Creating $AttrDef (mft record 4)
Creating $Bitmap (mft record 6)
Creating $Boot (mft record 7)
Creating backup boot sector.
Creating $Volume (mft record 3)
Creating $BadClus (mft record 8)
Creating $Secure (mft record 9)
Creating $UpCase (mft record 0xa)
Creating $Extend (mft record 11)
Creating system file (mft record 0xc)
Creating system file (mft record 0xd)
Creating system file (mft record 0xe)
Creating system file (mft record 0xf)
Creating $Quota (mft record 24)
Creating $ObjId (mft record 25)
Creating $Reparse (mft record 26)
Syncing root directory index record.
Syncing $Bitmap.
Syncing $MFT.
Updating $MFTMirr.
Syncing device.
mkntfs completed successfully. Have a nice day.
emi@vaio ~ $ 

La opción -f se utiliza para que realice un formato rápido (sin verificar sectores defectuosos ni rellenar con ceros). Con -L se especifica la etiqueta del volumen. El parámetro -c permite especificar el tamaño de cluster en bytes (por defecto 4096), en este caso utilizo 64KB ya que va a ser un sistema de archivos para almacenar archivos grandes (maximizo el espacio utilizable). Para que la salida sea más verbosa utilizo la opción -v. Finalmente se indica la partición a formatear.

Si deseamos que el sistema de archivos sea montado automáticamente al iniciar el sistema GNU/Linux, es necesario editar el archivo de información estática sobre los sistemas de archivos /etc/fstab:

emi@vaio ~ $ sudo nano /etc/fstab

Si existía una línea para el dispositivo en cuestión, será necesario reemplazarla por la siguiente (de lo contrario agregarla al final):

#Data
/dev/sda8 /data ntfs-3g rw,nosuid,nodev,allow_other,default_permissions 0 2

Con esta línea se montará automáticamente el sistema de archivos NTFS del dispositivo /dev/sda8 bajo la rama /data durante el siguiente inicio. Aunque es posible montarlo sin reiniciar utilizando el comando mount -a (luego de haber finalizado la edición del archivo /etc/fstab y guardado los cambios):

emi@vaio ~ $ mount | grep data
emi@vaio ~ $ sudo mount -a
emi@vaio ~ $ mount | grep data
/dev/sda8 on /data type fuseblk (rw,nosuid,nodev,allow_other,allow_other,default_permissions,blksize=4096)
emi@vaio ~ $ 

Con estos cambios es suficiente para el sistema GNU/Linux. Aunque, para que Windows reconozca automáticamente el nuevo sistema de archivos NTFS, es necesario actualizar la tabla de particiones del disco, ya que a pesar de haber formateado con NTFS, la tabla indica que se trata de un sistema de archivos ext2/3/4 (tipo 83):

vaio emi # fdisk -l /dev/sda | grep sda8
/dev/sda8       132001792   532000767   199999488   83  Linux

La siguiente operación es inocua, aunque si se comete un error manipulando la tabla de particiones se puede provocar la pérdida o destrucción total o parcial de la partición o disco. Para manipular la tabla de particiones se utiliza la herramienta fdisk:

vaio emi # fdisk /dev/sda

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Command (m for help): 

Ingresando el comando h es posible ver la lista de comandos disponibles:

Command (m for help): h
h: unknown command
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)

Command (m for help): 

El comando p imprime la tabla de particiones actual, se observa que la partición /dev/sda8 figura como tipo 83 (Linux):

Command (m for help): p

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bbc48

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     3999743     1998848   83  Linux
/dev/sda2         4001790   892887039   444442625    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda3   *   892887040   893091839      102400    7  HPFS/NTFS/exFAT
/dev/sda4       893091840   976771071    41839616    7  HPFS/NTFS/exFAT
/dev/sda5         4001792    63999999    29999104   83  Linux
/dev/sda6        64002048   124000255    29999104   83  Linux
/dev/sda7       124002304   131999743     3998720   82  Linux swap / Solaris
/dev/sda8       132001792   532000767   199999488   83  Linux
/dev/sda9       532002816   892887039   180442112    7  HPFS/NTFS/exFAT

Command (m for help): 

Para cambiar el tipo de partición (system id) se utiliza el comando t:

Command (m for help): t
Partition number (1-9): 8
Hex code (type L to list codes): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix      
Hex code (type L to list codes): 7
Changed system type of partition 8 to 7 (HPFS/NTFS/exFAT)

Command (m for help): 

Se debe especificar el número de partición (en este ejemplo 8 corresponde con la partición /dev/sda8). Luego se debe especificar el nuevo tipo de partición a designar (es posible imprimir la lista de códigos de particiones ingresando l), el código 7 corresponde con NTFS.

Al imprimir la tabla de particiones se observa el cambio:

Command (m for help): p

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bbc48

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     3999743     1998848   83  Linux
/dev/sda2         4001790   892887039   444442625    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda3   *   892887040   893091839      102400    7  HPFS/NTFS/exFAT
/dev/sda4       893091840   976771071    41839616    7  HPFS/NTFS/exFAT
/dev/sda5         4001792    63999999    29999104   83  Linux
/dev/sda6        64002048   124000255    29999104   83  Linux
/dev/sda7       124002304   131999743     3998720   82  Linux swap / Solaris
/dev/sda8       132001792   532000767   199999488    7  HPFS/NTFS/exFAT
/dev/sda9       532002816   892887039   180442112    7  HPFS/NTFS/exFAT

Command (m for help): 

Finalmente, para guardar los cambios en la tabla de particiones se debe utilizar el comando w:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
vaio emi # 

Ahora la partición figura como NTFS:

vaio emi # fdisk -l | grep sda8
/dev/sda8       132001792   532000767   199999488    7  HPFS/NTFS/exFAT

Si el kernel Linux no reconoce el cambio, es posible ejecutar partprobe para indicar al kernel que re-lea la tabla de particiones, de lo contrario se reflejará el cambio en el siguiente inicio.

Al iniciar Windows, detecta automáticamente el nuevo volumen y le asigna la siguiente letra de unidad disponible.


Tal vez pueda interesarte


Compartí este artículo