TipsAndTricks >> BondingInterfaces

Manual from: source

What is bonding and how does it work

Bonding is the same as port trunking. In the following I will use the word bonding because practically we will bond interfaces as one.

Bonding allows you to aggregate multiple ports into a single group, effectively combining the bandwidth into a single connection. Bonding also allows you to create multi-gigabit pipes to transport traffic through the highest traffic areas of your network. For example, you can aggregate three megabits ports into a three-megabits trunk port. That is equivalent with having one interface with three megabytes speed.

 

Where should I use bonding?

You can use it wherever you need redundant links, fault tolerance or load balancing networks. It is the best way to have a high availability network segment. A very useful way to use bonding is to use it in connection with 802.1q VLAN support (your network equipment must have 802.1q protocol implemented).

 

What are the types of bonding available

The best documentation is on the Linux Channel Bonding Project page http://sourceforge.net/projects/bonding/

mode=1 (active-backup)

Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond’s MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.

mode=2 (balance-xor)

XOR policy: Transmit based on [(source MAC address XOR’d with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.

mode=3 (broadcast)

Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.

mode=4 (802.3ad)

IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.

  • Pre-requisites:
  • Ethtool support in the base drivers for retrieving the speed and duplex of each slave.
  • A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode.

mode=5 (balance-tlb)

Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave.

  • Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.

mode=6 (balance-alb)

Adaptive load balancing: includes balance-tlb plus receive load balancing (rlb) for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server.

 

Bonding on CentOS 4

In the modprobe.conf file, add the following:

 

alias bond0 bonding 
options bond0 miimon=80 mode=5

Be sure to add this before any of the network aliases

 

modes: 
mode=0 (Balance Round Robin)
mode=1 (Active backup)
mode=2 (Balance XOR)
mode=3 (Broadcast)
mode=4 (802.3ad)
mode=5 (Balance TLB)
mode=6 (Balance ALB)

In the /etc/sysconfig/network-scripts/ directory create the configuration file: ifcfg-bond0

 

DEVICE=bond0 
IPADDR=<ip address>
NETMASK=
NETWORK=
BROADCAST=
GATEWAY=
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Change the ifcfg-eth0 to participate in the new bond device:

DEVICE=eth0 
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Check the status of the bond.

cat /proc/net/bonding/bond0

You can use multiple bond interfaces but for that you must load the bonding module as many as there are bond links, possibly with varying options. Presuming that you want two bond interfaces, you must configure /etc/modules.conf as follow:

 alias bond0 bonding
 options bond0 -o bond0 mode=0 miimon=100
 alias bond1 bonding
 options bond1 -o bond1 mode=1 miimon=100

To manage the state of the bonds yourself you can use the ifenslave command. See the manpage of ifenslave for the details.

 

Post CentOS 4

As time has passed, edits in /etc/modprobe.conf are disfavored, in preference to writing, and the initscripts parsing, smaller configuration files that should, but are not yet required, to end in a .conf suffix. Those files are placed in: /etc/modprobe.d/ and sourced in alphabetical sequence. It makes sense to adopt the naming practice, to ‘future proof’ a distribution move to an ‘init’ successor such as systemd

Monitoring Weblogic with Munin

Primero de todo tenemos que extraer los datos de HEAP, CPU y Daemons & Threads del adminserver de nuestro dominio Weblogic. Posteriormente dejamos estos datos en un fichero para que el script de munin (3 en total) recoja dichos datos y sean enviados al servidor.

Extraer datos de Weblogic.

Para hacer esto usaremos el conocido jython. Para hacerlo crearemos un script en el cron que se ejecute cada 5 min;

 

crontab -l

*/5 * * * * /usr/share/munin/scripts/weblogic_plugin.sh > /dev/null 2>&1

 

Este script se conectará al Admin, ira por cada uno de los managed server (incluso el Admin). Y sacara los datos dejándolos en un fichero de texto. En nuestro caso;

/wls/export_wls_status.sh

El script weblogic_plugin.sh es;

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN1.py  > /wls/export_wls_status

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN2.py >> /wls/export_wls_status

 

Nota!!

Quizás tendréis que modificar el directorio del binario de java (/opt/jrmc/bin/) así como del fichero weblogic.jar (/opt/bea/wls/) en función de vuestra configuración.

 

Este script de cron sacará todos los datos, pero el que realmente se conecta al Weblogic es el script weblogic_py_DOMAIN.py Este script es;

username = ‘usuario’

password = ‘password’

URL=’t3://localhost:1111′

connect(username,password,URL)

domainConfig()

domini=cmo.getName()

serverList=cmo.getServers();

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

for server in serverList:

name=server.getName()

cd(name)

serverState=cmo.getState()

cd(“/ServerRuntimes/”+server.getName()+”/JVMRuntime/”+server.getName())

sizeHP=cmo.getHeapSizeCurrent()

usedHP=cmo.getUsedHeap()

proces=cmo.getAllProcessorsAverageLoad()

timegc=cmo.getLastGCEnd()

daemon=cmo.getNumberOfDaemonThreads()

thread=cmo.getTotalNumberOfThreads()

 

print domini,’PRO’,  name,’SizeHPWLS ‘,sizeHP

print domini,’PRO’,  name,’UsedHPWLS ‘,usedHP

print domini,’PRO’,  name,’ProcesWLS ‘,proces

print domini,’PRO’,  name,’TimeGCWLS ‘,timegc

print domini,’PRO’,  name,’DaemonWLS ‘,daemon

print domini,’PRO’,  name,’ThreadWLS ‘,thread

 

domainConfig()

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

 

Una vez tenemos los datos en un fichero de texto podremos tratarlo. Dejo un ejemplo de cómo se queda el fichero con los datos:

 

DOMAIN1 PRO AdminServer SizeHPWLS  536870912

DOMAIN1 PRO AdminServer UsedHPWLS  454807648

DOMAIN1 PRO AdminServer ProcesWLS  0.0806008984095334

DOMAIN1 PRO AdminServer TimeGCWLS  1380632745493

DOMAIN1 PRO AdminServer DaemonWLS  51

DOMAIN1 PRO AdminServer ThreadWLS  52

DOMAIN1 PRO DOMAIN1_01 SizeHPWLS  1610612736

DOMAIN1 PRO DOMAIN1_01 UsedHPWLS  1199548792

DOMAIN1 PRO DOMAIN1_01 ProcesWLS  0.08062796813666061

DOMAIN1 PRO DOMAIN1_01 TimeGCWLS  1380629744340

DOMAIN1 PRO DOMAIN1_01 DaemonWLS  42

DOMAIN1 PRO DOMAIN1 _01 ThreadWLS  43

 

Para tratar el fichero crearemos un script en /usr/share/munin/plugins/ con el nombre que se quiera, en mi caso MANAGED_DOMAIN1_HEAP

El fichero básicamente hace un grep del dato que se quiera y lo devuelve. Para el HEAP busca SizeHPWLS, para daemons y threads DaemonWLS  y ThreadWLS y para CPU busca ProcesWLS

 

#!/bin/sh

case $1 in

config)

cat <<‘EOM’

graph_title Managed Servers Heap DOMAIN1_1

graph_vlabel HEAP USE/MAX

DOMAIN1_1_Size.label DOMAIN1_1 Max

DOMAIN1_1_Use.label DOMAIN1_1 Use

graph_scale yes

graph_category weblogic

graph_info Grafica Weblogic DOMAIN1_1 Heap Managed Servers

EOM

exit 0;;

esac

echo -n “P DOMAIN_1_Size.value ”

grep SizeHPWLS /wls/export_wls_status | grep DOMAIN1_1 | awk ‘{print $5}’

echo -n ” DOMAIN_1_Use.value ”

grep UsedHPWLS /wls/export_wls_status | grep DOMAIN1_1| awk ‘{print $5}’

 

Creamos el enlace simbólico;

cd /etc/munin/plugins

ln –s MANAGED_DOMAIN1_HEAP  /usr/share/munin/plugins/MANAGED_DOMAIN1_HEAP

Reiniciamos el agente

/etc/init.d/munin-node restart

Y en unos minutos ya lo tenemos en nuestro servidor

 

HEAP

Descarga de scripts: Weblogic & Munin Scripts

 

Munin monitoring How To

Munin es un software para monitorizar i graficar que nos permite analizar el estado de nuestros sistemas.

munin

Introducción

Funciona como un Cacti o Graphite pero a diferencia de estos dos Munin funciona con agentes. Esto podría ser un hándicap pero veremos que nos va ayudar mucho en la instalación y mantenimiento del entorno.

Hay dos partes, la cliente “munin-node” y la servidor “munin”

Aquí tenemos una imagen que nos va ayudar a entender cómo funciona.

 

munin design

El munin-master (servidor) se ejecuta cada 5 minutos desde el crond i ejecuta varios scripts;

Munin-update: Este se encarga de leer el fichero /etc/munin/munin.conf y recoger todos los clientes. Posteriormente se conecta por el puerto 4949/tcp i le dice al “munin-node” que ejecute todos los scripts que tiene en /etc/munin/plugins/ y le devuelva el resultado.

Munin-limites: Este analiza los datos obtenidos de los clientes y revisa si algunos de ellos está por encima del umbral marcado en la gráfica. En caso de ser así actualiza el estado de la gráfica  a “Warning” o “Critical”.

Munin-html: Se encarga de actualizar la web. Si ponemos nuevos nodos o dominios este actualizara la web. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

Munin-graph: “La joya de la corona”. Usando las librerías de RRD-Tool y con los valores de “munin-update” se encarga de generar las gráficas. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

 

Para “munin-html” y “munin-graph” los configuraremos como CGI. Las diferencias son;

Cron: Cuando lo configuramos como cron estos scripts generan todas las web y todas las gráficas cada vez que se ejecuta el script. En caso de tener unos 50 nodos en 5 minutos hay tiempo suficiente para realizar la tarea.

CGI: Configuraremos como CGI cuando tengamos muchos nodos. En mi instalación actualmente tengo 300 nodos con un total de 70.000 ficheros rrd y en 5 minutos no hay tiempo para procesarlo todo. Con esto lo que hacemos es que cada vez que entres en la web “munin-html” generará dicha web y cada vez que entres en un nodo “munin-graph” generará las gráficas que quieres visualizar.

Instalación (servidor)

En este caso vamos a realizar una instalación en una RedHat 5.9 64bits utilizando EPEL.

Registramos la maquina en RedHatNetwork, RedHat Satellite o usando un cd. (Basicamente necesitamos poder ejecutar yum)

 

Instalamos EPEL

cd /tmp/

wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

rpm -Uvh /tmp/epel-release-5-4.noarch.rpm

 

Instalamos munin y munin-node (asi también monitorizamos en servidor)

 

yum install httpd mod_fcgid munin munin-node

 

2

 

chkconfig munin on

chkconfig munin-node on

 

Configuración (servidor)

El fichero principal de configuración es /etc/munin/munin.conf

Lo modificaremos poniendo solo los siguientes datos;

htmldir /var/lib/www/html/munin  #### (es el directorio de la web)

logdir /var/log/munin

includedir /etc/munin/conf.d

graph_period minute

graph_strategy cgi                         ##### Tiene que estar en cgi no en cron

cgiurl_graph /munin-cgi/munin-cgi-graph   #### Es la URL donde tiene los scripts de CGI (lo veremos al configurar el apache)

html_strategy cgi                            ##### Tienen que estar en cgi no en cron

max_processes 100                       ##### Por defecto viene en 16. Son los procesos que creara al ejecutar el munin-update. Si tienes mucha maquina pon un valor más alto. Aun así es bueno realizar varias pruebas hasta encontrar un buen valor.

##### Esto es un ejemplo de cómo crear un nodo cliente. Estos nodos son los que el script “munin-update” se conecta

[NODO_CLIENET.TEST]

address 192.168.0.1

use_node_name yes

 

Para más información de posibles configuraciones (LINK) http://munin-monitoring.org/wiki/munin.conf

 

Ahora ya tenemos configurado el munin para CGI, pero nos queda el apache…

Configuración APACHE para CGI:

En la configuración del apache tenemos que notificarle donde están los scripts para CGI.

Vamos al fichero /etc/httpd/conf.d/munin.conf

Comentaremos las líneas para entender posibles modificaciones.

 

<VirtualHost *:443> ### En mi caso uso SSL con certificado

SSLEngine on

SSLCertificateFile /etc/httpd/cert/selfsigned/munin.node.es.crt

SSLCertificateKeyFile /etc/httpd/cert/selfsigned/keys/ munin.node.es.key

ServerName munin.node.es

DocumentRoot /var/lib/www/html ###Importante que sea el mismo que hemos puesto en el fichero /etc/munin/munin.conf

<IfModule !mod_rewrite.c>

Alias /munin-cgi/munin-cgi-html/static /var/lib/www/html/munin/static ## Lo que hacemos en indicarle donde esta la web (parte estatica). Esto se ejecuta cada vez que entramos en la web

RedirectMatch ^/$ /munin-cgi/munin-cgi-html/

</IfModule>

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^/favicon.ico /var/lib/www/html/munin/static/favicon.ico [L]

RewriteRule ^/static/(.*) /var/lib/www/html/munin/static/$1          [L]

# HTML (Cada vez que llamemos a una html este llamara al script munin-cgi-html

RewriteRule ^(/.*.html)?$           /munin-cgi/munin-cgi-html/$1 [PT]

# Images (Cada vez que solicitemos una grafica este llamara al script munin-cgi-graph

 

RewriteRule ^/munin-cgi/munin-cgi-graph/(.*) /$1

RewriteCond %{REQUEST_URI}                 !^/static

RewriteRule ^/(.*.png)$  /munin-cgi/munin-cgi-graph/$1 [L,PT]

</IfModule>

# Nos tenemos que asegurar que los script que están en /var/lib/www/cgi-bin/ son ejecutables

ScriptAlias /munin-cgi/munin-cgi-graph /var/lib/www/cgi-bin/munin-cgi-graph

<Location /munin-cgi/munin-cgi-graph>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

ScriptAlias /munin-cgi/munin-cgi-html /var/lib/www/cgi-bin/munin-cgi-html

<Location /munin-cgi/munin-cgi-html>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

<IfModule !mod_rewrite.c>

<Location /munin-cgi/munin-cgi-html/static>

Options -ExecCGI

SetHandler None

</Location>

</IfModule>

</VirtualHost>

 

Configuración (cliente)

Para el cliente editaremos el fichero /etc/munin/munin-node.conf y pondremos la IP del host servidor como una expresión regular;

allow ^192.168.0.2$

 

Información oficial de configuración de munin-node (LINK) http://munin-monitoring.org/wiki/munin-node.conf

 

Recuperación LVM Logical Volume

Dejo aquí un manual de como recuperar un volumen lógico en Linux. Tengo que agradecer este manual a Jordi que se ha pasado sus horas haciendo yes.. yes… yes… 😉

Para entender ciertos conceptos técnicos va bien este manual: http://www.linuca.org/body.phtml?nIdNoticia=326

Empezamos…

pvs -v
##########
# Scanning for physical volume names
# PV VG Fmt Attr PSize PFree DevSize PV UUID
# /dev/sda2 VolGroup00 lvm2 a- 9.88G 0 9.90G 6m961T-avTg-XypB-1T5E-sgeK-6UDX-yISnmK
# /dev/sdb vgapp1 lvm2 a- 100.00G 0 100.00G U6tSIo-9gjZ-HtQa-dYgA-uCIe-nz6f-aBrIHr
##########

– Guardar UUID para compararlo

pvck -d -v /dev/sdb
##########
# Scanning /dev/sdb
# Found label on /dev/sdb, sector 1, type=LVM2 001
# Found text metadata area: offset=4096, size=192512
# Found LVM2 metadata record at offset=10752, size=1024, offset2=0 size2=0
# Found LVM2 metadata record at offset=9728, size=1024, offset2=0 size2=0
# Found LVM2 metadata record at offset=8704, size=1024, offset2=0 size2=0
# Found LVM2 metadata record at offset=7680, size=1024, offset2=0 size2=0
# Found LVM2 metadata record at offset=6656, size=1024, offset2=0 size2=0
# Found LVM2 metadata record at offset=5632, size=1024, offset2=0 size2=0
##########

– Convertir los offset de decimal a hexadecimal y anotarlos.
– Buscar e instalar el programa hexedit
hexedit /dev/sdb
##########
#00001180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#000011A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#000011C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#000011E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#00001200 76 67 61 70 70 31 20 7B 0A 69 64 20 3D 20 22 31 74 4E 74 55 44 2D 75 68 35 61 2D 76 6B 4E 6E 2D vgapp1 {.id = “1tNtUD-uh5a-vkNn-
#00001220 55 76 76 73 2D 4D 79 4F 52 2D 72 70 30 44 2D 7A 51 44 6B 79 46 22 0A 73 65 71 6E 6F 20 3D 20 33 Uvvs-MyOR-rp0D-zQDkyF”.seqno = 3
#00001240 0A 73 74 61 74 75 73 20 3D 20 5B 22 52 45 53 49 5A 45 41 42 4C 45 22 2C 20 22 52 45 41 44 22 2C .status = [“RESIZEABLE”, “READ”,
#00001260 20 22 57 52 49 54 45 22 5D 0A 66 6C 61 67 73 20 3D 20 5B 5D 0A 65 78 74 65 6E 74 5F 73 69 7A 65 “WRITE”].flags = [].extent_size
#00001280 20 3D 20 38 31 39 32 0A 6D 61 78 5F 6C 76 20 3D 20 30 0A 6D 61 78 5F 70 76 20 3D 20 30 0A 0A 70 = 8192.max_lv = 0.max_pv = 0..p
#000012A0 68 79 73 69 63 61 6C 5F 76 6F 6C 75 6D 65 73 20 7B 0A 0A 70 76 30 20 7B 0A 69 64 20 3D 20 22 55 hysical_volumes {..pv0 {.id = “U
#000012C0 36 74 53 49 6F 2D 39 67 6A 5A 2D 48 74 51 61 2D 64 59 67 41 2D 75 43 49 65 2D 6E 7A 36 66 2D 61 6tSIo-9gjZ-HtQa-dYgA-uCIe-nz6f-a
#000012E0 42 72 49 48 72 22 0A 64 65 76 69 63 65 20 3D 20 22 2F 64 65 76 2F 73 64 62 22 0A 0A 73 74 61 74 BrIHr”.device = “/dev/sdb”..stat
#00001300 75 73 20 3D 20 5B 22 41 4C 4C 4F 43 41 54 41 42 4C 45 22 5D 0A 66 6C 61 67 73 20 3D 20 5B 5D 0A us = [“ALLOCATABLE”].flags = [].
#00001320 64 65 76 5F 73 69 7A 65 20 3D 20 32 30 39 37 31 35 32 30 30 0A 70 65 5F 73 74 61 72 74 20 3D 20 dev_size = 209715200.pe_start =
#00001340 33 38 34 0A 70 65 5F 63 6F 75 6E 74 20 3D 20 32 35 35 39 39 0A 7D 0A 7D 0A 0A 6C 6F 67 69 63 61 384.pe_count = 25599.}.}..logica
#00001360 6C 5F 76 6F 6C 75 6D 65 73 20 7B 0A 0A 6C 76 61 70 70 31 20 7B 0A 69 64 20 3D 20 22 6D 68 66 4E l_volumes {..lvapp1 {.id = “mhfN
#00001380 64 4F 2D 48 65 4B 32 2D 4A 71 54 64 2D 5A 5A 5A 55 2D 37 6D 33 4C 2D 35 70 74 53 2D 78 42 76 61 dO-HeK2-JqTd-ZZZU-7m3L-5ptS-xBva
#000013A0 48 4B 22 0A 73 74 61 74 75 73 20 3D 20 5B 22 52 45 41 44 22 2C 20 22 57 52 49 54 45 22 2C 20 22 HK”.status = [“READ”, “WRITE”, ”
#000013C0 56 49 53 49 42 4C 45 22 5D 0A 66 6C 61 67 73 20 3D 20 5B 5D 0A 73 65 67 6D 65 6E 74 5F 63 6F 75 VISIBLE”].flags = [].segment_cou
#000013E0 6E 74 20 3D 20 31 0A 0A 73 65 67 6D 65 6E 74 31 20 7B 0A 73 74 61 72 74 5F 65 78 74 65 6E 74 20 nt = 1..segment1 {.start_extent
#00001400 3D 20 30 0A 65 78 74 65 6E 74 5F 63 6F 75 6E 74 20 3D 20 32 35 35 39 39 0A 0A 74 79 70 65 20 3D = 0.extent_count = 25599..type =
#00001420 20 22 73 74 72 69 70 65 64 22 0A 73 74 72 69 70 65 5F 63 6F 75 6E 74 20 3D 20 31 09 23 20 6C 69 “striped”.stripe_count = 1.# li
#00001440 6E 65 61 72 0A 0A 73 74 72 69 70 65 73 20 3D 20 5B 0A 22 70 76 30 22 2C 20 30 0A 5D 0A 7D 0A 7D near..stripes = [.”pv0″, 0.].}.}
#00001460 0A 7D 0A 7D 0A 23 20 47 65 6E 65 72 61 74 65 64 20 62 79 20 4C 56 4D 32 20 76 65 72 73 69 6F 6E .}.}.# Generated by LVM2 version
#00001480 20 32 2E 30 32 2E 34 30 2D 52 48 45 4C 35 20 28 32 30 30 38 2D 31 30 2D 32 34 29 3A 20 46 72 69 2.02.40-RHEL5 (2008-10-24): Fri
#000014A0 20 44 65 63 20 20 33 20 30 38 3A 35 31 3A 34 37 20 32 30 31 30 0A 0A 63 6F 6E 74 65 6E 74 73 20 Dec 3 08:51:47 2010..contents
#000014C0 3D 20 22 54 65 78 74 20 46 6F 72 6D 61 74 20 56 6F 6C 75 6D 65 20 47 72 6F 75 70 22 0A 76 65 72 = “Text Format Volume Group”.ver
#000014E0 73 69 6F 6E 20 3D 20 31 0A 0A 64 65 73 63 72 69 70 74 69 6F 6E 20 3D 20 22 22 0A 0A 63 72 65 61 sion = 1..description = “”..crea
#00001500 74 69 6F 6E 5F 68 6F 73 74 20 3D 20 22 41 52 51 4F 50 46 53 52 30 32 22 09 23 20 4C 69 6E 75 78 tion_host = “ARQOPFSR02”.# Linux
#00001520 20 41 52 51 4F 50 46 53 52 30 32 20 32 2E 36 2E 31 38 2D 31 32 38 2E 65 6C 35 20 23 31 20 53 4D ARQOPFSR02 2.6.18-128.el5 #1 SM
#00001540 50 20 57 65 64 20 44 65 63 20 31 37 20 31 31 3A 34 31 3A 33 38 20 45 53 54 20 32 30 30 38 20 78 P Wed Dec 17 11:41:38 EST 2008 x
#00001560 38 36 5F 36 34 0A 63 72 65 61 74 69 6F 6E 5F 74 69 6D 65 20 3D 20 31 32 39 31 33 36 32 37 30 37 86_64.creation_time = 1291362707
#00001580 09 23 20 46 72 69 20 44 65 63 20 20 33 20 30 38 3A 35 31 3A 34 37 20 32 30 31 30 0A 0A 00 00 00 .# Fri Dec 3 08:51:47 2010…..
#000015A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#000015C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#000015E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………………………..
#00001600 76 67 61 70 70 31 20 7B 0A 69 64 20 3D 20 22 31 74 4E 74 55 44 2D 75 68 35 61 2D 76 6B 4E 6E 2D vgapp1 {.id = “1tNtUD-uh5a-vkNn-
#00001620 55 76 76 73 2D 4D 79 4F 52 2D 72 70 30 44 2D 7A 51 44 6B 79 46 22 0A 73 65 71 6E 6F 20 3D 20 32 Uvvs-MyOR-rp0D-zQDkyF”.seqno = 2
#00001640 0A 73 74 61 74 75 73 20 3D 20 5B 22 52 45 53 49 5A 45 41 42 4C 45 22 2C 20 22 52 45 41 44 22 2C .status = [“RESIZEABLE”, “READ”,
#00001660 20 22 57 52 49 54 45 22 5D 0A 66 6C 61 67 73 20 3D 20 5B 5D 0A 65 78 74 65 6E 74 5F 73 69 7A 65 “WRITE”].flags = [].extent_size
#00001680 20 3D 20 38 31 39 32 0A 6D 61 78 5F 6C 76 20 3D 20 30 0A 6D 61 78 5F 70 76 20 3D 20 30 0A 0A 70 = 8192.max_lv = 0.max_pv = 0..p
#000016A0 68 79 73 69 63 61 6C 5F 76 6F 6C 75 6D 65 73 20 7B 0A 0A 70 76 30 20 7B 0A 69 64 20 3D 20 22 55 hysical_volumes {..pv0 {.id = “U
#########

– Buscar la dirección hexadecimal del offset que queremos, marcarla (ctrl-espacio), copiarla (esc-w) y guardarla (esc-y) con el nombre que queráis. Para salir (ctrl-c).
vgchange -an vgapp1

– Usar el UUID del fichero en la instruccion de abajo y el fichero que hemos guardado.
pvcreate -ff -u U6tSIo-9gjZ-HtQa-dYgA-uCIe-nz6f-aBrIHr –restorefile 20101014new.txt /dev/sdb
vgcfgrestore -f 20101014new.txt -v vgapp1
vgchange -ay vgapp1
e2fsck -f /dev/vgapp1/lvapp1

– Con suerte, lo tendremos recuperado 🙂

Instalar y configurar proftpd

Este es un pequeño manual para la instalación y configuración básica de un proftpd, instalar el software, dar de alta usuarios, ver un poco los permisos etc… Esta instalación esta realizada en una Fedora Core 13, pero prácticamente todos los comandos son usables en una Debian (por ejemplo) Instalación de proftpd:

[root@bluehat ~]# yum install proftpd

En una Debian será apt-get install proftpd Editamos el fichero de configuración. A diferencia que la instalación de Debian, el proftpd en Fedora no pregunta por el tipo de instalación (standalone/inetd) ni otros parámetros (nombre del servidor ftp, etc..) En este caso editamos el fichero de configuración:

[root@bluehat ~]# vim /etc/proftpd.conf

En debian /etc/proftpd/proftpd.conf Revisamos los parámetros típicos/básicos de la configuración:

ServerName                      “BluHat Ftp Server”

Mi consejo es dejar en DNS lookups en off. Lo que hace la directiva es que cada vez que te conectas, mira en el DNS si tu IP/Nombre son correctos, eso hace que si no tienes configurado un dominio o DNS correctamente detectes una lentitud muy grande en las transferencias.

# Don’t do reverse DNS lookups (hangs on DNS problems)

UseReverseDNS                   off Iniciamos el proftpd

[root@bluehat ~]# /etc/init.d/proftpd start

Ahora vamos agregar un usuario. Por ejemplo ftpuser

adduser ftpuser

modificamos su contraseña:

passwd ftpuser

Una vez agregado el usuario, este tiene permisos para acceder a una shell del sistema. Modificaremos los permisos del usuario para  que no pueda acceder. Lo que hacemos es modificar su Shell poniendo /sbin/nologin en el fichero /etc/passwd Ya tenemos creado el usuario. El acceso por defecto será su home. Esto se define en el parámetro siguiente del pproftpd.conf (la opción ~)

DefaultRoot                     ~ !adm

En Debian esta opción esta deshabilitada, solo tenemos que quitar la “#” de la politica. Si vemos que al conectarnos aparece error de usuario/contraseña invalida tendremos que mirar los logs. Aun así, lo mas seguro es que la shell que le hemos definido en /etc/passwd no exista (en el caso de Debian) tendremos que editar el fichero /etc/shells  y agregar la shell

vim /etc/shells

Si queremos hacer que el usuario tenga acceso a un directorio especifico, modificamos su home (lógicamente deberemos aplicarle los permisos adecuados para poder leer/escribir en dicho directorio por ejemplo:

ftpuser:x:501:501::/directorio_web/web_de_ftpuser:/sbin/nologin

También podemos crear un enlace simbólico en un directorio de su carpeta hacia otra. En la de destino también deberá tener permisos. ln -s /var/www/ftpuser/web/    www Lo que hará sera crear una carpeta con un enlace hacia la web (en otro directorio llamado ftpuser)



Agregar disco en Linux Fdisk y mkfs

Pasos para instalar nuestro nuevo disco duro en nuestro linux;

Añadimos  físicamente el nuevo disco duro en nuestra máquina.

Listar las particiones de nuestros discos para poder identificar nuestro nuevo disco duro:

# fdisk -l

Nos saldrá una entrada nueva con el mensaje: El disco x no contiene una tabla de particiones válida

Voy a exponer mi caso concreto, vosotros tendréis que adaptarlo a vuestro caso concreto:

En mi caso, he añadido un disco duro de VmWare de 8GB , la cola de salida del comando anterior me muestra:

Disco /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000El disco /dev/sdc no contiene una tabla de particiones válida

Tomamos nota de /dev/sdc

Si fuera un disco IDE seria HDA en vez de SDC

Si queremos particionarlo (en mi caso he creado una sola partición):

# fdisk/dev/sdc

Orden (m para obtener ayuda): m
Orden Acción
a Conmuta el indicador de iniciable
b Modifica la etiqueta de disco bsd
c Conmuta el indicador de compatibilidad con DOS
d Suprime una partición
l Lista los tipos de particiones conocidos
m Imprime este menú
n Añade una nueva partición
o Crea una nueva tabla de particiones DOS vacía
p Imprime la tabla de particiones
q Sale sin guardar los cambios
s Crea una nueva etiqueta de disco Sun
t Cambia el identificador de sistema de una partición
u Cambia las unidades de visualización/entrada
v Verifica la tabla de particiones
w Escribe la tabla en el disco y sale
x Funciones adicionales (sólo para usuarios avanzados)

Al salir darle a “w

Ahora formatearemos la partición creada:

# mkfs -t ext3 /dev/sdc

Creamos directorio de montaje:

# mkdir -p /media/hdd2

Editaremos fstab

# vim /etc/fstab

Añadiremos:

/dev/sdc /media/hdd2 ext3 defaults 0 0

(Nota: podemos cambiar defaults por otras opciones de montaje, como pot ejemplo user, más adelante escribiré sobre fstab)

Montamos:

# mount -a

Ya tenemos el nuevo dispositivo

df -h