Expandir automáticamente la última partición para usar todo el espacio no asignado, usando parted en modo por lotes

20

Para resumir, necesito realizar todo esto automáticamente en el arranque (sistema integrado).

Nuestros ingenieros mostrarán imágenes en dispositivos de producción. Estas imágenes contendrán una pequeña tabla de particiones. En el arranque, necesito expandir automáticamente la última partición (# 3) para usar todo el espacio disponible en el disco.

Esto es lo que obtengo cuando miro el espacio libre en mi disco.

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
        25.3MB  26.2MB  922kB   Free Space
 2      26.2MB  475MB   449MB   ext4         primary
 3      475MB   1549MB  1074MB  ext4         primary
        1549MB  32.0GB  30.5GB  Free Space

Necesito expandir la partición 3 por N (30.5GB) número de bytes

¿Cómo realizo este paso automáticamente, sin aviso? Esto debe funcionar con un tamaño dinámico de espacio disponible después de la tercera partición.

Paul Knopf
fuente
¡No esperes recibir un guión listo para usar, sin intentarlo! Entonces, ¿puede mostrarnos qué intentó hasta ahora? Otra cosa que la partición que está redimensionando no debe montarse durante la operación ...
Luciano Andress Martini
He intentado el resizepartcomando, y funciona, pero requiere un tamaño exacto. Necesito que sea dinámico.
Paul Knopf
resize2fspodría ser lo que estoy buscando. linux.die.net/man/8/resize2fs
Paul Knopf

Respuestas:

21

En las versiones actuales de parted, resizepartdebería funcionar para la partición ( partedcomprende 100%o cosas por el estilo -1s, este último también debe --detener las opciones de análisis en la línea de cm). Para determinar el valor exacto puede utilizar unit s, print free. resize2fsviene luego para el sistema de archivos.


Las versiones anteriores de partedtenían un resizecomando que redimensionaría tanto la partición como el sistema de archivos de una vez, incluso funcionó vfat.

En una modificación del lector electrónico Kobo, utilicé esto para cambiar el tamaño de la tercera partición de la memoria interna al máximo: (asume ciegamente que no hay una cuarta partición y una tabla y cosas de msdos)

start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

Entonces también puede obtener los valores /sys/block/.../si el núcleo lo admite. Pero partedeliminó el resizecomando, por lo que debe hacer dos pasos ahora, resizepartpara aumentar la partición y cualquier herramienta que su sistema de archivos proporcione para aumentar eso, resize2fspor ejemplo ext*.

Frostschutz
fuente
Esto es exactamente lo que estaba buscando. ¡Gracias por tu ayuda!
Paul Knopf
Pregunta secundaria, ¿qué pasa con los 8 bytes al final?
Paul Knopf
Evite cambiar el tamaño por un solo sector ... tendría que cambiar eso a -40 o algo así (encabezado de copia de seguridad GPT al final del disco).
frostschutz
¿ partedNo admite la extensión automática desde la línea de comando? Porque, no lo apoyan de forma interactiva. Si se ejecuta de forma interactiva, le preguntará si desea arreglar la tabla de particiones GPT para que coincida con el tamaño del disco (tipo fix), y luego puede ejecutar resizepart 3 -1. He estado tratando de descubrir cómo hacerlo desde la línea de comandos.
Harvey
No tan rápido: el comando de cambio de tamaño se ha eliminado en parted 3.0. Prueba sfdisk o gparted.
GregD
16

Al no poder escribir correctamente la partición (solicitó confirmación porque la partición estaba montada y al contrario de otras respuestas que encontré no entendía -1so 100%), acabo de encontrar la herramienta growpart que hace exactamente esto.

El uso es simple: growpart /dev/sda 3(y luego resize2fs /dev/sda3, u otro comando apropiado para el tipo de sistema de archivos utilizado).

En Debian y Ubuntu está empaquetado como cloud-guest-utils .

Ivo Smits
fuente
1
Esta es la forma más conveniente que podría encontrar para esto en este momento. Funcionó maravillosamente.
SebiF
Esta fue la solución para mí: a Parted no le gustaba ext4 como sistema de archivos, y no parecía haber forma de evitar que intentara cambiar el tamaño del sistema de archivos ...
Antti Haapala
no funciona para Ubuntu 18.04
DreamFlasher
@DreamFlasher No puedo decir por qué no funcionó para ti. Por lo que puedo ver, puede instalar el paquete cloud-guest-utils y, dado que esta es la única función proporcionada por growpart, debería funcionar a menos que haya un error, se use incorrectamente o algo fuera de su control salga mal. Tenga en cuenta que el último argumento (3 en el ejemplo) es la partición a redimensionar, contando desde 1, y que debe haber suficiente espacio disponible justo después de la partición para poder redimensionarla de esta manera.
Ivo Smits
7

La forma correcta de hacer esto es usar el hecho de que dividido tiene la noción de porcentajes. Entonces

parted /dev/sda resize 3 100%
Jonathan Buzzard
fuente
1
desactualizado, no funciona con Ubuntu 18.04 y posteriores
DreamFlasher
Ligeramente, el comando de cambio de tamaño se ha ido con la versión 3 separada, ahora debe usar el comando resizepart y luego cambiar el tamaño del sistema de archivos subyacente o PV por separado si eso es lo que está usando. Para ext4 el comando es resize2fs, o para XFS es xfs_growfs. Ambos se realizan normalmente cuando se monta el sistema de archivos y el argumento es el punto de montaje en ambos casos.
Jonathan Buzzard
0

En Ubuntu 18.04, puedo cambiar el tamaño para llenar el espacio no asignado en un script con lo siguiente:

sudo parted -s /dev/sdb "resizepart 2 -1" quit
sudo mount -av
sudo umount /dev/sdb2
sudo mount /dev/sdb2 /mnt
sudo resize2fs /dev/sdb2

Es posible que no sea necesario montar antes de cambiar el tamaño. Lo hice para suprimir una consulta de resize2fs para la entrada del usuario.

Nolan Zinn
fuente