Página 2 de 3

GlusterFS en Centos

Gluster es un sistema de archivos distribuido usado para escenarios de alta disponibilidad; a diferencia de otros sistemas de archivos es escalable. Crea volúmenes que pueden estar replicados, distribuidos, dispersos o combinaciones entre ellos.

Para este tutorial usaremos un volumen replicado para evitar la perdida de información y sobre él montar algún servicio web. Estos son los servidores en los cuales trabajaremos:

192.168.100.122 nodo1.cluster nodo1
192.168.100.127 nodo2.cluster nodo2

En este momento cada servidor cuenta con un disco duro de 20 GB en el dispositivo /dev/vdb. En él se creara la etiqueta, la partición con un sistema de archivos xfs para finalmente montarla en el directorio /gfs.

~]$ sudo parted /dev/vdb mklabel msdos
~]$ sudo parted /dev/vdb mkpart primary 0% 100%
~]$ sudo mkdir /gfs
~]$ sudo mkfs.xfs /dev/vdb1
~]$ sudo echo '/dev/vdb1 /gfs xfs defaults 1 2' >> /etc/fstab
~]$ sudo mount -a

Listo, con los comandos anteriores ya hemos montada la partición.

[root@nodo2 ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom  
vda         252:0    0    6G  0 disk 
├─vda1      252:1    0    5G  0 part 
│ ├─rl-root 253:0    0  4.4G  0 lvm  /
│ └─rl-swap 253:1    0  616M  0 lvm  [SWAP]
└─vda2      252:2    0    1G  0 part /boot
vdb         252:16   0   20G  0 disk 
└─vdb1      252:17   0   20G  0 part /gfs

Ahora toca la instalación del paquete y habilitar el servicio.

~]$ sudo yum install centos-release-gluster9
~]$ sudo yum install glusterfs-server -y
~]$ sudo systemctl enable --now glusterd

Habilitamos el servicio en el firewall.

~]$ sudo firewall-cmd --permanent --add-service=glusterfs
~]$ sudo firewall-cmd --reload

En ambos servidores creamos el directorio que servirá para almacenar la información.

~]$ sudo mkdir -p /gfs/mirror

Probamos la conexión y listamos los elementos del cluster.

[tusysadmin@nodo1 ~]$ sudo gluster peer probe nodo2
peer probe: success
[tusysadmin@nodo1 ~]$ sudo gluster peer status
Number of Peers: 1

Hostname: nodo2.cluster
Uuid: 3431cf1d-80b8-48ac-a605-9803cb2e4cf9
State: Peer in Cluster (Connected)

[tusysadmin@nodo1 ~]$ sudo gluster pool list
UUID					                Hostname   State
3431cf1d-80b8-48ac-a605-9803cb2e4cf9	nodo2.cluster	Connected 
73ae75e6-5d01-4cf5-b886-d448cd361f20	localhost    	Connected

En el nodo1 creamos e iniciamos el volumen.

~]$ sudo gluster volume create volume_mirror replica 2 nodo1.cluster:/gfs/mirror nodo2.cluster:/gfs/mirror
~]$ sudo gluster volume start volume_mirror
~]$ sudo gluster volume info volume_mirror

Volume Name: volume_mirror
Type: Replicate
Volume ID: 2dd69f3f-ae85-46ef-b0f3-ae3607dd06fc
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: nodo1.cluster:/gfs/mirror
Brick2: nodo2.cluster:/gfs/mirror
Options Reconfigured:
performance.client-io-threads: off
nfs.disable: on
transport.address-family: inet
storage.fips-mode-rchecksum: on
cluster.granular-entry-heal: on

Hasta aquí, se ha creado un sistema de archivos similar a lo que se hace con NFS, la única diferencia es que está replicado en dos equipos. Ahora hay que montarlo en un cliente. El cliente será un servidor web con Apache.

[tusysadmin@www ~]$ sudo yum install httpd
[tusysadmin@www ~]$ sudo systemctl enable --now httpd

El servidor web habrá creado el directorio /var/www en el cual montaremos nuestro sistema de archivos.

~]$ sudo mount -t glusterfs nodo1.cluster:/volume_mirror /var/www/

Con lo cual, ya tendremos nuestro sistema de archivos montado en el servidor.

[tusysadmin@www ~]$ sudo df -h
S.ficheros                   Tamaño Usados  Disp Uso% Montado en
devtmpfs                       484M      0  484M   0% /dev
tmpfs                          496M      0  496M   0% /dev/shm
tmpfs                          496M   6.9M  489M   2% /run
tmpfs                          496M      0  496M   0% /sys/fs/cgroup
/dev/mapper/centos-root        5.1G   1.5G  3.4G  32% /
/dev/vda1                      509M   163M  347M  32% /boot
nodo1.cluster:/volume_mirror    20G   238M   20G   2% /var/www
tmpfs                          100M      0  100M   0% /run/user/0

Para hacer el montado de manera automática al iniciar el servidor.

sudo echo "nodo1.cluster:/volume_mirror /var/www glusterfs defaults,_netdev 1 2" >> /etc/fstab

GlusterFS en Replica

Image 1 De 1

Al crear directorios y el archivo index.html de manera habitual en el servidor web estos son creados en los nodos. Al apagar un servidor o detener el servicio Gluster en uno de los nodos la información continua disponible en nuestro servidor web. En este caso, la única forma de perder la información del sitio sería que ambos nodos estén fuera de linea.

Expresiones Regulares

Expresar mejor que lineas utilizar en los comandos para leer texto (grep y sed) es el principal uso de los expresiones regulares. Al dominarlas, podremos extender nuestro manejo de patrones o frases a buscar.

Si por ejemplo se buscan palabras que contengan la letra D en un archivo de texto.

[tusysadmin@localhost dict]$ grep d spanish | head -n 5
abad
abada
abadejo
abadenga
abadengo

Diferente sería mostrar las palabras que inician con esa letra, para esto usamos el acento circunflejo (^).

[tusysadmin@localhost dict]$ grep ^d spanish | tail -n 5
duunviral
duunvirato
duunviro
dux
duz

Si por el contrario, buscamos las palabras que terminen con la letra D usamos el símbolo de dólar ($).

[tusysadmin@localhost dict]$ grep d$ spanish | head -n 5
abad
absurdidad
accesibilidad
accidentalidad
aceptabilidad

Es posible usar los corchetes [ ] para indicar los caracteres que pueden aparecer dentro de una determinada posición.

[tusysadmin@localhost dict]$ grep ^d[aei]s[ae] spanish | tail -n 5
disertadora
disertante
disertar
diserto
disestesia

La salida del comando anterior muestra las palabras que inician con d seguido de una de las letras a, e o i; seguido de la letra s y por último una de las letras a o e.

Exclusiones y Rangos

Si lo que se busca es decir que caracteres no queremos imprimir usamos el ^ dentro de los corchetes.

[tusysadmin@localhost dict]$  grep ^m[^aei]s[ae] spanish | tail -n5
muselina
museo
museografía
musequí
muserola

Dentro de los corchetes es posible aceptar rangos para indicar todos los valores intermedios entre valor inicial y final. Esto sustituye el tener que escribir varias letras o números.

[tusysadmin@localhost dict]$  grep ^c[l-t]s[m-z].$ spanish
cospe
costa
coste
costo

Podemos negar el contenido de los corchetes usando en circunflejo.

[tusysadmin@localhost dict]$  grep ^c[^l-t]s[m-z].$ spanish
casón
caspa
casta
casto
cesta
cesto
cisma
cisne

Expresiones Extendidas

Se trata del uso de grep con la opción -E, en Unix y en algunas distribuciones puede usarse el comando egrep pero es poco usada.

Buscar palabras que tengan letras de un determinado rango y número.

tusysadmin@localhost dict]$ grep -E '^[g-p]{8}$' spanish 
hipólogo
homólogo
homónimo
mogollón
monólogo
pimpollo
piojillo
piopollo
polígono

Las palabras mostradas tienen 8 letras y además están entre g y p. He fijado el número de letras pero pueden ser rangos; por ejemplo, entre 4 y 8.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{4,8}$' spanish | head -n 5
gilí
gnomo
gnomon
gong
gongo

Hasta 8 letras.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{,8}$' spanish | tail -n 5
pomo
pomol
pompo
pompón
pongo

Al menos 5 letras.

[tusysadmin@localhost dict]$ grep -E '^[g-p]{5,}$' spanish | head -n 5
gnomo
gnomon
gongo
himno
hinojo

Es posible el uso de expresiones extendidas para buscar todas las palabras con cierto número de letras; por ejemplo, 7.

Mostrar dos expresiones regulares.

[tusysadmin@localhost dict]$ grep -E '^a.*t$|^e.*z$' spanish 
accésit
acimut
alacet
algunt
eficaz
electriz
escasez
estupidez

Es posible la agrupación de expresiones regulares usando paréntesis o para afectar un determinado carácter en especial, ejemplo.

[tusysadmin@localhost dict]$ grep -E '(c[aeiou]){2}' spanish | head
abdicación
acacia
acacianos
acecido
acecinador

De igual forma que en ejemplos anteriores, el numero puede ser fijo o manejar mínimos y máximos. Hasta aquí el post del día de hoy, cualquier duda la pueden dejar en los comentarios.

Sustitución de Caracteres en Linux

Cuando tenemos archivos de texto y queremos dar formato simplemente abrimos el archivo en cuestión con nuestro editor de texto preferido (nano o vim) y modificamos dicho archivo. Lamentablemente, no siempre es posible hacer todo con editores de texto, para esos casos existen comandos que permiten la modificación de texto de una forma practica y sencilla.

Antes de empezar a tirar comandos es necesario saber que existen clases de caracteres.

[:alnum:] : Letras y Dígitos
[:alpha:] : Letras
[:blank:] : Espacios en Blanco
[:cntrl:] : Caracteres de control
[:digit:] : Dígitos
[:graph:] : Caracteres impresos sin incluir espacios
[:lower:] : Letras minúsculas
[:print:] : Caracteres impresos incluidos espacios
[:punct:] : Signos de puntuación
[:space:] : Espacios en blanco verticales y horizontales 
[:upper:] : Letras mayúsculas
[:xdigit:] : Dígitos Hexadecimales

Tomando como ejemplo el siguiente archivo de texto.

[tusysadmin@localhost ~]$ cat saludo.txt
Bienvenidos a Avenida Siempre Viva 742

Sustituir todos los dígitos por X.

[tusysadmin@localhost ~]$ tr [:digit:] X < saludo.txt 
Bienvenidos a Avenida Siempre Viva XXX

Sustituir las letras por el número 0.

[tusysadmin@localhost ~]$ tr [:alpha:] 0 < saludo.txt 
00000000000 0 0000000 0000000 0000 742

Sustituir los espacios en blanco por un –

[tusysadmin@localhost ~]$ tr [:blank:] - < saludo.txt 
Bienvenidos-a-Avenida-Siempre-Viva-742

Sustituir minúsculas por mayúsculas.

[tusysadmin@localhost ~]$ tr [:lower:] [:upper:]  < saludo.txt 
BIENVENIDOS A AVENIDA SIEMPRE VIVA 742

Si quisiéramos sustituir o eliminar determinadas palabras y/o lineas de un archivo como el siguiente, nos podemos apoyar con el comando sed.

[tusysadmin@localhost ~]$ cat -n navegadores.txt 
     1	Los navegadores Web facilitaron el uso de Internet,
     2	Sin ellos seguiríamos usando lineas de comandos 
     3	para conectarnos a los servicios que necesitamos.
     4	
     5	Los más conocidos son Edge, Mozilla Firefox,
     6	Opera, Safari y Google Chrome. Sin embargo, 
     7	son el resultado de la varias adaptaciones, cambios
     8	y evoluciones.
     9	
    10	El primer navegador fue WorlWideWeb pero solo 
    11	funcionaba con Next. El segundo fue Mosaic del 
    12	cual Mozilla tomó código para su desarrollo, pero 
    13	uno de los más importantes y que fue el boom de 
    14	los navegadores fue NetScape.
    15	
    16	NetScape tuvo tanto éxito que motivó la creación
    17	de Internet Explorer por parte de Microsoft. Al final,
    18	NetScape perdió la llamada guerra de los navegadores
    19	contra Internet Explorer.
    20	
    21	Hoy en día Internet Explorer se encuentra al borde de
    22	ser descontinuado para dar paso a Edge. Veremos en 
    23	el futuro que navegador logra sobrevivir.

Mostrar el último párrafo (lineas 21-23) indicando la omisión de las lineas 1-20.

[tusysadmin@localhost ~]$ cat -n navegadores.txt | sed -e '1,20d' 
    21	Hoy en día Internet Explorer se encuentra al borde de
    22	ser descontinuado para dar paso a Edge. Veremos en 
    23	el futuro que navegador logra sobrevivir.

Imprimir ciertas lineas usando la opción -p.

[tusysadmin@localhost ~]$ cat -n navegadores.txt | sed -n -e '1,3p' 
     1	Los navegadores Web facilitaron el uso de Internet,
     2	Sin ellos seguiríamos usando lineas de comandos 
     3	para conectarnos a los servicios que necesitamos.

Omitir los las lineas en blanco.

[tusysadmin@localhost ~]$  sed '/^$/d' navegadores.txt

Sustituir las líneas en blanco.

[tusysadmin@localhost ~]$  sed -e '/^$/c\#Linea en blanco' navegadores.txt
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos 
para conectarnos a los servicios que necesitamos.
#Linea en blanco 
Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo, 
son el resultado de la varias adaptaciones, cambios
y evoluciones.
#Linea en blanco 
El primer navegador fue WorlWideWeb pero solo 
funcionaba con Next. El segundo fue Mosaic del 
cual Mozilla tomó código para su desarrollo, pero 
uno de los más importantes y que fue el boom de 
los navegadores fue NetScape.
#Linea en blanco 
NetScape tuvo tanto éxito que motivó la creación
de Internet Explorer por parte de Microsoft. Al final,
NetScape perdió la llamada guerra de los navegadores
contra Internet Explorer.
#Linea en blanco 
Hoy en día Internet Explorer se encuentra al borde de
ser descontinuado para dar paso a Edge. Veremos en 
el futuro que navegador logra sobrevivir.

Este comando sustituye las lineas en donde encuentra la coincidencia, el problema es que sustituye toda la linea, si en lugar de buscar lineas en blanco hubiera buscado las palabras Internet Explorer, entonces pasaría algo como lo siguiente.

~]$ sed -e '/Internet Explorer/c\Explorer was Here' navegadores.txt
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos 
para conectarnos a los servicios que necesitamos.

Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo, 
son el resultado de la varias adaptaciones, cambios
y evoluciones.

El primer navegador fue WorlWideWeb pero solo 
funcionaba con Next. El segundo fue Mosaic del 
cual Mozilla tomó código para su desarrollo, pero 
uno de los más importantes y que fue el boom de 
los navegadores fue NetScape.

NetScape tuvo tanto éxito que motivó la creación
Explorer was Here
NetScape perdió la llamada guerra de los navegadores
Explorer was Here

Explorer was Here
ser descontinuado para dar paso a Edge. Veremos en 
el futuro que navegador logra sobrevivir.

Sustituir exclusivamente una palabra o palabras sin quitar toda la linea.

~]$ sed -e 's/Internet Explorer/Explorer Lento/g' navegadores.txt 
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos 
para conectarnos a los servicios que necesitamos.

Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo, 
son el resultado de la varias adaptaciones, cambios
y evoluciones.

El primer navegador fue WorlWideWeb pero solo 
funcionaba con Next. El segundo fue Mosaic del 
cual Mozilla tomó código para su desarrollo, pero 
uno de los más importantes y que fue el boom de 
los navegadores fue NetScape.

NetScape tuvo tanto éxito que motivó la creación
de Explorer Lento por parte de Microsoft. Al final,
NetScape perdió la llamada guerra de los navegadores
contra Explorer Lento.

Hoy en día Explorer Lento se encuentra al borde de
ser descontinuado para dar paso a Edge. Veremos en 
el futuro que navegador logra sobrevivir.

El uso de sed se extiende a las hojas de calculo, ya que es posible manejarlas como cualquier archivo de texto. Para este ejemplo generé un archivo en http://generatedata.com/ al que nombré random.csv.

[tusysadmin@localhost ~]$ cat -n random.csv 
     1	name,phone,email,country
     2	Branden Bowers,(143) 413-5107,semper.pretium.neque@hotmail.org,Sweden
     3	Sheila Reeves,(161) 474-5087,libero.et.tristique@hotmail.com,Italy
     4	Quentin Parsons,(901) 364-1366,maecenas@hotmail.couk,United States
     5	Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
     6	Denton Potter,(415) 973-8034,tempus@aol.org,Canada
     7	Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
     8	Brennan Ferguson,1-811-855-4917,augue.scelerisque.mollis@aol.couk,Ireland
     9	Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
    10	Dominic Tran,1-453-421-4797,a@hotmail.couk,Turkey
    11	Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland

Si eliminamos todos los correos con el dominio @aol debido ya que el dominio ha dejado de existir.

[tusysadmin@localhost ~]$ cat -n random.csv | grep @aol
     6	Denton Potter,(415) 973-8034,tempus@aol.org,Canada
     8	Brennan Ferguson,1-811-855-4917,augue.scelerisque.mollis@aol.couk,Ireland

De igual forma, se nos pide que modifiquemos el domino hotmail por msn.

[tusysadmin@localhost ~]$ cat -n random.csv | grep hotmail
     2	Branden Bowers,(143) 413-5107,semper.pretium.neque@hotmail.org,Sweden
     3	Sheila Reeves,(161) 474-5087,libero.et.tristique@hotmail.com,Italy
     4	Quentin Parsons,(901) 364-1366,maecenas@hotmail.couk,United States
    10	Dominic Tran,1-453-421-4797,a@hotmail.couk,Turkey

Ambas cosas pueden hacerse en una sola linea de código.

~]$ sed -e '/@aol/d' -e 's/hotmail/msn/g' random.csv 
name,phone,email,country
Branden Bowers,(143) 413-5107,semper.pretium.neque@msn.org,Sweden
Sheila Reeves,(161) 474-5087,libero.et.tristique@msn.com,Italy
Quentin Parsons,(901) 364-1366,maecenas@msn.couk,United States
Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
Dominic Tran,1-453-421-4797,a@msn.couk,Turkey
Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland

Con este simple comando borramos todas las lineas que tengan un correo con el dominio @aol y al mismo tiempo reemplazamos el dominio hotmail por msn. Para guardar los cambios en el archivo usamos la opción -i.

~]$ sed -i -e '/@aol/d' -e 's/hotmail/msn/g' random.csv 
[tusysadmin@localhost ~]$ cat -n random.csv 
     1	name,phone,email,country
     2	Branden Bowers,(143) 413-5107,semper.pretium.neque@msn.org,Sweden
     3	Sheila Reeves,(161) 474-5087,libero.et.tristique@msn.com,Italy
     4	Quentin Parsons,(901) 364-1366,maecenas@msn.couk,United States
     5	Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
     6	Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
     7	Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
     8	Dominic Tran,1-453-421-4797,a@msn.couk,Turkey
     9	Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland

Con esto llegamos al final del post cualquier duda puedes dejarla en la caja de comentarios.

Tuberías y redirecciones

La salida de los comandos que ponemos en nuestra terminal pueden ser redirigidos a un archivo o ser reutilizados por otro comando. Por ejemplo, imprimiremos en pantalla el famoso Hola mundo

[tusysadmin@localhost ~]$ echo "Hola mundo"
Hola mundo

Por otro lado, si quisiéramos mandar este mensaje a un archivo lo haríamos así:

[tusysadmin@localhost ~]$ echo "Hola mundo" > hola
[tusysadmin@localhost ~]$ cat hola 
Hola mundo

El signo > mandará la salida del comando a un archivo y sobrescribirá el contenido que tenga dicho archivo. Si lo que se quiere es conservar el contenido previo entonces usamos el doble >>.

[tusysadmin@localhost ~]$ echo "Hola mundo" >> hola
[tusysadmin@localhost ~]$ echo "Hola mundo" >> hola
[tusysadmin@localhost ~]$ echo "Hola mundo" >> hola
[tusysadmin@localhost ~]$ cat hola 
Hola mundo
Hola mundo
Hola mundo
Hola mundo
[tusysadmin@localhost ~]$ 

Las redirecciones pueden ser usadas para guardar mensajes de error usando >2 o >>2

[tusysadmin@localhost ~]$ yum install nginx 2> error.log
[tusysadmin@localhost ~]$ cat error.log 
Error: Este comando debe ejecutarse con privilegios de superusuario

Para conservar todos los mensajes de salida sin que estos se impriman en la pantalla usamos &> o &>> para evitar la sobrescritura.

Las redirecciones nos ayudan a generar archivos de logs para detectar problemas en instalaciones o ejecuciones de algún script de bash. De igual forma, pudiéramos no querer conservar ni imprimir la salida de un comando, si fuera el caso simplemente desechamos esta información mandándola a /dev/null.

[tusysadmin@localhost ~]$ du -sh /* 2> /dev/null 
0        /bin
193M     /boot
0        /dev
30M      /etc
25M      /home
0        /lib
0        /lib64
16K      /lost+found
4.0K     /media
4.0K     /mnt
8.0K     /opt
0        /proc
4.0K     /root
1.7M     /run
0        /sbin
4.0K     /srv
0        /sys
96K      /tmp
8.2G     /usr
6.0G     /var

De esta manera tenemos una impresión en pantalla limpia y sin conservar errores.

Tuberías

Las tuberías nos permite utilizar la salida de texto de un comando como entrada de otro. De esta forma podemos simplificar la salida deseada. Ejemplo, el siguiente comando muestra todos los usuarios que inician con la letra t.

[tusysadmin@localhost ~]$ grep ^t /etc/passwd 
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tusysadmin:x:1001:1001::/home/tusysadmin:/bin/bash

Como puede observarse, imprime información que no necesitamos si quisiéramos crear una lista. Para tomar este comando lo conectamos con «|»

[tusysadmin@localhost ~]$ grep ^t /etc/passwd | cut -d ":" -f1
tss
tcpdump
tusysadmin

De este modo corté todo lo que aparece antes del signo : quedando en una sola columna. Si necesitamos saber el uso en disco de los directorios de nuestro sistema ordenado de mayor a menor.

[tusysadmin@localhost ~]$ du -sh /* 2> /dev/null | sort -hr
8.2G    /usr
6.0G    /var
193M    /boot
30M     /etc
25M     /home
1.7M    /run
156K    /tmp
16K     /lost+found
8.0K    /opt
4.0K    /srv
4.0K    /root
4.0K    /mnt
4.0K    /media
0       /sys
0       /sbin
0       /proc
0       /lib64
0       /lib
0       /dev
0       /bin

Hojas de cálculo con comandos

Es posible manejar hojas de calculo con la terminal; para esto, el archivo debe ser guardado en el formato CSV (Valores Separados por Comas). Tomando como ejemplo el siguiente archivo.

Seguramente habrás notado la falta de acentos en el nombre de los autores y libros así como la mezcla de mayúsculas y minúsculas. Lo primero es por qué en bash no se aceptan acentos ni el uso de la letra Ñ y lo segundo es parte de lo que intentaremos arreglar desde nuestra terminal.

Un archivo CSV se ve así desde en nuestra terminal, intencionalmente he omitido la primer linea.

tusysadmin@localhost ~]$ cat autores.csv 
Juan Rulfo,El llano en llamas,1953
JUAN RULFO,PEDRO PARAMO,1955
GABRIEL GARCIA Marquez,La mala hora,1962
MARIO BENEDETTI,La tregua,1960
MARIO Benedetti,LA BORRA DEL CAFE,1992
Octavio Paz,Piedra del sol,1957
GABRIEL GARCIA Marquez,La hojarasca,1955
GABRIEL Garcia MARQUEZ,El coronel no tiene quien le escriba,1961
OCTAVIO PAZ,SALAMANDRA,1962
GABRIEL GARCIA MARQUEZ,El amor en los tiempos del colera,1985
GABRIEL GARCIA MARQUEZ,Del amor y otros demonios,1994
OCTAVIO PAZ,LUNA SILVESTRE,1933

Cambiar minúsculas por mayúsculas.

tusysadmin@localhost:~$ cat autores.csv | tr \[:lower:] \[:upper:]
JUAN RULFO,EL LLANO EN LLAMAS,1953
JUAN RULFO,PEDRO PARAMO,1955
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
MARIO BENEDETTI,LA TREGUA,1960
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
OCTAVIO PAZ,PIEDRA DEL SOL,1957
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
OCTAVIO PAZ,SALAMANDRA,1962
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
OCTAVIO PAZ,LUNA SILVESTRE,1933

El comando tr significa literalmente traduce. Cambia, elimina o traduce una entrada en una salida.

tr [OPTION]... SET1 [SET2]

En el caso de nuestro ejemplo, cambiara todas las letras minúsculas [:lower:] por mayúsculas [:upper:]. Usamos el carácter > para escribir la salida del comando en un nuevo archivo.

@localhost:~$ cat autores.csv | tr \[:lower:] \[:upper:] > escritores.csv
tusysadmin@localhost:~$ cat escritores.csv
JUAN RULFO,EL LLANO EN LLAMAS,1953
JUAN RULFO,PEDRO PARAMO,1955
GABRIEL GARCIA MARQUEZ ,LA MALA HORA,1962
MARIO BENEDETTI,LA TREGUA,1960
MARIO BENEDETTI ,LA BORRA DEL CAFE,1992
OCTAVIO PAZ,PIEDRA DEL SOL,1957
GABRIEL GARCIA MARQUEZ ,LA HOJARASCA,1955
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
OCTAVIO PAZ,SALAMANDRA,1962
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
OCTAVIO PAZ,LUNA SILVESTRE,1933

Ordenar csv

Orden alfabéticamente
tusysadmin@localhost:~$ sort escritores.csv
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
JUAN RULFO,EL LLANO EN LLAMAS,1953
JUAN RULFO,PEDRO PARAMO,1955
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
MARIO BENEDETTI,LA TREGUA,1960
OCTAVIO PAZ,LUNA SILVESTRE,1933
OCTAVIO PAZ,PIEDRA DEL SOL,1957
OCTAVIO PAZ,SALAMANDRA,1962

En este caso se toma como referencia la primer y segunda columna, no se continua con la tercera por tratarse de números y no se le ha indicado a sort que ordene valores numéricos. Para tomar como referencia el segunda columna.

tusysadmin@localhost:~$ sort -k 2,2 -t \, escritores.csv
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
JUAN RULFO,EL LLANO EN LLAMAS,1953
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
MARIO BENEDETTI,LA TREGUA,1960
OCTAVIO PAZ,LUNA SILVESTRE,1933
JUAN RULFO,PEDRO PARAMO,1955
OCTAVIO PAZ,PIEDRA DEL SOL,1957
OCTAVIO PAZ,SALAMANDRA,1962

Orden numérico
tusysadmin@localhost:~$ sort -n -k 3 -t \, escritores.csv
OCTAVIO PAZ,LUNA SILVESTRE,1933
JUAN RULFO,EL LLANO EN LLAMAS,1953
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
JUAN RULFO,PEDRO PARAMO,1955
OCTAVIO PAZ,PIEDRA DEL SOL,1957
MARIO BENEDETTI,LA TREGUA,1960
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
OCTAVIO PAZ,SALAMANDRA,1962
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994

La opción -n es usada para ordenar con valores numéricos, -k indica el numero de la columna usada como referencia; en este caso la tercer columna y finalmente -t para el campo delimitador.

Ahora ordenaremos por autor y estos a su vez por fecha de publicación.

tusysadmin@localhost:~$ sort -k1,1 -k3n,3 -t \, escritores.csv
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
JUAN RULFO,EL LLANO EN LLAMAS,1953
JUAN RULFO,PEDRO PARAMO,1955
MARIO BENEDETTI,LA TREGUA,1960
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
OCTAVIO PAZ,LUNA SILVESTRE,1933
OCTAVIO PAZ,PIEDRA DEL SOL,1957
OCTAVIO PAZ,SALAMANDRA,1962

En caso de que quisiéramos la más reciente publicación usamos la opción -r.

tusysadmin@localhost:~$ sort -k1,1 -k3r,3 -t \, escritores.csv
GABRIEL GARCIA MARQUEZ,DEL AMOR Y OTROS DEMONIOS,1994
GABRIEL GARCIA MARQUEZ,EL AMOR EN LOS TIEMPOS DEL COLERA,1985
GABRIEL GARCIA MARQUEZ,LA MALA HORA,1962
GABRIEL GARCIA MARQUEZ,EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
GABRIEL GARCIA MARQUEZ,LA HOJARASCA,1955
JUAN RULFO,PEDRO PARAMO,1955
JUAN RULFO,EL LLANO EN LLAMAS,1953
MARIO BENEDETTI,LA BORRA DEL CAFE,1992
MARIO BENEDETTI,LA TREGUA,1960
OCTAVIO PAZ,SALAMANDRA,1962
OCTAVIO PAZ,PIEDRA DEL SOL,1957
OCTAVIO PAZ,LUNA SILVESTRE,1933

Manejar Columnas

Si buscamos mostrar las columnas del titulo y del año de publicación.

tusysadmin@localhost:~$ cut -f 2,3 -d \, escritores.csv
EL LLANO EN LLAMAS,1953
PEDRO PARAMO,1955
LA MALA HORA,1962
LA TREGUA,1960
LA BORRA DEL CAFE,1992
PIEDRA DEL SOL,1957
LA HOJARASCA,1955
EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
SALAMANDRA,1962
EL AMOR EN LOS TIEMPOS DEL COLERA,1985
DEL AMOR Y OTROS DEMONIOS,1994
LUNA SILVESTRE,1933

La opción -d es el delimitador, en este caso la coma, con -f establecemos las columnas que se imprimirán. Si queremos que se ordenen por año de publicación podemos redirigir con un sort.

@localhost:~$ cut -f 2,3 -d \, escritores.csv | sort -k2n,2 -t \,
LUNA SILVESTRE,1933
EL LLANO EN LLAMAS,1953
LA HOJARASCA,1955
PEDRO PARAMO,1955
PIEDRA DEL SOL,1957
LA TREGUA,1960
EL CORONEL NO TIENE QUIEN LE ESCRIBA,1961
LA MALA HORA,1962
SALAMANDRA,1962
EL AMOR EN LOS TIEMPOS DEL COLERA,1985
LA BORRA DEL CAFE,1992
DEL AMOR Y OTROS DEMONIOS,1994

Si quisiéramos saber el numero de obras de cada autor en orden alfabético.

tusysadmin@localhost:~$ cut -f 1 -d \, escritores.csv | sort | uniq -c
      5 GABRIEL GARCIA MARQUEZ
      2 JUAN RULFO
      2 MARIO BENEDETTI
      3 OCTAVIO PAZ

Encontrar archivos en Linux

En ocasiones no recordamos o ignoramos el nombre exacto de un archivo o directorio que requerimos, para solucionarnos estos problemas existe el comando find.

Encontrar archivos que terminan con la extensión .log.
[root@localhost ~]# find / -type f -name *.log
Encontrar el directorio www.
[root@localhost ~]# find / -type d -name www
/var/www
Encontrar archivos que pertenecen a un usuario.
[root@localhost ~]# find /var -user apache
/var/lib/httpd
/var/cache/httpd
/var/cache/httpd/proxy
Encontrar archivos que han sido accedidos la ultima hora.
[root@localhost log]# find /etc -type f -amin -60
/etc/cups/subscriptions.conf
/etc/magic
Encontrar archivos que han sido modificados la ultima hora.
[root@localhost log]# find /etc -type f -cmin -60
/etc/cups/subscriptions.conf
/etc/cups/subscriptions.conf.O
Encontrar archivos mayores a un Giga.
[tusysadmin@localhost ~]$ find . -type f -size +1024M
./Descargas/Rocky-8.4-x86_64-minimal.iso
./Descargas/Fedora-Workstation-Live-x86_64-34-1.2.iso
./Descargas/debian-11.0.0-amd64-DVD-1.iso
./S.O/Rocky-8.4-x86_64-minimal.iso
./S.O/W10.iso
Eliminar archivos mayores de un Giga.
[tusysadmin@localhost ~]$ find . -type f -size +1024M -exec rm -f {} \;
Encontrar archivos a los que se accedió en el ultimo día.
[root@localhost ~]# find /var/log/ -type f -atime -1
/var/log/wtmp
/var/log/cron
/var/log/boot.log
/var/log/lastlog
/var/log/dnf.log
Encontrar archivos modificados en el último día.
[root@localhost log]# find /var/log/ -type f -mtime -1
/var/log/dnf.rpm.log
/var/log/sssd/sssd_implicit_files.log
/var/log/sssd/sssd.log
/var/log/sssd/sssd_nss.log
/var/log/sssd/sssd_kcm.log
Archivos modificados el último día mostrando fecha.
[root@localhost log]# find -type f -mtime -1 -exec ls -gGh --full-time '{}' \; | cut -d ' ' -f 4,5,7
2021-10-19 10:49:55.598606102 ./dnf.rpm.log
2021-10-19 08:18:41.502768614 ./sssd/sssd_implicit_files.log
2021-10-19 08:18:41.286767603 ./sssd/sssd.log
2021-10-19 08:18:41.568768923 ./sssd/sssd_nss.log
2021-10-19 08:20:12.651994923 ./sssd/sssd_kcm.log
2021-10-19 09:06:55.884383149 ./hawkey.log
Copiar logs modificados el ultimo día.
[root@localhost ~]# find /var/log/ -type f -mtime -1 -exec cp '{}' backups/  \;
Encontrar binarios.
[tusysadmin@localhost ~]$ whereis -b python
python: /usr/bin/python /usr/bin/python3.9 /usr/lib/python3.9 /usr/lib64/python3.9 /usr/include/python3.9

Montar Pool LVM para KVM

Por default KVM guarda las imágenes de los discos virtuales en /var, si dicho directorio pertenece a la partición raíz esto puede ocasionar que el disco del equipo anfitrión se llene. Para evitar este problema, las imágenes de discos virtuales pueden montarse en un Volumen Group.

Llegados a este punto he montado un disco duro de 1TB, el disco está en /dev/sda, con los siguientes comandos crearemos la tabla de partición y la etiqueta lvm.

sudo parted /dev/sda mklabel msdos
sudo parted /dev/sda mkpart primary 0% 100%
sudo parted /dev/sda set 1 lvm on

Creamos el Volumen Group.

sudo pvcreate /dev/sda1
sudo vgcreate vglab /dev/sda1
[tusysadmin@localhost ~]$ sudo vgs
  VG     #PV #LV #SN Attr   VSize    VFree   
  fedora   1   1   0 wz--n- <110.20g       0 
  vglab    1   1   0 wz--n- <931.51g <831.51g

Abrimos virt-manager y en el menú Editar seleccionamos Detalles de la conexión, en la pestaña de Almacenamiento agregamos un nuevo pool.

Podemos listar los pools disponibles en el equipo anfitrión para corroborar que ha sido exitosamente añadido.

[tusysadmin@localhost ~]$ sudo virsh pool-list
 Nombre      Estado   Inicio automático
-----------------------------------------
 default     activo   si
 s.o         activo   si
 volumenes   activo   si

Ahora, en vez de almacenar los discos virtuales en /var podrán ser guardados en un LVM, solo debemos asegurarnos de seleccionar la opción correcta al momento de crear la maquina virtual.

Administrar para crear el LVM

Image 1 De 5

Validamos la creación del LVM.

[tusysadmin@localhost ~]$ sudo lvdisplay vglab/Maquina1
  --- Logical volume ---
  LV Path                /dev/vglab/Maquina1
  LV Name                Maquina1
  VG Name                vglab
  LV UUID                vnOjXX-981U-tbej-jPQl-C6mG-ft0p-E34Ki9
  LV Write Access        read/write
  LV Creation host, time localhost, 2021-10-03 22:48:27 -0500
  LV Status              available
  # open                 1
  LV Size                30.00 GiB
  Current LE             7680
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

Instalar KVM en Fedora 34-38

KVM es un hipervisor de código abierto y libre que puede ser utilizado en la mayoría de las distribuciones Linux. Permite la emulación de interfaces de red, procesador, disco, PCI y unidades USB gracias al uso de QEMU. Aunque también puede usar XEN en caso de que se use en paravirtualización.

linux_kvm - Davoud Teimouri - Virtualization and Data Center

Primeramente validamos si nuestro equipo acepta virtualización. En algunos casos está deshabilitado en el BIOS y simplemente hay que configurarlo.

$ cat /proc/cpuinfo | egrep "vmx|svm"

Si la respuesta es positiva, continuamos con la instalación de paquetes.

sudo dnf -y install libvirt virt-install qemu-kvm virt-manager

Iniciamos y habilitamos el servicio libvirtd

sudo systemctl start libvirtd
sudo systemctl enable libvirtd

Para que nuestro usuario tenga acceso al administrador gráfico debe pertenecer al grupo libvirt.

sudo usermod -aG libvirt tusysadmin

Listo, con esto ya es posible comenzar con la instalación y administración de maquinas virtuales con nuestro usuario.

Virtual Machine Manager

Image 1 De 3

Instalar almacenamiento iSCSI en CentOS 7

Como alternativa para reducir los costos por manejar equipos de fibra óptica surgió iSCSI. Un protocolo TCP/IP de la capa de transporte que administra comandos SCSI a través de conexiones de red entre el almacenamiento y el host. No necesita equipos especiales como el caso de fibra y es relativamente fácil de implementar sobre todo en ambientes donde no existen conexiones de fibra.

Es una arquitectura Cliente-Servidor, por un lado, el iniciador puede ser una tarjeta de red estándar con software iniciador iSCSI (opción más económica) o con hardware (HBA), la diferencia radica en el rendimiento pues al hacerlo por software se involucra al CPU en las funciones de empaquetado y desempaquetado de SCSI a paquetes IP, ocasionando que el
procesamiento pueda ser un cuello de botella.

Por su parte el objetivo es el almacenamiento que comparte los recursos en
la red, estos recursos se identifican como Unidades Lógicas Únicas, LUN por sus siglas en inglés. Las LUN’s a su vez, son presentadas a los iniciadores (clientes) por medio de un Nombre Calificado ISCSI, IQN por sus siglas en inglés.

Con está base teórica, comencemos con la configuración en el siguiente ambiente:

iSCSI target:
Hostname: target.local
IP Address: 192.168.122.57

iSCSI iniciador:
Hostname: iniciador.local
IP Address: 192.168.122.222

Comenzamos en el host target.

]$ sudo yum install -y targetd targetcli
]$ sudo systemctl enable target

Habilitamos el servicio en el cortafuegos.

]$ sudo firewall-cmd --add-service=iscsi-target --permanent
]$ sudo firewall-cmd --reload
success

En este punto ya contamos con un lvm sin montar, en este caso /dev/vg1/lv1.

[tusysadmin@target ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0    7G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0    6G  0 part 
  ├─centos-root 253:0    0  5.3G  0 lvm  /
  └─centos-swap 253:1    0  716M  0 lvm  [SWAP]
vdb             252:16   0   20G  0 disk 
└─vdb1          252:17   0   20G  0 part 
  └─vg1-lv1     253:2    0   20G  0 lvm  

Lanzamos la utilidad targetcli.

[root@target ~]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls
o- / ........................................................... [...]
  o- backstores ................................................ [...]
  | o- block .................................... [Storage Objects: 0]
  | o- fileio ....................................[Storage Objects: 0]
  | o- pscsi .................................... [Storage Objects: 0]
  | o- ramdisk .................................. [Storage Objects: 0]
  o- iscsi .............................................. [Targets: 0]
  o- loopback ........................................... [Targets: 0]

Como vamos a crear un dispositivo de bloques lo hacemos dentro de backstores/block.

/> backstores/block create web_store /dev/vg1/lv1 
Created block storage object web_store using /dev/vg1/lv1.

Creamos el iSCSI Qualified Name.

/> cd iscsi
/iscsi> create iqn.2021-09.com.tusysadmin.target1:web
Created target iqn.2021-09.com.tusysadmin.target1:web.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi>

Creamos la LUN asociada al bloque web_store.

/iscsi> cd iqn.2021-09.com.tusysadmin.target1:web/tpg1/
/iscsi/iqn.20...get1:web/tpg1> luns/ create /backstores/block/web_store 
Created LUN 0.
/iscsi/iqn.20...get1:web/tpg1>

Para crear la ACL con el IQN del iniciador iSCSI.

/iscsi/iqn.20...get1:web/tpg1> acls/ create iqn.2021-09.com.tusysadmin.iniciator:web
Created Node ACL for iqn.2021-09.com.tusysadmin.iniciator:web
Created mapped LUN 0.
/iscsi/iqn.20...get1:web/tpg1> 

Salimos de la utilidad target y verificamos que el puerto 3260 esté abierto.

[root@target ~]# ss -an | grep 3260
tcp    LISTEN     0      256       *:3260                  *:*

Configurando el iniciador iSCSI

En nuestro servidor cliente instalamos el iniciador iSCSI.

tusysadmin@iniciador ~]$ sudo yum install -y iscsi-initiator-utils

Modificamos el archivo /etc/iscsi/initiatorname.iscsi y agregamos el iqn que creamos en la ACL puesto que es nombre que tiene acceso a nuestra LUN. Para finalmente realizar la conexión.

[root@iniciador ~]# iscsiadm --mode node --targetname iqn.2021-09.com.tusysadmin.target1:web --portal target.local --login 
Logging in to [iface: default, target: iqn.2021-09.com.tusysadmin.target1:web, portal: 192.168.122.57,3260] (multiple)
Login to [iface: default, target: iqn.2021-09.com.tusysadmin.target1:web, portal: 192.168.122.57,3260] successful.

Si listamos los dispositivos iSCSI usados aparece el nuevo dispositivo en /dev/sda

[root@iniciador ~]# lsscsi
[0:0:0:0]    cd/dvd  QEMU     QEMU DVD-ROM     2.5+  /dev/sr0 
[6:0:0:0]    disk    LIO-ORG  web_store        4.0   /dev/sda 

En este punto la partición puede ser montada como sistema de archivos o como lvm, eso ya dependerá del uso deseado.

Extender Volumen

En una entrada anterior se configuraron tres discos para crear un VG (Volumen Group) y sobre él dos volúmenes con diferentes sistemas de archivos, en esta entrada agregaremos un nuevo disco que permita incrementar el tamaño del VG y a su vez el de los volúmenes.

Hasta el momento esta es la configuración de los discos en donde están montadas las particiones, el volumen lv1 tiene un sistema de archivos ext4 y el volumen lv2 xfs.

[tusysadmin@lvm ~]$ sudo lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom  
vda             252:0    0    7G  0 disk 
├─vda1          252:1    0    1G  0 part /boot
└─vda2          252:2    0    6G  0 part 
  ├─centos-root 253:0    0  5.3G  0 lvm  /
  └─centos-swap 253:1    0  716M  0 lvm  [SWAP]
vdb             252:16   0   10G  0 disk 
└─vdb1          252:17   0   10G  0 part 
  └─vg1-lv1     253:2    0   12G  0 lvm  /lv1
vdc             252:32   0   10G  0 disk 
└─vdc1          252:33   0   10G  0 part 
  ├─vg1-lv1     253:2    0   12G  0 lvm  /lv1
  └─vg1-lv2     253:3    0   12G  0 lvm  /lv2
vdd             252:48   0   10G  0 disk 
└─vdd1          252:49   0   10G  0 part 
  └─vg1-lv2     253:3    0   12G  0 lvm  /lv2

[tusysadmin@lvm ~]$ sudo blkid | grep lv
/dev/mapper/vg1-lv1: UUID="53912dab-4d9d-4449-b366-aee3766c42c6" TYPE="ext4" 
/dev/mapper/vg1-lv2: UUID="14928bc2-7382-43e5-9f55-579e4115eaf1" TYPE="xfs"

El Volumen Group vg1 aun cuenta con espacio suficiente como para extender los volúmenes lógicos pero en esta entrada anexaremos la parte de agregar más discos para crecer el VG.

[tusysadmin@lvm ~]$ sudo vgs vg1
  VG  #PV #LV #SN Attr   VSize   VFree 
  vg1   3   2   0 wz--n- <29.99g <5.99g
[tusysadmin@lvm ~]$ 

Al esquema anterior se le ha agregado un disco de 5GB que está en el dispositivo vde. Como siempre, se crea la tabla de particiones y la etiqueta de lvm.

sudo parted /dev/vdb mklabel msdos
sudo parted /dev/vdb mkpart primary 0% 100%
sudo parted /dev/vdb set 1 lvm on

Para después agregar esta nueva partición al VG.

sudo vgextend vg1 /dev/vde1
[tusysadmin@lvm ~]$ sudo vgs vg1
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg1   4   2   0 wz--n- 34.98g 10.98g

Como puede verse, el tamaño del VG aumentó y ya se cuenta con 10.98G para extender los volúmenes, en este momento son de 12G cada uno.

sudo lvs vg1
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-ao---- 12.00g                                                    
  lv2  vg1 -wi-ao---- 12.00g  

Para conservar equidad, a cada volumen se le asignan 5G.

sudo lvextend -L+5G /dev/vg1/lv1
sudo lvextend -L+5G /dev/vg1/lv2

Finalmente, se incrementan los sistemas de archivos, primero ext4.

sudo resize2fs /dev/vg1/lv1 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lv1 is mounted on /lv1; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/vg1/lv1 is now 4456448 blocks long.

Después incrementamos xfs.

sudo xfs_growfs /dev/vg1/lv2
meta-data=/dev/mapper/vg1-lv2    isize=512    agcount=4, agsize=786432 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=3145728, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 3145728 to 4456448

Al revisar el espacio usado encontramos ambos volúmenes con su respectivo tamaño.

[tusysadmin@lvm ~]$ df -h
S.ficheros              Tamaño Usados  Disp Uso% Montado en
devtmpfs                  485M      0  485M   0% /dev
tmpfs                     496M      0  496M   0% /dev/shm
tmpfs                     496M   6.9M  489M   2% /run
tmpfs                     496M      0  496M   0% /sys/fs/cgroup
/dev/mapper/centos-root   5.1G   1.5G  3.4G  32% /
/dev/vda1                 976M   168M  742M  19% /boot
/dev/mapper/vg1-lv1        17G    44M   16G   1% /lv1
/dev/mapper/vg1-lv2        17G    33M   17G   1% /lv2
tmpfs                     100M      0  100M   0% /run/user/1000

« Entradas anteriores Entradas siguientes »

© 2025

Tema por Anders NorenArriba ↑