Soluzione 1:
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) - 730Gswap - 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 è riducibile, 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 possa funzionare nel modo giusto.
Per prima cosa è uscito lo scambio:
swapoff -a
Quindi ridimensiona la partizione tramite parted (originariamente era 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 PV/VG/LV/filesystem per la radice temporanea:
pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot
Il passaggio successivo è stato 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 root in /media/etc/fstab doveva essere cambiata:
/dev/VolGroup00/tmproot / ext4 defaults 1 1
Ci siamo quasi, l'ultima e diciamo la parte più indesiderata senza accesso alla console è stata la modifica di /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
Giusto per andare sul sicuro:insmod lvm è stato aggiunto 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 di sicurezza 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
La prima volta per me andava bene, quindi ho ripetuto l'intera procedura creando un nuovo gruppo di volumi sopra la partizione root originale e alla fine ho ottenuto il root nel posto giusto usando LVM.
Spero che questo aiuti.
Soluzione 2:
Niente è impossibile in Linux, ma dovresti essere determinato e pazzo per tentare ciò che descrivi. Tieni presente che se hai solo accesso SSH, c'è una buona possibilità che perderai l'accesso al server se commetti un errore. Se si dispone di una console "seriale" remota e di un interruttore di alimentazione virtuale, ciò potrebbe aiutare un po'. Detto questo, se hai un'installazione nuova di zecca senza dati da perdere, perché non provarla? Ho trovato un tutorial per convertire in remoto un sistema Linux in RAID1; i passaggi che proveresti per LVM sarebbero analoghi.
Innanzitutto, consideriamo la necessità di uno spazio di archiviazione temporaneo. Supponendo che tu non abbia un secondo disco sul server, puoi ridurre le partizioni esistenti usando parted
. Naturalmente, ciò richiede che le partizioni di avvio e root utilizzino meno della metà del disco e devono utilizzare un filesystem riducibile. (XFS e JFS, ad esempio, non sono riducibili.)
Dopo aver ridotto le partizioni esistenti, puoi creare un volume fisico LVM nello spazio liberato, un gruppo di volumi e volumi logici al suo interno. Replica i tuoi filesystem. (Quando replichi il tuo filesystem di root, dovresti uccidere tutto tranne sshd
e idealmente essere in modalità utente singolo. Probabilmente dovrai usare rsync
anziché dd
poiché stai replicando un filesystem montato.)
Quindi, dovresti preparare un initrd con il supporto LVM e dire a GRUB di avviarsi nel nuovo sistema, come descritto nel tutorial di Warren Togami. Una volta fatto ciò, è semplice eliminare i vecchi filesystem usando parted
e aumentare i volumi LVM.
Buona fortuna! Facci sapere se ha funzionato!
Soluzione 3:
Ho precedentemente migrato la mia partizione di root "/" che puntava a una partizione del disco "/dev/sda2" con 10G su centos 6 a una partizione LV, i passaggi eseguiti sono stati i seguenti:
- Aggiungi un disco rigido su VMware di 10G.
- riconoscere il disco senza riavviare il sistema.
ls /sys/class/scsi_host/| while read x ; do echo "- - -" > /sys/class/scsi_host/${x}/scan ; done
- Crea una partizione sul nuovo disco, supponiamo che il mio nuovo disco sia /dev/sdb
- Lavorare con :
fdisk /dev/sdb
- Essere nell'interfaccia "fdisk" consente di creare una partizione con la chiave "n" assegnando +9G di capacità, quindi cambiare il tipo di partizione con la chiave "t" assegnando "8e" (partizione lvm) e infine la chiave "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 verificare che il dispositivo sia 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, creiamo 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 partizione corrente, puoi scoprirlo con comandi come :
df -lhT cat /etc/fstab blkid
- quando il nuovo LV è stato montato possiamo procedere a copiare tutti i file del sistema.
find / -xdev | cpio -pmvd /mnt/new_root/
- una volta che i file sono stati copiati possiamo procedere a modificare il "chroot" ma prima montiamo alcune partizioni :
cd /mnt/new_root/ mount -t proc /proc proc mount -t sysfs /sys sys/ mount --rbind /dev dev/
- adesso cambiamo il chroot
chroot /mnt/new_root/
- una volta che siamo nella nuova radice modificare il file :
vi /etc/fstab
- lasciando il file quasi simile a :
#UUID=98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4 defaults 1 1 /dev/mapper/vg_root-lv_root / ext4 defaults 1 1
- Una volta che il file è stato opportunamente modificato, creiamo un file nella root con il nome "./autorelabel" nel caso in cui stiate lavorando con SELINUX "enforcing" o "permissive".
touch ./autorelabel
- Usciamo ora dall'ambiente chroot di /mnt/new-root
exit
- Se le modifiche sono state apportate in base al tuo scenario, eseguiamo una delle ultime modifiche, ovvero modificare il file grub "/boot/grub/grub.conf", aggiungendo un nuovo menu (non modificare l'attuale opzione di avvio finché quello nuovo aggiunto non funziona correttamente).
# before title 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=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-573.el6.x86_64.img
# now title 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=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-573.el6.x86_64.img title 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 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet initrd /initramfs-2.6.32-573.el6.x86_64.img
# the line added was title 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 KEYBOARDTYPE=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 # or reboot
- Una volta 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 scollegato dalla tua VM o server fisico.
dd if=/dev/zero of=/dev/sda bs=1
- Ultima ripida imposta come voce predefinita la nuova voce aggiunta nel menu di grub "/boot/grub/grub.conf":
#default=0 default=1
Spero che le informazioni fornite in precedenza possano essere utili a qualcuno.
grazie in anticipo,
Manuel Lazo