¿Cómo cambiar un sistema de partición física a LVM?

10

Tengo un servidor con Debian que tiene 3 particiones físicas que cubren todo el disco: boot, root y swap. Ahora quiero reemplazar esas particiones con particiones LVM. Sé cómo instalar Debian con LVM al principio, pero en este caso no puedo instalar el sistema al principio porque el proveedor me consigue un servidor con acceso remoto y el sistema está instalado de esta manera.

¿Cómo puedo cambiar esas particiones usando solo una conexión ssh y posiblemente otro servidor remoto donde colocar algunos datos temporales?

Daniel Hernández
fuente
2
Nota para los votantes cercanos: Esto no es un engaño de la pregunta referenciada porque hay un giro aquí: completamente remoto.
sysadmin1138

Respuestas:

-1

No puede reemplazarlos en un servidor en ejecución con solo particiones /, / boot y <swap>. La única forma de hacerlo es desmontar la partición /, reducirla y crear una nueva partición LVM al final, pero como solo tiene acceso ssh remoto, no puede reducir una partición montada en vivo sin corrupción de datos.

mricon
fuente
3
Es posible cambiar el tamaño de un sistema de archivos ext3 mientras está montado: linux.die.net/man/8/ext2online .
200_success
66
Nunca digas nunca ...
the-wabbit
21

Una actualización rápida de mi lado. Contexto: hoy obtuve en línea un servidor dedicado instalado con esquema de partición física en lugar de LVM. Hubo 3 particiones:

/ boot (ext4) - 512M / (ext4) - 730G swap - 8G

Debido a la naturaleza de no tener acceso a la consola, el objetivo final era convertir la partición raíz existente a LVM.

Teniendo en cuenta que ext4 no es encogible, la única forma era reutilizar la partición de intercambio como root temporal. También decidí configurar la raíz temporal con LVM para asegurarme de que el proceso pueda funcionar de la manera correcta.

Primero resultó el intercambio:

swapoff -a

Luego redimensionó la partición mediante parted (originalmente se inició de 742 a 750):

parted
resize 3 742 744

y creó una partición para el LVM:

mkpart primary ext2 744 750
set 4 lvm on

Creación de PV / VG / LV / sistema de archivos para la raíz temporal:

pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot

El siguiente paso fue copiar la raíz en el lugar temporal:

mount /dev/VolGroup00/tmproot /media
rsync -ravzxq / /media/

Una vez que todo estuvo allí, la entrada para el sistema de archivos raíz en / media / etc / fstab también tuvo que cambiarse:

/dev/VolGroup00/tmproot /                       ext4    defaults        1 1

Casi allí, el último y digamos que la parte más no deseada sin acceso a la consola fue modificar el /boot/grub/grub.conf:

entrada original:

title CentOS (2.6.32-279.22.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=UUID=e769af21-d9e1-455f-a6a7-7a9c84d8cbea rd_NO_LUKS LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

entrada modificada:

title CentOS (2.6.32-279.22.1.el6.x86_64) LVM
insmod lvm
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu SYSFONT=latarcyrheb-sun16 crashkernel=auto dolvm root=/dev/mapper/VolGroup00-tmproot panic=10 
#rd_NO_DM rd_NO_MD rd_NO_LUKS
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

Solo para estar seguros: se agregó insmod lvm junto con el parámetro dolvm para el kernel y la ruta raíz también se cambió a root = / dev / mapper / VolGroup00-tmproot. Importante usar el / dev / mapper / path en este momento. Como depósito de seguridad también agregué el parámetro panic = 10 y no cambié la entrada de inicio predeterminada en el encabezado. En lugar de eso, intenté decirle al grub que arranque con la nueva configuración solo una vez y, en caso de falla, la entrada original podría funcionar:

grub
savedefault --default=1 --once

Y finalmente:

reboot

Estaba bien para mí la primera vez, así que repetí todo el procedimiento creando un nuevo grupo de volúmenes encima de la partición raíz original y finalmente obtuve la raíz en el lugar correcto usando LVM.

Espero que esto ayude.

uha
fuente
1
Esto funcionó muy bien para mí al convertir mi configuración RAID 1 de 2 discos a LVM en RAID 1 completamente remoto (tenía algunos discos de repuesto preinstalados). En grub2, sin embargo, la nueva forma de reiniciar a una entrada de menú solo una vez es editar primero su archivo / etc / default / grub para asegurarse de que GRUB_DEFAULT = guardado. Entonces update-grub. Luego se ejecuta grub-reboot #para configurar el elemento del menú para usar solo en el próximo reinicio. Entonces puedes reiniciar.
casey
Ubuntu (y debian) tiene su propio sistema para modificar la configuración de grub. La actualización de la partición raíz se puede hacer más limpia de la manera especificada aquí: unix.stackexchange.com/a/5318/192211
EFraim
3

Nada es imposible en Linux, pero tendrías que estar decidido y loco para intentar lo que describes. Tenga en cuenta que si solo tiene acceso SSH, existe una buena posibilidad de que pierda el acceso al servidor si comete un error. Si tiene una consola remota "en serie" y un interruptor de alimentación virtual, eso podría ayudar un poco. Dicho esto, si tiene una instalación nueva sin datos que perder, ¿por qué no probarla? Encontré un tutorial para convertir remotamente un sistema Linux a RAID1 ; los pasos que intentaría para LVM serían análogos.

Primero, consideremos la necesidad de espacio de almacenamiento temporal. Suponiendo que no tiene un segundo disco en el servidor, puede reducir el tamaño de las particiones existentesparted . Por supuesto, esto requiere que sus particiones de arranque y raíz usen menos de la mitad del disco, y deben usar un sistema de archivos reducible. (XFS y JFS, por ejemplo, no son contraíbles).

Después de reducir sus particiones existentes, puede crear un volumen físico LVM en el espacio liberado, un grupo de volúmenes y volúmenes lógicos dentro de él. Replica tus sistemas de archivos. (Al replicar su sistema de archivos raíz, debe eliminar todo excepto sshd, e idealmente, estar en modo de usuario único. Probablemente tendrá que usarlo en rsynclugar de hacerlo, ddya que está replicando un sistema de archivos montado).

Luego, prepararía un initrd con soporte LVM y le diría a GRUB que inicie en el nuevo sistema, como se describe en el tutorial de Warren Togami. Una vez que haga eso, es simple eliminar los viejos sistemas de archivos usando partedy aumentando los volúmenes LVM.

¡Buena suerte! Háganos saber si funcionó!

200_success
fuente
3

Anteriormente migré mi partición raíz "/" que apuntaba a una partición de disco "/ dev / sda2" con 10G en centos 6 a una partición LV, los pasos realizados fueron los siguientes:

  • Agregue un disco duro en VMware de 10G.
  • reconocer el disco sin reiniciar el sistema.
ls / sys / class / scsi_host / | mientras lee x; do echo "- - -"> / sys / class / scsi_host / $ {x} / scan; hecho
  • Crear una partición en el nuevo disco, supongamos que mi nuevo disco es / dev / sdb
  • Trabajando con :
fdisk / dev / sdb
  • Estar en la interfaz "fdisk" permite crear una partición con la tecla "n" asignando + 9G de capacidad, luego cambiar el tipo de partición con la tecla "t" asignando "8e" (partición lvm) y finalmente la tecla "w" para aplicar los cambios , si quieres ver cómo se ve la tabla de particiones, puedes presionar la tecla "p".
  • Una vez creada la partición, podemos validar que el dispositivo se haya creado con el siguiente comando (el comando funciona cuando no se utiliza el disco):
partprobe / dev / sdb
  • una vez que el dispositivo sale físicamente, creemos los objetos LVM en el siguiente orden:
pvcreate / dev / sdb1
vgcreate vg_root / dev / sdb1
lvcreate -v -n lv_root vg_root -L 9G
  • Una vez que se hayan creado las unidades LV, asignemos un FS y móntelo en el sistema actual.
mkfs -t ext4 / dev / vg_root / lv_root
mkdir / mnt / raíz_nueva /
mount -t ext4 / dev / vg_root / lv_root / mnt / new_root /
  • Si no sabe cuál es el FS de su partición actual, puede averiguarlo con comandos como:
df -lhT
gato / etc / fstab
blkid
  • Cuando se monta el nuevo LV, podemos proceder a copiar todos los archivos del sistema.
encontrar / -xdev | cpio -pmvd / mnt / raíz_nuevo /
  • Una vez que los archivos se han copiado, podemos proceder a cambiar el "chroot", pero antes de montar algunas particiones:
cd / mnt / raíz_nuevo /
mount -t proc / proc proc
mount -t sysfs / sys sys /
mount --rbind / dev dev /
  • ahora cambiemos el chroot
chroot / mnt / new_root /
  • una vez que estemos en la nueva raíz, modifique el archivo:
vi / etc / fstab
  • dejando el archivo casi similar a:
# UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4 por defecto 1 1
/ dev / mapper / vg_root-lv_root / ext4 por defecto 1 1
  • Una vez que el archivo se ha modificado correctamente, creemos un archivo en la raíz con el nombre "./autorelabel" en caso de que trabaje con SELINUX "imposición" o "permisivo".
toque ./autorelabel
  • Ahora salgamos del entorno chroot de / mnt / new-root
salida
  • Si los cambios se realizan en función de su escenario, realicemos uno de los últimos cambios, es decir, modifique el archivo grub "/boot/grub/grub.conf", agregando un nuevo menú (no modifique su opción de arranque actual hasta el nuevo uno agregado funciona correctamente).
# antes de
título CentOS 6 (2.6.32-573.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = es_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernelTY = KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTA = auto rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# ahora
título CentOS 6 (2.6.32-573.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = es_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernelTY = KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTY = auto KEYBOARDTA = auto rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

título CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        root (hd0,0)
        insmod lvm
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = es_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernelPE = auto KEY crashkernelPE = auto KEY = PC KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# la línea agregada era 
título CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        root (hd0,0)
        insmod lvm
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = es_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernelPE = auto KEY crashkernelPE = auto KEY = PC KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img
  • Una vez que se realizan los cambios en el archivo grub, terminemos de regenerar un nuevo archivo iso initrd:
cd / boot
cp -av initramfs - $ (uname -r) .img initramfs - $ (uname -r) .img.old
dracut -f
  • finalmente un reinicio:
init 6
# o
reiniciar
  • Una vez que aparezca el menú de grub, elija el nuevo agregado "CentOS 6 (2.6.32-573.el6.x86_64-lvroot)" y valide que funciona correctamente.
  • Si el sistema funciona correctamente y no utiliza "/ dev / sda", puede eliminarlo y desconectarlo de su VM o servidor físico.
dd if = / dev / zero of = / dev / sda bs = 1
  • Último conjunto empinado como entrada predeterminada, el nuevo elemento agregado en el menú de grub "/boot/grub/grub.conf":
# default = 0
predeterminado = 1

Espero que la información proporcionada anteriormente sea útil para alguien.

gracias por adelantado,

Manuel Lazo

Manuel Lazo
fuente
1

Podría configurar un sistema de rescate intermedio en la partición de intercambio (previamente desactivada) (trabajo de destrucción de nervios que hacer si no tiene un RAC en la máquina) y trabajar desde allí. Además, existen herramientas de cambio de tamaño en línea para ciertos sistemas de archivos, y luego reducir la partición y reiniciar es un caso de KWYD pero posible.

rackandboneman
fuente
Para describir dos ideas aún más locas que incluso funcionarían literalmente con UNA sola partición en el disco: a) cree un gran archivo vacío en la partición raíz asegurándose de que esté asignado correctamente, trabaje en él a través del controlador de bucle invertido ... luego elimine la tabla de particiones para que la partición comience en el primer bloque físico de ese archivo. b) chroot (o incluso pivot_root si aún es posible) en un ramdisk y configure una base y una copia de seguridad allí ... destruya el sistema de archivos raíz real debajo de usted.
rackandboneman