¿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 fdisk
para 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
fdisk
para 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.
Eliminar la partición primaria
Eliminar la partición extendida
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)
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
resize2fs
en 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/fstab
al 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/fstab
para reemplazar el UUID de la antigua partición de intercambio por la nueva demkswap
.
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 fdisk
fue 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: 2
en 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 fdisk
para aumentar el tamaño de la partición y luego ejecute resize2fs
para aumentar el tamaño del sistema de archivos.
Si va a reducir el tamaño de ambos, ejecute resize2fs
primero 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: -N
significa que sfdisk
funcionará en una sola partición. Cuando se inicia así, sfdisk
será 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 print
y 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 sda1
y 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
, mkswap
y swapon
el fstab
archivo. 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