Come cambiare un sistema di partizione fisica in LVM?


10

Ho un server con Debian che ha 3 partizioni fisiche che coprono tutto il disco: boot, root y swap. Ora voglio sostituire quelle partizioni con le partizioni LVM. So come installare Debian con LVM all'inizio, ma in questo caso non riesco a installare il sistema all'inizio perché il provider mi fornisce un server con accesso remoto e il sistema installato in questo modo.

Come posso cambiare quelle partizioni usando solo una connessione ssh e possibilmente un altro server remoto dove mettere alcuni dati temporali?


2
Nota per gli elettori ravvicinati: non si tratta di una copia della domanda di riferimento perché qui c'è una svolta: completamente remota.
sysadmin1138

Risposte:


-1

Non è possibile sostituirli su un server in esecuzione con solo partizioni /, / boot e <swap>. L'unico modo per farlo è smontare la partizione /, rimpicciolirla e creare una nuova partizione LVM alla fine, ma poiché si ha solo accesso remoto a ssh, non è possibile ridurre una partizione live montata senza corruzione dei dati.


3
È possibile ridimensionare un filesystem ext3 mentre è montato: linux.die.net/man/8/ext2online .
200_successo

6
Mai dire mai ...
the-wabbit il

21

Un rapido aggiornamento da parte mia. Contesto: oggi ho messo online un server dedicato installato con schema di partizione fisica anziché LVM. C'erano 3 partizioni:

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

A causa della natura di non avere accesso alla console, l'obiettivo finale era convertire la partizione root esistente in LVM.

Considerando che ext4 non è restringibile, l'unico modo era riutilizzare la partizione di swap come root temporaneo. Ho anche deciso di impostare il root temporaneo con LVM per essere sicuro che il processo potesse funzionare nel modo giusto.

Per prima cosa ho scoperto lo swap:

swapoff -a

Quindi ridimensionato la partizione tramite parted (originariamente era stata avviata da 742 a 750):

parted
resize 3 742 744

e creato una partizione per LVM:

mkpart primary ext2 744 750
set 4 lvm on

Creazione di filesystem PV / VG / LV / per la radice temporanea:

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

Il passo successivo è stato quello di copiare la radice nella posizione temporanea:

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

Una volta che tutto era lì, anche la voce per il filesystem di root in / media / etc / fstab doveva essere cambiata:

/dev/VolGroup00/tmproot /                       ext4    defaults        1 1

Quasi lì, l'ultimo e diciamo che la parte più indesiderata senza accesso alla console era modificare /boot/grub/grub.conf:

voce originale:

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

voce modificata:

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 per essere al sicuro: è stato aggiunto insmod lvm insieme al parametro dolvm per il kernel e anche il percorso root è stato cambiato in root = / dev / mapper / VolGroup00-tmproot. Importante utilizzare il percorso / dev / mapper / in questo momento. Come deposito safty ho anche aggiunto il parametro panic = 10 e non ho modificato la voce di avvio predefinita nell'intestazione. Invece ho provato a dire a grub di avviarsi con la nuova impostazione solo una volta e in caso di errore la voce originale potrebbe funzionare:

grub
savedefault --default=1 --once

E infine:

reboot

Per me è stato OK per la prima volta, quindi ho ripetuto l'intera procedura con la creazione di un nuovo gruppo di volumi in cima alla partizione di root originale e alla fine ho ottenuto il root nel posto giusto usando LVM.

Spero che sia di aiuto.


1
Questo ha funzionato molto bene per me convertendo la mia configurazione 2 raid 1 disco in LVM su raid 1 completamente remota (con alcuni dischi di riserva preinstallati). In grub2, tuttavia, il nuovo modo di riavviare una voce di menu una sola volta è modificare prima il file / etc / default / grub per assicurarsi che GRUB_DEFAULT = salvato. Poi update-grub. Quindi si esegue grub-reboot #per impostare la voce di menu da utilizzare solo per il riavvio successivo. Quindi è possibile riavviare.
Casey,

Ubuntu (e debian) ha il suo sistema per modificare la configurazione di grub. L'aggiornamento della partizione di root può essere effettuato in modo più pulito in un modo specificato qui: unix.stackexchange.com/a/5318/192211
EFraim

3

Niente è impossibile in Linux, ma dovresti essere determinato e pazzo per provare quello che descrivi. Tenere presente che se si dispone solo dell'accesso SSH, è probabile che si perda l'accesso al server in caso di errore. Se si dispone di una console "seriale" remota e di un interruttore di alimentazione virtuale, ciò potrebbe essere di aiuto. Detto questo, se hai una nuova installazione senza dati da perdere, perché non provarla? Ho trovato un tutorial per convertire in remoto un sistema Linux in RAID1 ; i passaggi che tenteresti per LVM sarebbero analoghi.

Innanzitutto, consideriamo la necessità di spazio di archiviazione temporaneo. Supponendo che non si disponga di un secondo disco sul server, è possibile ridurre le partizioni esistenti utilizzandoparted . Ovviamente, ciò richiede che le partizioni di avvio e root utilizzino meno della metà del disco e che debbano utilizzare un file system restringibile. (XFS e JFS, ad esempio, non sono restringibili.)

Dopo aver ridotto le partizioni esistenti, è possibile creare un volume fisico LVM nello spazio liberato, un gruppo di volumi e volumi logici al suo interno. Replica i tuoi filesystem. (Durante la replica del filesystem di root, dovresti uccidere tutto tranne sshd, ed idealmente essere in modalità single-user. Probabilmente dovrai usarlo rsyncpiuttosto che ddda quando stai replicando un filesystem montato.)

Quindi, prepareresti un initrd con supporto LVM e diresti a GRUB di avviarsi nel nuovo sistema, come descritto nel tutorial di Warren Togami. Una volta fatto ciò, è semplice eliminare i vecchi filesystem usando partede aumentando i volumi LVM.

In bocca al lupo! Facci sapere se ha funzionato!


3

Ho precedentemente migrato la mia partizione di root "/" che puntava a una partizione del disco "/ dev / sda2" con 10G su centos 6 su una partizione LV, i passaggi eseguiti erano i seguenti:

  • Aggiungi un disco rigido su VMware da 10G.
  • riconoscere il disco senza riavviare il sistema.
ls / sys / class / scsi_host / | mentre leggi x; do echo "- - -"> / sys / class / scsi_host / $ {x} / scan; fatto
  • Crea una partizione sul nuovo disco, supponiamo che il mio nuovo disco sia / dev / sdb
  • Lavorando con :
fdisk / dev / sdb
  • Essere nell'interfaccia "fdisk" consente di creare una partizione con il tasto "n" assegnando + 9G di capacità, quindi cambiare la partizione di tipo con il tasto "t" assegnando "8e" (partizione lvm) e infine il tasto "w" per applicare le modifiche , se vuoi vedere come appare la tabella delle partizioni puoi premere il tasto "p".
  • una volta creata la partizione, possiamo confermare che il dispositivo è stato creato con il seguente comando (il comando funziona quando il disco non è stato utilizzato):
partprobe / dev / sdb
  • una volta che il dispositivo esce fisicamente, consente di creare gli oggetti LVM nel seguente ordine:
pvcreate / dev / sdb1
vgcreate vg_root / dev / sdb1
lvcreate -v -n lv_root vg_root -L 9G
  • una volta create le unità LV, assegniamo un FS e montiamolo sul sistema corrente.
mkfs -t ext4 / dev / vg_root / lv_root
mkdir / mnt / new_root /
mount -t ext4 / dev / vg_root / lv_root / mnt / new_root /
  • se non sai qual è il FS della tua attuale partizione, puoi scoprirlo con comandi come:
df -lhT
cat / etc / fstab
blkid
  • quando è stato montato il nuovo LV possiamo procedere a copiare tutti i file del sistema.
trova / -xdev | cpio -pmvd / mnt / new_root /
  • una volta che i file sono stati copiati possiamo procedere con la modifica del "chroot" ma prima di montare alcune partizioni:
cd / mnt / new_root /
mount -t proc / proc proc
mount -t sysfs / sys sys /
mount --rbind / dev dev /
  • ora cambiamo il chroot
chroot / mnt / new_root /
  • una volta che siamo nella nuova radice, modifica il file:
vi / etc / fstab
  • lasciando il file quasi simile a:
# UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4 default 1 1
/ dev / mapper / vg_root-lv_root / ext4 default 1 1
  • Una volta che il file è stato opportunamente modificato, creiamo un file nella radice con il nome "./autorelabel" nel caso in cui lavori con SELINUX "enforcing" o "permissive".
toccare ./autorelabel
  • Ora lasciamo l'ambiente chroot di / mnt / new-root
Uscita
  • Se le modifiche sono state fatte in base allo scenario, consentiamo di eseguire una delle ultime modifiche, ovvero modificare il file grub "/boot/grub/grub.conf", aggiungendo un nuovo menu (non modificare la tua opzione di avvio corrente fino al nuovo uno aggiunto funziona correttamente).
# prima
titolo 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 = en_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = autoKEY rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# adesso
titolo 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 = en_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = autoKEY rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

titolo 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 = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = auto KEY = PC KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# la linea aggiunta era 
titolo 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 = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = auto KEY = PC KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img
  • Una volta apportate le modifiche al file grub, finiamo di rigenerare un nuovo file iso initrd:
cd / boot
cp -av initramfs - $ (uname -r) .img initramfs - $ (uname -r) .img.old
dracut -f
  • finalmente un riavvio:
init 6
# o
riavvio
  • Quando viene visualizzato il menu di grub, scegli quello nuovo aggiunto "CentOS 6 (2.6.32-573.el6.x86_64-lvroot)" e verifica che funzioni correttamente.
  • Se il sistema funziona correttamente e non utilizza "/ dev / sda", può essere rimosso e staccato dalla tua VM o dal tuo server fisico.
dd if = / dev / zero of = / dev / sda bs = 1
  • Ultima ripida impostazione come voce predefinita il nuovo elemento aggiunto nel menu di grub "/boot/grub/grub.conf":
# Default = 0
default = 1

Spero che le informazioni precedentemente fornite siano utili per qualcuno.

Grazie in anticipo,

Manuel Lazo


1

Poteva installare un sistema di salvataggio intermedio nella partizione di swap (precedentemente disabilitata) (lavoro di distruzione dei nervi da fare se non si dispone di un RAC nella macchina) e lavorare da lì. Inoltre, esistono alcuni strumenti di ridimensionamento online per alcuni filesystem, quindi ridurre la partizione in seguito e riavviare è un caso di KWYD ma è possibile.


Per descrivere due idee ancora più folli che funzionerebbero letteralmente con UNA SOLA partizione sul disco: a) creare un grosso file vuoto sulla partizione root assicurandosi che sia allocato in modo contiguo, lavorarci sopra tramite il driver di loopback ... quindi munge la tabella delle partizioni per far iniziare la partizione dal primo blocco fisico di quel file. b) chroot (o anche pivot_root se ancora possibile) in un ramdisk e imposta una base e fai il backup lì ... annulla il vero filesystem di root sotto di te.
Rackandboneman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.