Newsgroup: it.comp.os.linux.sys
Titolo: Resize partizioni online

C'e' un modo per ridimensionare un volume in uso senza riavviare la 
macchina? Uso LVM su tutte le virtual machine, ma l'unico modo di 
espandere un volume senza riavviare che ho trovato è:
Aggiungere un disco alla VM
Creare una partizione come LVM
Aggiungere il PV al mio VG
Espandere il filesystem
Tutto molto bello ma ormai ho delle VM con gazzilione di dischi
Sarebbe molto più bello se:
Espando il disco dall'hypervisor
Creo una nuova partizione LVM sullo spazio libero
Aggiungo il PV al VG
Espando il filesystem

 devi espandere / ...
No, però immagina questo esempio:
sda1 = /
sda2 = swap
sdb1 = LVM
LV1 = /oracle
Mi serve aggiungere 50 GB su /oracle
Espando il disco dall'hypervisor
Creo /dev/sdb2 LVM
A questo punto fdisk mi dice che il kernel usa ancora la vecchia tabella 
delle partizioni perchè /dev/sdb è in uso
Per fargli leggere la nuova tabella dovrei:
fermare Oracle
fermare LVM
A questo punto se riavvio tutto il server faccio prima :|
Se invece aggiungo /dev/sdc da 50GB posso creare /dev/sdc1 come LVM e 
inizializzarla, aggiungere sdc1 a LV1 ed espandere il filesystem su 
/oracle online

 /oracle online
Sinceramente, tantovale che esegui pvcreate direttamente sul block
device, chè non vedo la ragione di crearci dentro partizioni se poi lo
si deve usare con LVM, no?
A quel punto estendi il block device e dai un pvresize sullo stesso.
Fine: il VG già vedrà lo spazio in più senza necessità di sminchiettare
ulteriormente.
-- 
Paranoia is a disease unto itself. And may I add: the person standing
next to you may not be who they appear to be, so take precaution.
-----------------------------------------------------------------------------
http://bofhskull.wordpress.com/

 si deve usare con LVM, no?
Ehm si, ma non era questa la questione: vorrei evitare di dover 
aggiungere dischi su dischi quando voglio espandere un FS.
L'ideale sarebbe espandere un disco esistente, creare una nuova 
partizione LVM e aggiungere quella al mio VG.
Ma non si può fare perchè il kernel non rilegge la tabella della 
partizioni di un disco in uso.
Di conseguenza ormai ho delle VM con 5-6 dischi...

 partizioni di un disco in uso.
Posto che questo dipende solamente dal driver del controller e non è una
regola generale, il senso era: se non hai tabella delle partizioni non
la devi rileggere, no?


 la devi rileggere, no?
Chiaro adesso, grazie

 riavviare.
ma scusa, secondo te fdisk cosa fa?
se hai un disco con, mettiamo, / 100G e swap 5G e 500 free.... dopo un po'
decidi di creare una /data di 100G nei 500 liberi..... usi fdisk sul
device, scrivi la nuova tavola, fdisk manda la giusta ioctl per far
rileggere la tavola al kernel e sei a posto.
tutto questo per dire che la iotl c'e', devi solo trovare un modo per
scatenarla e scoprirai che le partizioni vengono rilette. 
unica eccezione se smanetti la /, mi pare ovvio.
per trovare il come usa google che io non lo ricordo.
pero' nel tuo caso mi sembra che usare i device direttamente con LVM sia la
strada giusta. tra l'altro non ho mai capito perche' mettere LVM in una
partizione se esso stesso funziona come le partizioni ma in maniera piu'
flessibile.
cioe' hai ad es. /dev/sda da 500G su cui fai pvcreate direttamente, senza
partition table.
domani (visto che /dev/sda magari e' una LUN di una SAN) ti estendi il
volume a 1T, estendi il PV, estendi lo spazio allocato logico con i
restanti tool di LVM e poi fai ext2resize per allineare il tutto.
almeno cosi' io ho sempre fatto su AIX, credo che con linux sia uguale.
Andrea

 Espando il filesystem
Con vmware esx, estendi il disco e procedi cosi':
[root@vmb20c46.a ~]# pvs
   PV         VG    Fmt  Attr PSize  PFree
   /dev/sda2  sysvg lvm2 a-   19.88G      0
   /dev/sdb   sysvg lvm2 a-   99.97G 864.00M
[root@vm000046.a ~]# echo "1" > 
/sys/class/scsi_device/0\:0\:1\:0/device/rescan
[root@vmb20c46.a ~]# pvresize /dev/sdb -v
     Using physical volume(s) on command line
     Archiving volume group "sysvg" metadata (seqno 10).
     Resizing physical volume /dev/sdb from 3199 to 6399 extents.
     Resizing volume "/dev/sdb" to 419430016 sectors.
     Updating physical volume "/dev/sdb"
     Creating volume group backup "/etc/lvm/backup/sysvg" (seqno 11).
   Physical volume "/dev/sdb" changed
   1 physical volume(s) resized / 0 physical volume(s) not resized
[root@vmb20c46.a ~]# pvs
   PV         VG    Fmt  Attr PSize   PFree
   /dev/sda2  sysvg lvm2 a-    19.88G      0
   /dev/sdb   sysvg lvm2 a-   199.97G 100.84G
E poi usi lvextend e resize2fs o ext2online (RHEL4). In sysvg c'e' / 
/var etc...
G.


Indubbiamente, infatti da adesso in poi, installer stronzi permettendo, 
farò così

 macchina?
Se il caso e` questo:
Host:
host~# lvs
/dev/vg_guests/lv-guest-1 50g
guest~# mount
/ /dev/sda1
/dev/mapper/vg01/oracle_data /opt/oracle/oradata
host~# lvresize -L +50g vg01/lv-guest-1
Allora no, che io sappia non c'e` alcun modo di far rileggere le dimensioni 
del disco se non riavviando il guest. Se poi ho capito male o le cose sono 
cambiate, allora come non detto, anzi, mi farebbe piacere capire come si 
faccia :)
Enrico

 kernel non rilegge la nuova tabella.
Accade anche a me; non ci faccio mai caso perchè in genere ho 
possibilità di riavviare.
Dopo questo thread mi sa che la prossima volta mi metterò a indagare.
Alessandro

 faccia :)
Per i posteri: usando partprobe <device>, almeno su guest ESX, si riesce:
In questo caso ho creato la partizione /dev/sda3 e ci ho esteso la / online:
# Rescan per rilevare la nuova dimensione del disco
echo "1" > /sys/class/scsi_device/0\:0\:1\:0/device/rescan
# Aggiungo con fdisk la nuova partizione LVM sda3
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1958    15623212+  8e  Linux LVM
/dev/sda3            1959        3263    10482412+  8e  Linux LVM
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.
Syncing disks.
# Aggiorno il kernel con partprobe:
partprobe /dev/sda
[root@srvrhel-dboracle ~]# ls -l /dev/sda?
brw-r----- 1 root disk 8, 1 Mar  9 09:12 /dev/sda1
brw-r----- 1 root disk 8, 2 Mar  9 09:11 /dev/sda2
brw-r----- 1 root disk 8, 3 Mar 29 09:13 /dev/sda3
# Espando il volume e il filesystem
[root@srvrhel-dboracle ~]# pvcreate /dev/sda3
   Physical volume "/dev/sda3" successfully created
[root@srvrhel-dboracle ~]# vgextend VolGroupSys /dev/sda3
   Volume group "VolGroupSys" successfully extended
[root@srvrhel-dboracle ~]# lvextend /dev/VolGroupSys/LogVolRoot /dev/sda3
   Extending logical volume LogVolRoot to 19.03 GB
   Logical volume LogVolRoot successfully resized
[root@srvrhel-dboracle ~]# resize2fs /dev/VolGroupSys/LogVolRoot
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroupSys/LogVolRoot is mounted on /; on-line 
resizing required
Performing an on-line resize of /dev/VolGroupSys/LogVolRoot to 4988928 
(4k) blocks.
The filesystem on /dev/VolGroupSys/LogVolRoot is now 4988928 blocks long.