¿Cómo cambiar el tamaño de una partición ext4 desde la línea de comando?

¿Cómo cambiar el tamaño de una partición ext4 desde la línea de comando?

¿Cuál es la forma más sencilla de cambiar el tamaño de una partición ext4 (o cualquier tipo de partición según el método) desde la línea de comandos (potencialmente con la menor cantidad de comandos, pero también la más fácil de entender)?

Usar una herramienta como Gparted es obviamente fácil en una GUI, pero ¿qué pasa en la línea de comandos? Supongo que las GUI basadas en texto también pueden contar para la respuesta, ya que técnicamente todavía están en la línea de comando. Sólo tiene que ser fácil.

Por partición me refiero a una partición simple en un único disco de una computadora personal (por ejemplo, en una computadora portátil). Por ejemplo, quiero cambiar el tamaño /dev/sda4. No hay RAID, no hay más de una unidad de disco, no hay nada complicado aquí. Sólo una partición simple en un solo disco (/dev/sdaX en /dev/sda).

Respuesta1

Puede usarlo fdiskpara cambiar su tabla de particiones mientras ejecuta. Referirse aCambio de tamaño en vivo de un sistema de archivos ext4 en Linux (enEl silencio del códigoBlog):

Descargo de responsabilidad: Las siguientes instrucciones pueden arruinar fácilmente sus datos si comete un error. Estaba haciendo esto en una máquina virtual de la que hice una copia de seguridad antes de realizar las siguientes acciones. Si pierde sus datos porque no realizó una copia de seguridad, no venga a quejarse.

...

Primero: aumente el tamaño del disco.

En ESXi esto es sencillo, basta con aumentar el tamaño del disco virtual. Ahora tiene un disco duro más grande pero aún necesita a) aumentar el tamaño de la partición yb) cambiar el tamaño del sistema de archivos.

Segundo: aumente el tamaño de la partición.

Puede utilizar fdiskpara cambiar la tabla de particiones mientras se ejecuta. La instalación estándar de Ubuntu ha creado 3 particiones: una primaria (sda1), una extendida (sda2) con una única partición lógica (sda5). La partición extendida se usa simplemente para intercambio, por lo que podría moverla fácilmente sin perder ningún dato.

  1. Eliminar la partición primaria

  2. Eliminar la partición extendida

  3. Cree una nueva partición primaria comenzando en el mismo sector que la original solo que con un tamaño mayor (deje algo para intercambiar)

  4. Cree una nueva partición extendida con una partición lógica para contener el espacio de intercambio

    me@ubuntu:~$ sudo fdisk /dev/sda
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048   192940031    96468992   83  Linux
    /dev/sda2       192942078   209713151     8385537    5  Extended
    /dev/sda5       192942080   209713151     8385536   82  Linux swap / Solaris
    
    Command (m for help): d
    Partition number (1-5): 1
    
    Command (m for help): d
    Partition number (1-5): 2
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1):
    Using default value 1
    First sector (2048-524287999, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e
    Partition number (1-4, default 2): 2
    First sector (507516926-524287999, default 507516926):
    Using default value 507516926
    Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (507518974-524287999, default 507518974):
    Using default value 507518974
    Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   83  Linux
    
    Command (m for help): t
    Partition number (1-5): 5
    
    Hex code (type L to list codes): 82
    Changed system type of partition 5 to 82 (Linux swap / Solaris)
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   82  Linux swap / Solaris
    
    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.
    
    me@ubuntu:~$ sudo reboot 
    

Después me di cuenta de que no configuré el indicador de arranque, pero aparentementerealmente no lo necesitas.

Tercero: ampliar el sistema de archivos.

Puede hacer esto resize2fsen línea en una partición montada.

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        91G   86G   12M 100% /
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  144K  3.9G   1% /run/shm
none            100M   16K  100M   1% /run/user

me@ubuntu:~$ sudo resize2fs /dev/sda1
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 6, new_desc_blocks = 16
The filesystem on /dev/sda1 is now 63439359 blocks long.

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       239G   86G  142G  38% /
udev            3.9G   12K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  152K  3.9G   1% /run/shm
none            100M   36K  100M   1% /run/user

Pequeño problema: después de reiniciar, el espacio de intercambio no estaba activo. Resultó que necesitas ejecutar mkswap, ajustarte /etc/fstabal nuevo UUID y activar el intercambio.

me@ubuntu:~$ sudo mkswap /dev/sda5 
Setting up swapspace version 1, size = 8384508 KiB
no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a

me@ubuntu:~$ sudo swapon --all --verbose
swapon on /dev/sda5
swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312

Edite /etc/fstabpara reemplazar el UUID de la antigua partición de intercambio por la nueva de mkswap.

Respuesta2

Respondo esto en caso de que tengas una situación similar a la mía. Tuve que cambiar el tamaño del sistema de archivos (Ext4) en un disco dinámico que ejecuta Ubuntu 18.0.4 LTS como invitado. Logré cambiar el tamaño del disco desde el Host y luego cambiar el tamaño del sistema de archivos.

No fue posible ejecutar los comandos habituales. Por ejemplo:

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long.  Nothing to do!

y fdiskfue bastante complicado, probablemente también tuve que ejecutar un LiveCD para poder trabajar en el disco desmontado.

Estos dos comandos resolvieron mi problema fácil y rápidamente:

$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.

Nota: 2en el primer comando indica el número de partición del dispositivo /dev/sda.

Respuesta3

Si va a aumentar el tamaño tanto de la partición como del sistema de archivos, primero ejecute fdiskpara aumentar el tamaño de la partición y luego ejecute resize2fspara aumentar el tamaño del sistema de archivos.

Si va a reducir el tamaño de ambos, ejecute resize2fsprimero y luego ejecute fdisk.

Respuesta4

La solución de noalo.es obviamente el mejor de todos; mucho más simple que los demás:

eco "- +" | disco sf -N<partnum>/dev/sdX

Breve explicación de cómo funciona: -Nsignifica que sfdiskfuncionará en una sola partición. Cuando se inicia así, sfdiskserá interactivo y esperará una posición inicial, un tamaño y, opcionalmente, un tipo de partición. " -" significa que la posición inicial no cambia, " +" significa que la posición final utilizará tanto espacio como sea posible. Después de eso tendrías que usar los comandos printy write. El protagonista echo "- +" |lo hace en una sola línea.

Su limitación es que debe haber espacio libre.directamente después. Si, después de cambiar el tamaño de la partición, hay una partición de intercambio (lo que significa que no hay datos reales dentro), se puede resolver fácilmente con sfdisk. Usando la sintaxis anterior, supongamos que la partición a cambiar está activada sda1y swap on sda2, tenemos un disco de 128 G y queremos 6 G de swap: El primer paso es mover la partición de swap hasta el final:

echo "122G +" | sfdisk -N2 /dev/sda

Ahora expanda la primera partición:

echo "- +"    | sfdisk -N1 /dev/sda

y cambiar su tamaño con resize2fs. Es posible que deba asegurarse de que se reconozca su nuevo intercambio. Ver swapoff, mkswapy swaponel fstabarchivo. Esto no está dentro del alcance de esta pregunta.

Acerca del comando para sda2: ¡¡¡NO mueva una partición con datos de esta manera!!!  Perderías todos tus datos. Este comando no mueve los datos; solo los límites de la partición. No hay ningún peligro con el comando usado para sda1 ( - +) porque la posición inicial de la partición no cambia; este es el significado de " -", cuando se utiliza para una única partición.

Gracias @noalo

información relacionada