LVM – Come funziona

Introduzione 

LVM (Logical Volume Manager) permette l’utilizzo di dispositivi logici virtuali per accedere ai disci, mascherano cosi’ la natura dei dispositivi fisici su cui risiedono i dati.

E’ quindi possibile utilizzare un device virtuale di cui possono fare parte diversi hard disk fisici, anche di natura, velocità e dimensioni diverse.

I vantaggi di un simile approccio alla gestione dei file system sono maggiore flessibilita’ e scalabilita’, alta disponibilita’ del servizio e ridondanza.

Schema

                        -------------------------------------------------
Logical Volumes  (LV)   |    lv_share   |    lv_backup   |   (unused)   |
                        -------------------------------------------------
Volume Groups    (VG)   |                 vg_fileserver                 |
                        -------------------------------------------------
Physical Volumes (PV)   | /dev/sdb1 | /dev/sdc1 | /dev/sdd1 | /dev/sde1 |
                        -------------------------------------------------

Ricerca nuovi dischi 

Per vedere nuovi dischi aggiunti alla macchina:
echo 1 > /sys/class/fc_host/host/issue_lip
rescan-scsi-bus.sh -l -w -c
multipath

Physical Volumes (PV) 

Per creare un Physical Volume (PV) su una partizione esistente, cioe’ rendere la partizione adatta ad ospitare dei Volume Group (VG):
pvcreate ”/dev/sdb1”

Per visualizzare tutti i Physical Volume (PV) presenti:
pvdisplay

Per spostare tutti i dati da un Physical Volume (PV) ad un altro:
pvmove -i 10 ”/dev/sdb1” ”/dev/sdc1”

Volume Groups (VG) 

Per creare un Volume Group (VG) su un Physical Volume (PV) precedentemente creato:
vgcreate ”vg_name” ”/dev/sdb1” ”/dev/sdc1”

Per attivare un Volume Group (VG) non attivo:
vgchange -a y ”vg_name”

Per estendere un Volume Group (VG):
vgextend ”vg_name” ”/dev/sdd1”

Per visualizzare tutti i Volume Group (VG) presenti:
vgdisplay

Per rinominare un Volume Group (VG):
vgrename ”vg_name” ”vg_new_name”

Logical Volumes (LV)

Per creare un Logical Volume (LV) grande 2 GB su un Volume Group (VG) precedentemente creato:
lvcreate -L”2G” -n ”lv_name” ”vg_name”

Per formattare in xfs il Logical Volume (LV) appena creato:
mkfs.xfs /dev/”vg_name”/”lv_name”

Per estendere un Logical Volume (LV) di 1 GB:
lvextend -L”+1G” /dev/”vg_name”/”lv_name”

Per estendere il filesystem presente sul Logical Volume (LV) appena esteso:
xfs_growfs /mountpoint

Per visualizzare tutti i Logical Volume (LV) presenti:
lvdisplay

Ecco il nuovo sito Ubuntu App Developer: annuncio ufficiale!


Punto di riferimento fondamentale per tutti gli sviluppatori Ubuntu: il nuovo sito è stato ufficialmente annunciato e risulta giù attivo a questo indirizzo: http://developer.ubuntu.com/.

Un supporto passo passo per chi ha voglia di dedicarsi allo sviluppo di applicazioni per uno dei sistemi operativi free più utilizzati al mondo: il sito è costituito da diverse sezioni, tutte con uno scopo ben preciso.

  • Get started – Per incominciare…
  • Resources – Tutorial, guide e tutta la documentazione necessaria per lo sviluppo
  • Publish – Viene spiegato come usufruire del famoso Ubuntu Software Centre
  • Community – Community che riunisce tutti gli sviluppatori
  • My Apps – Sezione in cui possiamo tutte le applicazioni sviluppate e relative informazioni.

Ci si aspettano ulteriori novità e cambiamenti che verranno probabilmente discusse e rivelate in occasione dell’ Ubuntu Developer Summit che si terrà ad Orlando

Ubuntu 10.04 php version da 5.3 a 5.2

L’ultima versione LTS del sistema operativo in uso in azienda prevede nei repository ufficiale l’uso del php versione 5.3.
Purtroppo, in azienda abbiamo dei software che hanno bisogno ancora della versione del php 5.2.

Ecco una rapida soluzione per forzare l’installazione del php dalla 5.3 alla 5.2 utilizzando i reposittory di Karmic :

#!/bin/sh

# Script to install PHP 5.2 from 9.10 on 10.04
# And pin it so it does not get updated

PKGS=`dpkg -l | grep php | awk '{print $2}'`

apt-get remove $PKGS

sed s/lucid/karmic/g /etc/apt/sources.list | 
  tee /etc/apt/sources.list.d/karmic.list

mkdir -p /etc/apt/preferences.d/

for PACKAGE in $PKGS
do
  echo "Package: $PACKAGE
Pin: release a=karmic
Pin-Priority: 991
" | tee -a /etc/apt/preferences.d/php
done

apt-get update

apt-get install $PKGS

WhatWeb

WhatWeb è uno strumento per la riga di comando che serve a prendere in brevissimo tempo molte informazioni sull’host interessato.

Gli elementi monitorabili spaziano da semplici aspetti come il server Web fino ad arrivare a quale versione del CMS o quale strumento Javascript di uso comune viene rilevato.
Un utile strumento per verificare quali informazioni esponiamo all’esterno.

L’output del comando è per gli amanti della shell: ecco un esempio :

Vediamo come installarlo su ubuntu e provarlo su qualche sito.
La prima cosa da fare, è scarica il pacchetto da qui
Ed installiamo le librerie :

tar xvfz what*
cd ./wh*
sudo apt-get install ruby
sudo apt-get install libxslt-ruby
sudo apt-get install libxslt1-dev
sudo apt-get install rubygems
sudo apt-get install libopenssl-ruby
sudo apt-get install ruby1.8-dev
sudo gem install anemone

Settare mysql utf8

Di Default molte distribuzioni Linux , installano mysql con default character set settano a latin1.

Per modificare questo valore e impostarlo in utf8 :

alla fine di [client] section, aggiungi:

Code:

default-character-set = utf8

alla fine di  [mysqld] section, aggiungi:

Code:

character-set-server = utf8

restart mysql

Code:

> sudo /etc/init.d/mysql restart

per verificare :

Code:

> mysql -u root -p
mysql> show variables like '%char%';

dovresti vedere :

Code:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Code:

default-character-set = utf8

at the end of [mysqld] section, add:

Code:

character-set-server = utf8

then restart your mysql server:

Code:

> sudo /etc/init.d/mysql restart

and make sure it says OK with

Code:

* Starting MySQL database server mysqld

then check if it all works out

Code:

> mysql -u root -p
mysql> show variables like '%char%';

you should see the following:

Code:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Controllo automatico updates al login

Per avere sempre sotto controllo lo stato degli aggioranmenti del mio server, ed averlo sempre sotto controllo facendomelo uscire nello script di logon come nella foto sopra, ho scritto questo semplice programma : updates

#!/bin/bash
#La prima condizione e' sempre vera.

if [[ $(apt-get update 2>&1 | grep Hit) ]]; then
        if [[ $(apt-get --simulate upgrade 2>&1 | grep Inst) ]]; then
                apt-get --simulate upgrade | wc -l > /tmp/updates.txt
        else
                echo "No Updates available" > /tmp/updates.txt
        fi
fi

Se ci sono degli aggioranmenti disponibili scrivo in un file di testo il numero degli updates (wx -l ) in un file che per comodità viene posizionato in /tmp/updates.txt
Questo script non va eseguito ad ogni login per non appesantire la macchina visto che il controllo degli update fa un fetch di una serie di pagine web e svariati controlli che impegnano abbastanza il server a livello di I/O.
Meglio eseguirlo una volta sola, per questo è preferibile insierire questo script all’interno di /etc/cron.daily per lanciarlo una volta al giorno, piu’ che sufficiente.

A questo punto possiamo mettere all’interno del nostro script di loging l’otput di /tmp/updates.txt.
Io ho fatto così :

/etc/bash.bashrc :

if [  -f /tmp/updates.txt ];then echo -e "Updates Check :\t\t\t $(more /tmp/updates.txt)";fi

Static Route Ubuntu in if-up.d e Ottetti IP

Mi gasava molto l’idea che andando su Google e cercando “static route ubuntu” il primo risultato era un post che avevo scritto un mese fa.

Ho deciso quindi di raffinare la cosa “grezza” fatta un mese fa e con un po’ di tempo a disposizione ho scritto uno script in bash da inserire in /etc/network/if-up.d/ .

In questa particolare cartella ci son tutti gli script che partono quando un interfaccia è “salita”.

La particolarità di questo script è che parte solamente in presenza di una particolare rete, altrimenti evita di inserire la static route, questo perchè come nel caso del mio portatile ho bisogno di static diverse per reti diverse :

1. Create un file staticroute in /etc/network/if-up.d ( sudo touch etc/network/if-up.d/staticroute )
2. Dategli i permessi giusti : ( sudo chmod 777 staticroute )
3. Inserite lo script qui sotto tenendo customizzandovi i parametri che sono IPTOMATCH e OTTETTI ed ovvimante i gateway…

#!/bin/sh

#Luigi Molinaro 
#Setto l ottetto da matchare ed il numero di ottetti
#ESEMPI :
#10.0.0.0
#IPTOMATCH=’10′
#OTTETTI=’1′
#
#192.168.1.0
#IPTOMATCH=’192.168.1′
#OTTETTI=’3′

IPTOMATCH=’10′
OTTETTI=’1′

#Prendo dal stdOut di ifconfig solo il primo ottetto dell IP da ogni interfaccia

IPOWL=$(/sbin/ifconfig eth0 | grep “inet addr:” | sed “s/^.*inet addr:\([0-9.]*\).*$/\1/” | cut -d . -f $OTTETTI)
IPOWL2=$(/sbin/ifconfig eth1 | grep “inet addr:” | sed “s/^.*inet addr:\([0-9.]*\).*$/\1/” | cut -d . -f $OTTETTI)

if [ "$IPOWL" = "$IPTOMATCH" ] || [ "$IPOWL2" = "$IPTOMATCH" ]; then
echo Adding Route 10.10.0.0 …
/sbin/route add -net 10.10.0.0 netmask 255.255.0.0 gw 10.1.1.50
echo Adding Route 10.11.0.0 …
/sbin/route add -net 10.10.0.0 netmask 255.255.0.0 gw 10.1.1.50
else
echo No Static Route to insert
fi

se volete invece inserire una route statica non in base alla rete basta semplicemente inserire in staticroute :

/sbin/route add -net 10.10.0.0 netmask 255.255.0.0 gw 10.1.1.50