Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

Title: Introduzione a LVM
Author: Sandro Tosi
Last modified: 2007-09-02

Cos'e` e vantaggi di LVM
~~~~~~~~~~~~~~~~~~~~~~~~

Su un pc  e` necessario partizionare i propri  dischi, per creare zone
di storage  per i filesystem.  Questa operazione e` molto  critica, in
quanto  richiede una  stima precisa  dello spazio  necessario  ad ogni
partizione.

La situazione di mancanza di spazio su filesystem e` comunemente nota,
e le  classiche soluzioni richiedono ripartizionamenti,  copia di dati
etc,  rimandando soltanto  in  la` nel  tempo  il riverificarsi  della
medesima situazione.

LVM viene in contro a  queste problematiche, consentendo di gestire lo
spazio su dischi in  modo dinamico e flessibile, riducendo/ingrandendo
le partizioni quando la situazione lo richiede.

I principali vantaggi sono:

o  ingrandimento/riduzione della dimensione di un filesystem
   l'astrazione dal disco "fisico" ha il vantaggio di non doversi piu`
   preoccupare  della geometria  delle  partizioni o  di avere  spazio
   contiguo per aumentare un filesystem.

o  aggiungere piu` storage fisico
   se e` necessario,  si possono aggiungere piu` drive  ad LVM, il che
   consente  di avere  piu`  spazio a  disposizione  per ingrandire  i
   filesystem

o  snapshot
   e` possibile effettuare una  "fotografia" ad un filesystem, in modo
   che si possa utilizzare come "copia di backup". Il bello e` che non
   e` necessario allocare l'intero spazio de filesystem per questo

o  spostare LVM su un nuovo storage fisico
   facilita di gestione delle  risorse disco e rende gli aggiornamenti
   molto piu` semplici.

o  striping
   memorizzare su differenti device, senza che sia necessario usare un
   layer RAID.


Terminologia
~~~~~~~~~~~~

Physical Volume  (pv)
  e` un disco fisso o una  sua partizione (anche volumi RAID); sono le
  risorse fisiche di storage su cui verra` costruito LVM;

Volume Group (vg)
  inizializza  uno o piu`  pv come  un unico  "disco virtuale",  e che
  possiamo  considerare come  una riserva  di storage  a  cui possiamo
  attingere.

Logical Volume (lv)
  sono le aree finali che  conterranno i nostri dati, e vengono creati
  "ritagliando"  spazio   da  un   vg;  qui  dentro   verranno  creati
  effettivamente i filesystem

E` un  cerchio che si chiude:  da partizioni distinte  (pv) le abbiamo
unite in  una singola area di  storage (vg) da  cui creiamo partizioni
logiche (lv) su cui utilizzare i filesystem.

Extents
  sono le unita` minima di allocazione  in un lv: ogni lv conterra` un
  numero intero  di extent. Possiamo  considerarli come i  blocchi dei
  dischi  fissi, ma  di dimensioni  piu` grandi  (di default  4MB). La
  dimensione e` la  stessa per ogni vg, e questo  rende piu` facile la
  manutenzione (spostamenti, ridimensionamento, etc).

Utilizzare LVM
~~~~~~~~~~~~~~

Per  creare  un  set LVM,  prima  di  tutto  e` necessario  creare  la
partizione sul disco fisico:

# cfdisk <device>

che dovra` essere di tipo "8E" ("Linux LVM"); diciamo, a questo punto,
che e` stata creata la partizione <partition>.

Ora si deve creare il pv sopra questa partizione:

# pvcreate <partition>

questo comando rendera` la partizione utilizzabile da LVM.

Ora si possono creare i vg:

# vgcreate <vg_name> <partition>

Adesso che disponiamo del vg, possiamo creare i lv, con il comando:

# lvcreate --space <space> -n <lv_name> <vg_name>

a questo punto, il volume  e` disponibile come ogni altro device sotto
/dev/<vg_name>/<lv_name>   o   /dev/mapper/<vg_name>-<lv_name>   (deve
essere presente il modulo del kernel "device mapper", dm_mod) e quindi
si puo` formattare e montare come fosse un disco "fisico":

# mkfs.<type> /dev/<vg_name>/<lv_name>
# mount /dev/<vg_name>/<lv_name> /<mount>/<point>

Per ottenere informazioni sui volumi LVM, ci sono alcuni comandi:

o  pvdisplay
   per ottenere informazioni sui pv presenti nel sistema

o  vgdisplay
   per ottenere informazioni sui vg presenti nel sistema

o  lvdisplay
   per ottenere informazioni sui lv presenti nel sistema


Resize con LVM
~~~~~~~~~~~~~~

Questa  e`  una  delle   principali  caratteristiche  di  LVM,  quindi
guardiamola in dettaglio.

Aggiungere spazio ad un vg e` molto semplice:

# vgextend <vg> <new_pv>

dove <new_pv>  e` il pv  (verosimilmente creato da poco)  che vogliamo
rendere disponibile al vg in questione.

Ora che abbiamo a disposizione  piu` spazio sul vg, possiamo espandere
anche un lv (o piu`):

# lvextend -L+<size> /path/to/lv

Se si volesse ridurre il lv, al posto del "+" si deve usare "-"

Una volta ridimensionato il lv, e` ancora necessario ridimensionare il
filesystem  ivi contenuto, e  questo deve  essere fatto  con l'utility
opportuna del proprio filesystem. Sebbene sia possibile ridimensionare
la  partizione  quando  essa  e`  online,  e`  caldamente  consigliato
ridimensionare il filesystem dopo  averlo smontato. In piu`, quando si
deve  restringere il filesystem,  smontarlo prima  e` d'obbligo,  e le
operazioni da  svolgere sono in ordine inverso:  prima si ridimensiona
il filesystem, poi il lv (con lvreduce).

Quindi in caso di EXT2, faremo:

# umount /path/to/lv
# resize2fs /path/to/lv
# mount <fs>

Alcuni filesystem,  pero`, consentono il  resize a caldo  (per esempio
XFS e ReiserFS): controllate bene prima la documentazione opportuna in
quanto  si  corre  il   rischio  di  perdere  l'intero  contenuto  del
filesystem.

Una comoda utility, da utilizzare al posto di lvextend + fs_resize, e`
e2fsadm che fa tutto questo per conto nostro:

# e2fsadm -L+2G /lv/device

che esegue:

- fsck del filesystem
- lvextend
- resize del filesystem


RAID con LVM
~~~~~~~~~~~~

LVM consente  di creare un semplice  RAID0: mentre si crea  un vg, con
vgcreate, se  si specificano piu` partizioni  (eventualmente su dischi
diversi) allora  si va a creare  un'area di storage che  si espande su
piu` dischi, proprio come il RAID0:

# vgcreate <name> <partition1> <partition2> ...

Ovviamente, ci sono gli stessi pericoli di un RAID0: la perdita di una
partizione, comporta la perdita dell'intero vg.

Quello che spesso avviene, invece, e` la creazione di un set LVM sopra
ad un array RAID, in modo da ottenere la ridondanza garantita dal RAID
in unione alla flessibilita` fornita da LVM.


Creare snapshot con LVM
~~~~~~~~~~~~~~~~~~~~~~~

Prendiamo una situazione reale: effettuare il backup. Mentre il backup
gira, non e` possibile accedere ai file, in quanto altrimenti la copia
potrebbe non  essere consistente;  certo, fermare le  attivita` (anche
per molto tempo, a seconda  della dimensione dei dati) puo` non essere
accettabile, per esempio per il backup di un database ERP.

LVM fornisce una funzionalita` che  puo` tornare molto utile in questa
situazione: lo snapshot. Essa consente di creare una copia di un lv in
un determinato momento,  e potervi accedere anche in  caso di modifica
dei dati di origine. Una nota importante: non stiamo clonando un lv, e
quindi non  occuperemo l'intero spazio  del lv di origine;  ma vediamo
come funziona:

# lvcreate --size <size> --snapshot -n <my_snap> /path/to/lv
# mount <my_snap> /<mnt>

Se si  utilizza "df"  verra` mostrato come  /<mnt> utilizzi  lo stesso
spazio di  /path/to/lv, ma in  realta` al nostro vg  richiede soltanto
una dimensione pari a <size>.

Lo snapshot  fa si` che, accedendo  ai dati in esso  contenuti, se non
sono cambiati, in realta` accediamo ai dati del lv di origine.

Se invece i dati vengono cambiati ecco cosa avviene: LVM in automatico
scrive i  blocchi "originali"  nell'area di snapshot,  mentre aggiorna
realmente  i blocchi  su lv  (la tecnica  e` nota  come copy-on-write,
COW).

In  questo modo,  accedendo ai  dati  tramite lo  snapshot, parte  dei
blocchi (quelli non modificati) sono acceduti sul lv, mentre parte dei
blocchi  (quelli modificati  all'origine) vengono  letti  dall'area di
snapshot.

Dal momento  che soltanto i blocchi modificati  sono memorizzati nello
snapshot, appare chiaro come mai non viene utilizzato lo stesso spazio
del lv d'origine.

A  questo punto,  il backup  puo`  essere preso  senza problemi  dallo
snapshot, mentre  le applicazioni (o gli utenti)  possono continuare a
lavorare sul lv d'origine.

Una volta terminato l'utilizzo  dello snapshot, puo` essere cancellato
(e ricreato quando diventera` necessario).


Rimuovere un PV
~~~~~~~~~~~~~~~

Cerchiamo di descrivere i task da fare per rimuovere un pv.

Prima di tutto si verifica se ci sono physical extent ("Allocated PE")
allocati con:

  # pvdisplay /dev/PV

Se ci sono PE allocati in qualche vg, allora e` necessario riallocarli
in altri pv, con il comando

  # pvmove /dev/PV /dev/PV_dst1 /dev/PV_dst2 ...

se non si specificano i  pc destinazione, LVM dovrebbe riallocare i PE
dove possibile.  L'unica  limitazione di pvmove e` la  richiesta di un
numero  contiguo di  PE liberi  nei PV  di destinazione  equivalente a
quello dei PE da spostare.

Se non c'erano  PE allocati (quindi nessun vg sta  usando PE di questo
pv) o se abbiamo effettuato il passo precedente, possiamo rimuovere il
pv dai vg che lo contengono con

  # vgreduce <vg_name> /dev/PV

ed infine possiamo eliminare il pv con

  # pvremove /dev/PV

Si noti inoltre  che il comando pvmove consente  di riallocare tutti i
PE di un certo lv su un altro pv.


Un messaggio di errore "tipico"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In caso  di / su  LVM, durante lo  shutdown della macchina  si possono
notare messaggi di errore simili a:

  Shutting down LVM Volume Groups...
  Can't deactivate volume group "<vgname>" with 1 open logical volume(s)
  ...
  <device> still in use

ma  non  c'e`  da  preoccuparsi.  Durante lo  spegnimento,  LVM  viene
disattivato, ma dal momento che  / e` su LVM, andrebbe prima smontata,
ma  questo  e`  impossibile,  in  quanto altrimenti  la  procedura  di
shutdown non potrebbe proseguire.


Leggere l'HOWTO
~~~~~~~~~~~~~~~

Mai come  in questo  caso e` opportuna  la lettura dell'LVM  HOWTO, in
quanto  quando si  lavora con  i propri  dati, e`  sempre  bene essere
preparati piuttosto che perderli!