Método terminal para formatear la unidad de almacenamiento

59

Quiero saber cómo formatear una unidad de almacenamiento desde la terminal. Las cosas útiles para proporcionar en la respuesta se utilizarían a menudo para opciones de comandos y conocimientos básicos que se pueden utilizar para extrapolar usos futuros. Específicamente, me gustaría saber cómo formatear en los diferentes sistemas de archivos como NTFS, FAT32, EXT4, etc. También se necesita información sobre cómo particionar el disco a través del terminal.

Estoy tratando de formatear un disco duro externo de alta capacidad (EHDD) en NTFS, desde el terminal.

Sé que puedo usar gparted para esto, así como otros programas GUI, pero todavía quiero saber cómo hacerlo desde el terminal.

GoProCameraByGoPro
fuente
1
Para quien responda: asegúrese de explicar la opción -men el espacio reservado: es relevante, porque es intuitivo.
Volker Siegel

Respuestas:

66

Hay algunas opciones disponibles:

  1. fdisk(anterior, no es compatible con GPT 4 ).
  2. parted (El hermano CLI de GParted).
  3. Los diversos mkfsprogramas, si ya tiene particiones y desea formatear.

fdisky partedson interactivos y tienen comandos de ayuda, por lo que siempre puede buscar ayuda dentro del programa. Ambos también son programables. Los mkfscomandos no son interactivos.


fdisk

fdiskespera un dispositivo (como /dev/sda) como argumento. Tiene los siguientes comandos:

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)

No uso fdiskmucho Solo me enfocaré en:


parted

partedno necesita un argumento (intenta "adivinar"), pero siempre debe especificar el disco. Dada la opción, partedes el programa que debe preferir. Tiene los siguientes comandos:

  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  resizepart NUMBER END                    resize partition NUMBER
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted

Los comandos se pueden contraer a un prefijo único (por ejemplo, hes la abreviatura de help).

Voy a usar un archivo temporal ( /tmp/part) que creé para mostrarle los comandos, por lo que los tamaños serán algo pequeños. Debe reemplazar eso con el dispositivo que necesita ( /dev/sdapor ejemplo).

Primero, si su disco no tiene una tabla de particiones, debemos crear una:

parted /tmp/part mklabel gpt

o mklabel msdos, si desea la cosa de la partición primaria de 4 de la vieja escuela (llamada tabla de particiones MBR o MSDOS ). Luego hacemos, digamos, una partición ext4 que comienza en 3GB (es decir, deja el 3G inicial libre) y tiene un tamaño de 2GB (es decir, termina en 5GB). partedespera ubicaciones en MB para mkpartfs, pero podemos especificar el sufijo:

parted /tmp/part mkpart primary ext4 3G 5G

Y otro, ahora una partición NTFS de 1GB:

parted /tmp/part mkpart primary ntfs 5G 6G

Resultado:

# parted /tmp/part print
Model:  (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      3000MB  5000MB  2000MB               primary
 2      5000MB  6000MB  1000MB               primary  msftdata

Observe cómo usa los prefijos SI, mientras que GParted usa constantemente prefijos binarios (mientras deja caer el tonto i). Etiquetaré las particiones:

# parted /tmp/part name 1 hello
# parted /tmp/part name 2 world
# parted /tmp/part print
Model:  (file)
Disk /tmp/blah: 10.4GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name   Flags
 1      3000MB  5000MB  2000MB               hello
 2      5000MB  6000MB  1000MB               world  msftdata

Si bien partedpuede crear particiones del sistema de archivos ntfsmuy bien, no puede formatear una partición existente (!) A NTFS:

mkfs partition fs-type
         Make a filesystem fs-type on partition. fs-type can be one 
         of "fat16", "fat32", "ext2", "linux-swap", or "reiserfs".

De hecho, parted le dirá que debe usarlo para manipular particiones, no sistemas de archivos , lo que me lleva a:


mkfs

mkfs, como fsck, es esencialmente una interfaz para varios comandos específicos del sistema de archivos. En mi sistema, por ejemplo, mkfs.bfs, mkfs.cramfs, mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.ext4dev, mkfs.fat, mkfs.minix, mkfs.msdos, mkfs.ntfs, mkfs.vfatestán disponibles.

Ahora, desafortunadamente, aunque partedfunciona bien en un archivo, como el que usé anteriormente, mkfsno puedo ir a buscar particiones en dichos archivos. De hecho, se espera que los Dispositivos de bloque, por lo que si voy a utilizar un nuevo archivo /tmp/filepara mkfs, tengo que forzarlo hacerlo. Utilizará el dispositivo de bloque correspondiente a la partición que desea formatear, como /dev/sda2. La sintaxis general para mkfses:

# mkfs --help
Usage: mkfs [options] [-t type fs-options] device [size]

Options:
 -t, --type=TYPE  file system type, when undefined ext2 is used
     fs-options   parameters to real file system builder
     device       path to a device
     size         number of blocks on the device
 -V, --verbose    explain what is done
                  defining -V more than once will cause a dry-run
 -V, --version    output version information and exit
                  -V as version must be only option
 -h, --help       display this help and exit

For more information, see mkfs(8).

Como puede ver, la -tbandera nos permite pasar banderas específicas del sistema de archivos. Por ejemplo, banderas NTFS:

# mkfs.ntfs --help 
Usage: mkntfs [options] device [number-of-sectors]

Basic options:
    -f, --fast                      Perform a quick format
    -Q, --quick                     Perform a quick format
    -L, --label STRING              Set the volume label
    -C, --enable-compression        Enable compression on the volume
    -I, --no-indexing               Disable indexing on the volume
    -n, --no-action                 Do not write to disk

Advanced options:
    -c, --cluster-size BYTES        Specify the cluster size for the volume
    -s, --sector-size BYTES         Specify the sector size for the device
    -p, --partition-start SECTOR    Specify the partition start sector
    -H, --heads NUM                 Specify the number of heads
    -S, --sectors-per-track NUM     Specify the number of sectors per track
    -z, --mft-zone-multiplier NUM   Set the MFT zone multiplier
    -T, --zero-time                 Fake the time to be 00:00 UTC, Jan 1, 1970
    -F, --force                     Force execution despite errors

Output options:
    -q, --quiet                     Quiet execution
    -v, --verbose                   Verbose execution
        --debug                     Very verbose execution

Help options:
    -V, --version                   Display version
    -l, --license                   Display licensing information
    -h, --help                      Display this help

Developers' email address: [email protected]
News, support and information:  http://tuxera.com

Entonces, hagamos una partición NTFS, con formato rápido ( -Q), forzándola a operar en un archivo sin dispositivo de bloque ( -F), y estableciendo una etiqueta ( -L "hello world").

# mkfs -t ntfs -F -Q -L "hello world" /tmp/file
/tmp/file is not a block device.
mkntfs forced anyway.
The sector size was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 512 bytes.
The partition start sector was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
The number of sectors per track was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
The number of heads was not specified for /tmp/file and it could not be obtained automatically.  It has been set to 0.
Cluster size has been automatically set to 4096 bytes.
To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set.
Windows will not be able to boot from this device.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

Claramente no le gustaba trabajar en un archivo. :) No se preocupe, debería detectar automáticamente la mayoría de los valores cuando trabaje en un disco real. Incluso este "archivo" funciona bien como un sistema de archivos:

# mount -t ntfs-3g /tmp/file /mnt
# touch "/mnt/a file in mnt"
# ls -l /mnt
total 0
-rwxrwxrwx 1 root root 0 Aug 29 06:43 a file in mnt
# umount /mnt
# ls -l /mnt
total 0

(¿Ves los permisos extraños?)


Notas:

  1. Todavía no he usado sudoninguna parte de esta respuesta. Como estaba operando en archivos, y los archivos de mi propiedad, no los necesitaba sudo. partedte advertirá sobre esto. Para los dispositivos de bloque, que generalmente siempre son de su propiedad root, necesitará sudo(o tendrá que usar un shell raíz a través de sudo -io sudo su -).
  2. partedes un programa de GNU, y como muchos programas de GNU, tiene una extensa documentación en el infoformato. Instalar parted-doc( sudo apt-get install parted-doc) y luego ejecutar info parted. También puede consultar el manual del usuario en línea .
  3. GParted es capaz de formatear una partición a NTFS, ya que llama mkfsdirectamente al programa apropiado ( mkntfs, en este caso, mkfs.ntfses solo un enlace mkntfs). También establece una serie de parámetros. De hecho, para la mayoría de las operaciones, puede examinar los detalles de los mensajes GParted para ver qué comandos se ejecutaron.
  4. No entraré en los méritos de las tablas de partición GPT vs MBR / MSDOS, pero es probable que GPT se encuentre en nuevos dispositivos con UEFI, especialmente si tienes Windows 8 en ellos. El estado de las herramientas de partición? analiza qué herramientas están disponibles si se enfrenta a GPT.
  5. LVM, ZFS y btrfs son un juego completamente diferente. Todos tienen sus herramientas de acompañamiento, y debe usarlos en lugar de partedo fdisk(excepto quizás para un paso inicial de crear particiones para su uso).

Nota sobre el parteduso:

La sintaxis del partedprograma es:

parted [options] [device [command [options...]...]]

Cuando corres partedsin un comando, como:

parted /tmp/parted

Se le presentará un shell simple, donde puede ejecutar los comandos anteriores. Sin embargo, estos comandos también se pueden ejecutar directamente usando el partedprograma. Entonces estos tres son equivalentes:

# parted /tmp/parted
GNU Parted 2.3
Using /tmp/parted
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt

Y

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /tmp/parted
Using /tmp/parted
(parted) mklabel gpt

Y

parted /tmp/parted mklabel gpt

Tenga en cuenta también que, al crear particiones con parted, un indicador útil del final de las particiones es -1s(esto es "1" entre el guión y la "s"). Esto es útil si desea que su partición abarque desde un inicio específico hasta el resto del disco. Para ser más específico, correr

parted /dev/sda -- mkpart primary ext4 3G -1s

creará una partición /dev/sdaque comienza en 3G y termina en el último sector del /dev/sdadisco (es decir, abarca desde 3G hasta el resto del disco). Tenga en cuenta que --es necesario, para 1sno ser interpretado como una opción no válida.

muru
fuente
En mi humilde opinión, gdisk, también conocido como GPT fdisk, es superior a la partida
Ethan Reesor
1
@FireLizzard excelente! Por favor, publique una respuesta que detalle cómo usarlo.
muru
Si bien la pregunta es claramente sobre cómo formatear un disco, ¿por qué mencionas incluso parted y fdisk? Incluso te mencionas a ti mismo, que no puedes formatear un disco con parted.
zunder
@kreide leyó nuevamente: "También se necesita información sobre cómo particionar el disco a través del terminal".
muru
11

Primero debe saber cómo particionar su disco duro con la utilidad fdisk.

Linux solo permite 4 particiones primarias. Puede tener un número mucho mayor de particiones lógicas subdividiendo una de las particiones primarias.

Solo una de las particiones primarias puede subdividirse.

fdisk se inicia escribiendo como dispositivo fdisk raíz en el símbolo del sistema.

El dispositivo podría ser algo como / dev / sda o / dev / sdb

Los comandos básicos de fdisk que necesita son:

p print the partition table

n create a new partition

d delete a partition

q quit without saving changes

w write the new partition table and exit

Los cambios que realice en la tabla de particiones no tendrán efecto hasta que emita el comando write (w).

Aquí hay una tabla de partición de muestra:

Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1       184    370912+  83  Linux
/dev/sdb2           185       368    370944   83  Linux
/dev/sdb3           369       552    370944   83  Linux
/dev/sdb4           553       621    139104   82  Linux swap

Ejemplo:

Inicie fdisk desde el indicador de comandos de la shell:

sudo su
fdisk /dev/sdb 

Lo que indica que está utilizando la segunda unidad en su controlador SATA.

Command (m for help): p

Disk /dev/hdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

That makes for 384Mb per partition. 
Now You get to work.


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-621, default 1):<RETURN>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-621, default 621): +384M

Next, You set up the partition You want to use for swap:


Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (197-621, default 197):<RETURN>
Using default value 197
Last cylinder or +size or +sizeM or +sizeK (197-621, default 621): +128M

Ahora la tabla de particiones se ve así:

 Device Boot      Start       End    Blocks   Id  System
/dev/sdb1             1       196    395104   83  Linux
/dev/sdb2           197       262    133056   83  Linux

Finalmente, haces que la primera partición sea de arranque:

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

And You make the second partition of type swap:


Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap)      
Command (m for help): p

El final resulto:

Disk /dev/sdb: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1   *         1       196    395104+  83  Linux
/dev/sdb2           197       262    133056   82  Linux swap

Finalmente, emite el comando de escritura (w) para escribir la tabla en el disco.


La utilidad mkfs se usa para crear un sistema de archivos (ext2, ext3, ext4, etc.) en su sistema Linux.

Debe especificar el nombre del dispositivo a mkfs en el que se creará el sistema de archivos.

Ver los comandos del generador de sistema de archivos disponibles

Los creadores del sistema de archivos (comandos mkfs *) generalmente se buscan en directorios como / sbin /, / sbin / fs, /sbin/fs.d, / etc / fs y / etc.

Si no se encuentra, finalmente busca los directorios encontrados en la variable PATH.

La siguiente lista muestra los comandos mkfs * disponibles en un sistema.

sudo su
cd /sbin
ls mkfs*

mkfs  mkfs.bfs  mkfs.cramfs  mkfs.ext2  mkfs.ext3  mkfs.ext4  mkfs.ext4dev  
mkfs.minix  mkfs.msdos  mkfs.ntfs  mkfs.vfat

Construir un sistema de archivos en un dispositivo específico

Para construir el sistema de archivos usando el comando mkfs, los argumentos requeridos son dispositivo-nombre de archivo y tipo de sistema de archivos como se muestra a continuación.

El siguiente ejemplo crea un sistema de archivos ext4 en la partición / dev / sdb1.

sudo su
mkfs -t ext4 /dev/sdb1 

mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1120112 inodes, 4476416 blocks
223820 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
137 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

Tenga en cuenta que el tipo de sistema de archivos predeterminado para el comando mkfs es ext2.

Si no especifica la opción "-t", creará el sistema de archivos ext2.

Además, puede usar el método que discutimos anteriormente para identificar si tiene un sistema de archivos ext2 o ext3 o ext4.


Formatear una unidad NTFS

Primero, necesitará la capacidad de crear sistemas de archivos NTFS, así que instale ntfsprogs:

sudo su 
apt-get install ntfs-3g

En segundo lugar, elimina la partición y la vuelve a crear como NTFS.

sudo su 
umount /dev/sdb1
fdisk /dev/sdb

Options to select:

    ‘d’ to delete the partition
    ‘n’ to create a new partition
    ‘p’ for primary
    ‘1’ for partition number
    ‘Enter’ for first cylinder (default 1)
    ‘Enter’ for last cylinder (default of max size)
    ‘t’ for type
    ‘L’ to list codes, and enter code for HPFS/NTFS. In my case, it’s ‘7’
    ‘w’ to write changes to disk, and exit

umount /dev/sdb1

En el último paso, desmontas la partición, porque Ubuntu la volvió a montar automáticamente.

Ahora, debe crear el sistema de archivos. Hay dos formas de hacerlo: la manera impaciente (Formato rápido), o la mejor pero mucho más larga (Formato completo).

Formato rápido

Esto solo asigna el espacio en disco, pero no pone a cero la unidad ni verifica si hay sectores defectuosos. Esto significa que tomará unos segundos.

sudo su 
mkfs.ntfs -f /dev/sdb1

Formato completo

Si está mucho más preocupado por la integridad de los datos y no le importa esperar, realice un formato completo.

¡Esto puede demorar algunas horas en poner a cero un disco grande!

sudo su 
mkfs.ntfs /dev/sdb1
kyodake
fuente