30 novembre 2014

[Proxmox] Montare un file di backup in una cartella

Ho avuto la necessità di recuperare al volo dei dati da un file di backup di proxmox, di seguito elenco la procedura che ho utilizzato:
1) Per prima cosa ho copiato il file di backup dalla cartella di proxmox (compresso con lzo) in una cartella temporanea
root@Proxmox-VE ~ # cp /var/lib/vz/dump/vzdump-qemu-102-2014_11_24-06_26_31.vma.lzo /tmp
2) Ho decompresso il file e successivamente estratto nella cartella "vmextracted"
root@Proxmox-VE ~ # lzop -d /tmp/vzdump-qemu-102-2014_11_24-06_26_31.vma.lzo
root@Proxmox-VE ~ # vma extract /tmp/vzdump-qemu-102-2014_11_24-06_26_31.vma /tmp/vmextracted
DEVINFO /tmp/vmextracted/tmp-disk-drive-ide0.raw 21474836480
Formatting '/tmp/vmextracted/tmp-disk-drive-ide0.raw', fmt=raw size=21474836480
3) All'interno della cartella c'è il file che a noi interessa e uno o più altri file di supporto a Proxmox, spostiamoci quello che ci serve e eliminiamo il resto
root@Proxmox-VE ~ # mv /tmp/vmextracted/disk-drive-ide0.raw /tmp/vmextracted.vmdk
root@Proxmox-VE ~ # rm /tmp/vmextracted/*
root@Proxmox-VE ~ # rm /tmp/vzdump-qemu-102-2014_11_24-06_26_31.vma*
4) Verifichiamo il contenuto del file così da sapere le partizioni all'interno
root@Proxmox-VE ~ # fdisk -lu /tmp/vmextracted.vmdk

Disk /tmp/vmextracted.vmdk: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006381c

Device Boot Start End Blocks Id System
/tmp/vmextracted.vmdk1 * 2048 1026047 512000 83 Linux
/tmp/vmextracted.vmdk2 1026048 41943039 20458496 8e Linux LVM
5) Come possiamo vedere ci sono due partizioni, dobbiamo quindi calcolare il settore preciso da cui far partire il mount moltiplicando la posizione di start della partizione che ci interessa (1026048) per il numero di bytes per settore (512)
root@Proxmox-VE ~ # echo $(( 1026048 * 512 ))
525336576
6) Procediamo quindi con il mount vero e proprio
root@Proxmox-VE ~ # losetup -o 525336576 /dev/loop0 /tmp/vmextracted.vmdk
root@Proxmox-VE ~ # pvdisplay /dev/loop0
--- Physical volume ---
PV Name /dev/loop0
VG Name vg_pierocs
PV Size 19.51 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4994
Free PE 0
Allocated PE 4994
PV UUID DVPpuC-Y4vG-wewi-xjJc-RnSC-57oq-c4DmAT

root@Proxmox-VE ~ # lvscan
inactive '/dev/vg_pierocs/lv_root' [17.54 GiB] inherit
inactive '/dev/vg_pierocs/lv_swap' [1.97 GiB] inherit
root@Proxmox-VE ~ # lvchange -ay /dev/vg_pierocs/lv_root
root@Proxmox-VE ~ # mount /dev/vg_pierocs/lv_root /tmp/vmextracted
7) Abbiamo finalmente la nostra partizione montata e possiamo esplorarla
root@Proxmox-VE ~ # cd /tmp/vmextracted/
8) Quando abbiamo finito dobbiamo procedere con lo smontare la partizione, eliminare il device loop e eliminare il file
root@Proxmox-VE ~ # umount /tmp/vmextracted
root@Proxmox-VE ~ # lvchange -an /dev/vg_pierocs/lv_root
root@Proxmox-VE ~ # losetup -d /dev/loop0
root@Proxmox-VE ~ # rm /tmp/vmextracted.vmdk
root@Proxmox-VE ~ # rm -r /tmp/vmextracted/

30 luglio 2012

[Linux] Eliminare file più vecchi di X giorni

Come ho fatto per Windows un paio di mesi fa, spiego anche per Linux come eliminare i file più vecchi di Xgiorni da una determinata cartella
Ho preparato questo comando per eliminare da un centralino Asterisk tutte le registrazioni più vecchie di una certa data:
find /percorso/* -mtime +X -exec comando {} \;
dove X è la quantità di giorni precedenti ad oggi cui si deve cercare e percorso è il path dove cercare i file, es.:
find /var/spool/asterisk/monitor/* -mtime +7 -exec rm -f {} \;
Questo comando elimina tutti i file più vecchi di una settimana dalla directory /var/spool/asterisk/monitor/.
Prima di far partire lo script possiamo eseguire una versione leggermente modificata per elencare tutti i file che andremo a cancellare:
find /var/spool/asterisk/monitor/* -mtime +7 -exec ls -lat {} \;

16 luglio 2012

[CentOS] Avvio in modalità "Repair filesystem"

Mi è capitato un server con CentOS 5.4 che non ripartiva più, o meglio ripartiva ma al prompt segnalava "Repair filesystem #".Quando si verifica questo problema vuol dire che l'OS non trova più una delle partizioni che normalmente monta all'avvio.
Il sistema per risolvere velocemente il problema, o almeno ripristinare il server in attesa di verificare il problema sulla partizione è di modificare il file fstab commentando la riga con l'hdd danneggiato.
L'unico problema è che il sistema in questo stato è in modalità read-only e non si può quindi apportare modifiche al file in questione. Per ovviare a questo bisogna lanciare il seguente comando:
mount -w -o remount /
dopodichè avremo accesso il lettura e scrittura alla partizione di sistema e potremo modificare il file /etc/fstab con il nostro editor preferito, es:
nano /etc/fstab

[XenServer] Riavvio forzato VM in caso di errore

Mi è capitato di avere una VM che non ne voleva sapere di riavviarsi ne da XenCenter ne da consolle, vi scrivo come ho risolto nel mio caso. Ad ogni tentativo di riavvio il server mi ritornava l'errore:

Another operation involving the object is currently in progress
Per ovviare a questo problema ho effetuato i seguenti passaggi
1) Ho recuperato l'uuid della vm in questione con il comando:
xe vm-list
2) Ho recuperato l'id del dominio a cui quella vm apparteneva (id|uuid):
list_domains
3) Ho distrutto il dominio in questione (XX è l'id recuperato dal comando prima):
/opt/xensource/debug/destroy_domain -domid XX
4) Infine ho riavviato la VM col metodo tradizionale (YYYY è l'uuid della VM):
xe vm-reboot uuid=YYYY --force
Il tutto senza riavviare il server Xen.

17 giugno 2012

[Linux] Copiare file tra computer Linux tramite SSH

Vediamo come con un semplice comando sia possibile copiare file tra due computer Linux (o anche windows se opportunamente configurato) tramite protocollo SSH Per copiare un file attraverso una connessione protetta SSH, si ricorre al comando scp, la cui sintassi è la seguente:
scp filelocale nomeutente@NOMEHOSTSUCUICOPIARE:/nomenuovofile
Come è facile intuire, filelocale indica il file da copiare, mentre nomeutente@NOMEHOSTSUCUICOPIARE:/nomenuovofile specifica la destinazione della copia. Per effettuare, invece, la procedura inversa, ossia la copia di un file remoto sulla propria postazione, occorre modificare un po' l'ordine dei fattori:
scp nomeutente@NOMEHOSTDACUICOPIARE:/fileremoto /nuovofilelocale
Sia nel primo che nel secondo caso, naturalmente, è possibile utilizzare tutti i caratteri jolly messi a disposizione dal sistema, quindi, qualora si desideri copiare tutto il contenuto di una directory, si scriverà:
scp /documentidatrasferire/* nomeutente@NOMEHOSTSUCUICOPIARE:/documentitrasferiti/

6 maggio 2012

[Linux] Utilizzare un tunnel SSH per bypassare il firewall aziendale

Con questa guida configureremo il nostro pc per navigare in internet usando un semplice computer linux "remoto" attraverso un proxy sock.
La creazione di questo tipo di proxy comporta due vantaggi:
1) Ogni comunicazione attraverso il proxy viene criptata (essendo SSH un protocollo sicuro)
2) Utilizzando il proxy si scavalcano le restrizioni imposte dai firewall aziendali

Prima di iniziare ci sono dei prerequisiti da soddisfare:
1) Avere accesso alla porta SSH del computer remoto
2) Avere aperta in uscita la porta 22 (o altra se diversa)

La prima cosa da fare è scaricare il client SSH putty (ovviamente è opensource) sul nostro pc (si presuppone abbiate windows) da qui.
Con questo client opportunamente configurato riusciremo a bypassare il firewall aziendale.
Lanciamo Putty e nella schermata iniziale inseriamo l’indirizzo IP della macchina sui cui gira il server SSH

Ora seguite le indicazioni sotto:
1 – selezionate SSH
2 – selezionate Tunnels
3 – selezionate Auto
4 – selezionate Dynamic
5 – scegliete la porta (quella che volete maggiore di 1024)
6 – premete Add

Finalmente potete aprire la connessione premendo Open.
Inserite le credenziali di accesso a SSH (login/pass) e lasciate Putty aperto.
Ora dovrete configurare il vostro browser (o qualsiasi altro programma: msn, skype, utorrent etc etc) per utilizzare il proxy appena creato.
Prendiamo ad esempio la configurazione di Firefox.
Andate sul menu Strumenti –> Opzioni…
e selezionate il tab Avanzate. Ora premete su Impostazioni.

Inserite qui i dati del proxy appena creato con la porta che avete scelto (nel mio caso la porta è la 1080)

Date OK e provate a navigare.
Se tutto funziona a dovere il vostro IP dovrebbe essere quello della macchina dove risiede il server SSH.

20 febbraio 2012

[CentOS] Aggiungere un disco da XenServer

Quando si aggiunge un disco ad una macchina virtuale bisogna prima di tutto creare una partizione, in seguito quest'ultima deve essere formattato e infine montata.
Di seguito le istruzioni per come fare.

Per prima cosa assicuriamoci che il nuovo disco virtuale sia visibile da CentOS con il comando

fdisk -l
Dovremmo vedere il nuovo disco come /dev/xvdb.
A questo punto con il comando:

fdisk /dev/xvdb
andremo a configurare la nuova partizione, eseguire i lcomando come segue

Confermiamo quindi le impostazioni e scriviamo sul disco con il tasto "w".
Adesso formattiamo la partizione appena creata in ext4 con il comando:
mkfs –t ext4 /dev/xvdb1
Attendiamo la fine del processo e avremo il nostro disco pronto per essere montato con il comando:
mount –t ext4 /dev/xvdb1 /cartella_dove_montare
Ora non resta che fare in modo che questo disco venga montato all'avvio del sistema operativo andando a modificare la tabella fstab in questo modo:
vi /etc/fstab
e aggiungendo questo alla fine:
/dev/sdb1 /database ext4 defaults 1 1
Riavviando la macchina, la partizione verrà montata automaticamente.

[XenServer] Impostare l'avvio automatico delle VM

Con l'ultima versione di XenServer, la 6, è stato introdotto un flag per l'esecuzione automatica di una macchina virtuale quando si spegne/riavvia l'host.

La procedura è molto semplice e basta eseguire una serie di comandi.
Prima di tutto cerchiamo il seriale del pool:
[root@ ~]# xe pool-list
uuid ( RO) : [uuid-pool]
name-label ( RW): [pool-name]
name-description ( RW): [pool-desc]
master ( RO): [uuid-xs]
default-SR ( RW): [uuid-sr]
Questo comando ritorna i seguenti valori:
uuid-pool: L'identificativo univoco del Pool;
pool-name: Il nome del Pool;
pool-desc: La descrizione del Pool;
uuid-xs: L'identificativo univoco dello XenServer che attualmente è impostato come Pool Master;
uuid-sr: L'identificativo univoco dello storage predefinito del Pool.
Prima di tutto dobbiamo attivare l'autostart al pool:
[root@ ~]# xe pool-param-set uuid=[uuid-pool] other-config:auto_poweron=true
Adesso andiamo a vedere gli identificativi di tutte le VM per decidere quale impostare in autostart con il seguente comando:
[root@ ~]# xe vm-list
uuid ( RO) : [uuid-vm]
name-label ( RW): [vm-name]
power-state ( RO): [vm-power]
Questo comando ritorna i seguenti valori:
uuid-vm: L'identificativo univoco della VM;
vm-name: Il nome della VM;
vm-power: Lo stato della VM (In esecuzione, spenta).
Quindi adesso per attivare l'autostart su una specifica VM basta eseguire questo comando:
[root@ ~]# xe vm-param-set uuid=[uuid-vm] other-config:auto_poweron=true

31 gennaio 2012

[XenServer] Eseguire boot direttamente da VHD

Di default non è possibile eseguire direttamente una macchina virtuale convertita in VHD su XenServer. Per renderlo possibile dobbiamo convertire lo storage in una partizione EXT3 prima di poter copiar su la VM e poterla eseguire.
cat /etc/xensource-inventory
Identificare e annotare l'host ID (INSTALLATION_UUID) e l'ID del disco SR (DEFAULT_SR_PHYSDEVS). Determinare adesso l'UUID del default SR con:
xe sr-list type=lvm
Determinare adesso l'UUID del PBD con:
xe pbd-list sr-uuid=[SR_UUID]
Disconnettere il default SR:
xe pbd-unplug uuid=[PBD_UUID]
Rimuovere il default SR:
xe sr-destroy uuid=[SR_UUID]
Creare una partizione EXT3:
xe sr-create content-type="Local SR" host-uuid=[INSTALLATION_UUID] type=ext device-config-device=[DEFAULT_SR_PHYSDEVS] shared=false name-label="Local EXT3"
Nota: Questo comando impiegherà alcuni minuti a seconda della dimensione del disco e restituirà l'UUID della nuova partizione.
A questo punto il nuovo Storage è configurato e funzionante e si può procedere a copiare il file VHD sulla partizione:
cp mia_vm.vhd /var/run/sr-mount/[NUOVO_SR_UUID]/
Adesso create una vm con le caratteristiche simili a quella convertita in vhd (non eseguitela ancora), verrà creato un file nella cartella /var/run/sr-mount/[NUOVO_SR_UUID]/, segnarsi il nome del file vhd creato, eliminare il file (UUID.VHD) e rinominare la nostra vm nello stesso modo. Eseguire infine la VM.

[XenServer] Aggiungere supporto NTFS

Di default non è possibile montare una partizione NTFS su XenServer. Per farlo bisogna installare un driver di supporto. La procedura è abbastanza semplice (se si conoscono i passaggi, la prima volta ho impiegato 2 giorni...). Per prima cosa bisogna scaricare il pacchetto per aggiungere rpmforge a XenServer. Rpmforge è un progetto che aggiunge dei repository a XenServer per facilitare il download e l'installazione di pacchetti e applicativi. Lo possiamo fare con questi comandi:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm -import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm
Adesso dobbiamo scaricare e installare il pacchetto fuse, fondamentale per l'installazione e l'esecuzione del modulo ntfs.
wget ftp://ftp.muug.mb.ca/mirror/centos/5.7/os/i386/CentOS/fuse-2.7.4-8.el5.i386.rpm
rpm -i fuse-2.7.4-8.el5.i386.rpm
Adesso abbiamo tutto il necessario per procedere finalmente all'installazione del driver NTFS sulla macchina XenServer, procediamo quindi con questo comando:
yum install fuse-ntfs-3g.i386
Abbiamo finito, adesso per montare una periferica NTFS basterà creare una cartella ed eseguire il mount come su qualsiasi altro pc linux
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb/
Nell'esempio /dev/sdb1 è l'hdd esterno con partizione NTFS. P.S. Ovviamente per le varie versioni degli applicativi si possono utilizzare anche delle release più recenti, con questa combinazione sicuramente funziona perchè l'ho testato personalmente su 3 XenServer 6.0. Do per scontato che l'installazione sia fatta bene e che il server abbiamo una connessione internet attiva...