Mostrando entradas con la etiqueta particiones. Mostrar todas las entradas
Mostrando entradas con la etiqueta particiones. Mostrar todas las entradas

Etiquetar particiones

Si bien el otro día hablamos de cómo manejar y cambiar el UUID de una partición, hoy vamos a ver cómo emplear las etiquetas (labels) para poder administrar nuestros puntos de montaje y que así tengan más significado. La idea es pasar de un /dev/sda1 a un /dev/disk/by-label/raiz. Algo más legible y entendible por cualquier persona.
Para hacerlo, lo primero que debemos es comprobar si nuestro disco tiene alguna etiqueta. Para ello,
shell> lsblk -f
NAME      FSTYPE      LABEL      MOUNTPOINT
sda                                         
├─sda1    ext4                   /boot
├─sda2    ext4                   /
└─sda3    ext4                                  
Como vemos, no hay ninguna etiqueta de nombre para las particiones. La solución está en el empleo del comando e2label, que sirve precisamente para asignarle etiquetas a las particiones. Procederemos por lo tanto como sigue,
shell> e2label /dev/sda1 boot
shell> e2label /dev/sda2 raiz
shell> e2label /dev/sda3 data
Puedes aplicar etiquetas únicamente a aquellas particiones que te interese, a mi me interesa etiquetarlas las 3 que voy a usar. Si ahora ejecutamos nuevamente el primer comando (lsblk),
shell> lsblk -f
NAME      FSTYPE      LABEL      MOUNTPOINT
sda                 
├─sda1    ext4        boot       /boot
├─sda2    ext4        raiz       /
└─sda3    ext4        data
A partir de este momento, bajo la carpeta /dev/disk/by-label existe los links a los disco y que se pueden usar, por ejemplo, para montar una partición.
shell> mount /dev/disk/by-label/data /mnt
Quizás acordarse de la nueva ruta para realizar los montajes de disco sea más complejo, pero desde luego, para saber qué es lo que se está haciendo, mucho más simple.

Referencias

Leer más

Cambiar UUID del disco

Hace ya un tiempo hablamos en este blog acerca del uso de los UUIDs y los discos. El que no sepa de qué estoy hablando, puede leer la entrada Obtener el UUID del disco. En él se indica de forma clara cómo obtener el identificador universal del disco para posteriormente trabajar con él, por ejemplo en fstab.

Cambiando UUID

Hoy vamos a dar un paso más allá y ver cómo cambiar dicho UUID. A priori, el algoritmo que se emplea para la creación de los UUID no permite que este identificador esté repetido en un mismo equipo, aunque como todo, siempre puede haber excepciones. En caso de que esto os haya pasado, sabréis que trabajar con UUIDs en un sistema con dos repetidos es imposible. En cada montaje del sistema, aparece un disco y otro y hay muchos fallos. Pues bien, la solución en esos casos no es otra que la de cambiar dicho UUID.
Con el comando blkid se puede obtener el listado de los IDs de las particiones del disco,
shell> blkid
/dev/sda1: UUID="e12c98df-7c8e-4f50-be39-e208597f71a7"
/dev/sda2: UUID="2bf49a55-f967-4fec-9127-9d049a5e7091"
/dev/sda3: UUID="a6a1fc9a-48e5-4cff-82b9-04f0afa925e3"
y también está el comando uuidgen, que permite precisamente crear "el churro" alfanumérico que se emplea como identificado.
shell> uuidgen
502eb30f-9c0c-4308-80d7-e1061ba39e4f
Para cambiar el ID de una partición debemos de emplear el comando tune2fs y pasarle el nuevo UUID que nos interese, es decir, uno aleatorio. Por lo tanto,
shell> tune2fs -U `uuidgen` /dev/sda3
tune2fs 1.42.9 (4-Feb-2014)
Y vemos ahora que los cambios han surtido el efecto deseado.
shell> blkid
/dev/sda1: UUID="e12c98df-7c8e-4f50-be39-e208597f71a7"
/dev/sda2: UUID="2bf49a55-f967-4fec-9127-9d049a5e7091"
/dev/sda3: UUID="c6dfe0b1-ceec-477b-a764-9db98439c5f9"

Referencias


Nota: La partición afectada que vayamos a cambiar debe de estar desmontada.
Leer más

Empleando pagefile en GNu/Linux

Esta entrada va dedicado a toda aquella gente que viene de sistemas Windows, acostumbrada a tener un fichero de swap en disco y que lo desea seguir manteniendo en GNU/Linux.
Por defecto, cuando se instala un sistema Linux, siempre es aconsejable y muy recomendable crear un partición de tipo swap que el sistema manejará y empleará para dicha tarea de forma automática. Si tienes varias distribuciones instaladas en el mismo equipo, todas podrán compartir dicha partición, por lo que ahorrarás bastante espacio en disco.
Sin embargo, hay veces que puedes decidir no disponer de dicha partición. Por ejemplo, si tu equipo tiene mucha memoria RAM, más de 8Gb, es raro que termines usando la swap, por lo que podrás ahorrarte ese espacio de disco que nunca lo aprovecharás. Claro que siempre terminarás por hacer alguna tarea que requiera de swap, entonces en ese momento estás fastidiado y por suerte, gracias a dd, tendrás la solución al alcance del comando ;-)
La solución no es más que imitar lo que hace Windows con el fichero pagefile.sys, es decir, crear un fichero de tamaño limitado que se empleará dinámicamente de memoria swap. Para ello, y copiando el nombre empleado por Windows para dicho fichero, podemos hacer algo tal que así,
shell> dd if=/dev/zero of=/pagefile.sys bs=4k count=2048M
Con ello acabamos de crear sobre la partición raíz de nuestro sistema un fichero, pagefile.sys, de 2Gb de tamaño. A continuación tendremos que darle formato y emplearlo como memoria swap. Primeramente formateamos,
shell> mkswap /pagefile.sys
Y a continuación lo 'montamos' como memoria swap.
shell> swapon /pagefile.sys
Este sencillo truco lo tuve que usar un par de veces el mi portátil cuando comencé a darle mucha caña, tras seguir las recomendaciones de Optimización de Linux con discos SSD y la verdad es que me pareció muy interesante compartirlo con todos.
Leer más

Desfragmentar disco en Linux

Muchas veces la gente que está acostumbrada a emplear Windows, cuando comienza en el mundo de Linux le sorprende que no haya una forma fácil de desfragmentar el disco duro, como hacía en sus épocas Windowseras. La verdad es que siempre se suele decir que los sistemas ext3 y ext4, los más empleados últimamente en el mundo GNU/Linux, especialmente de escritorio, no sufren de fragmentación. Esto es una verdad a medias, o una mentira piadosa, como prefiráis decir. Todos los sistemas de ficheros, al trabajar con ellos se fragmentan y los de GNU/Linux no iba a ser menos. Es cierto, que por el diseño se fragmentan mucho menos, pero algo también sufren.
Pues bien, si sois de lo que preferís tener el sistema siempre muy controlado y os gusta tener el disco perfectamente ordenado e4defrag es vuestra utilidad para sistemas de ficheros extN.
Lo primero es instalarla y en sistemas basados en Debian esta utilidad está dentro del paquete e2fsprogs, así que...
shell> apt-get install e2fsprogs
Tras su instalación, podemos ver el porcentaje de fragmentación que tiene una de nuestras particiones tal que así,
shell> e4defrag -c /dev/mapper/vg0-data
Fragmented files                      now/best     size/ext
1. /data/01 - El big bang.avi         283/1        1869 KB
2. /data/02 - Agujeros negros.avi     234/1        2258 KB
3. /data/04 - Estrellas.avi           215/1        2458 KB
4. /data/08 - Lunas.avi               208/1        2544 KB
5. /data/05 - Planetas.avi            197/1        2688 KB

 Total/best extents                   44846/30877
 Average size per extent              4961 KB
 Fragmentation score                  0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This device (/dev/mapper/vg0-data) does not need defragmentation.
 Done.
Lo que está aquí representado es el resultado de ejecutar el comando en el disco que tiene las "copias de seguridad" de todo aquello que veo y que tras varios años escribiendo y borrando en él, apenas hay fragmentación. Por este detalle es por lo que se suele decir que GNU/Linux no sufre de este tipo de problemas.
Por supuesto, si vuestro sistema presenta más fragmentación o algún tipo de problema, la forma de ejecutar e4defrag es la misma, simplemente sin la opción -c.
shell> e4defrag /dev/mapper/vg0-data
Según el tamaño de los ficheros y el estado del disco, le llevarán un poco más o un poco menos. Al finalizar os presentará las estadísticas y vuestro disco quedará sin la tan temida fragmentación.

Nota: Es recomendable que durante el proceso de desfragmentado se emplee el acceso a disco lo menos posible.
Leer más

LVM: Can't open /dev/sdc1 exclusively

Una vez que esa parte la tenemos solucionada, tenemos que cambiar el disco y volver a poner a funcionar el equipo con toda su capacidad. Para hacerlo, nada mejor que comprar un disco nuevo y enchufarlo al equipo. Tras ello, lo primero es crear una partición de tipo LMV (8E) y luego añadirla a volumen físico. Para ello hacemos uso de pvcreate. Y cómo no, ya puestos a tener problemas, qué mejor que seguir teniéndolos! Pues efectivamente eso es lo que nos ha sucedido. Acabamos de encontrar uno de esos fallos que no suelen suceder, pero han sucedido.
Al intentar crear el PV nos dice que ya tenemos la partición montada. ¿Será cierto?

shell> pvcreate /dev/sdc1
  Can't open /dev/sdc1 exclusively. Mounted filesystem?

shell> mount
  /dev/sda1 on /boot type ext3 (rw,noexec,nosuid,nodev)
  /dev/sda3 on / type ext3 (rw,errors=remount-ro)
  /dev/mapper/vg0-home on /home type ext3 (rw)
Todo apunta a que no está montada. Vamos entonces a ver las particiones...
shell> fdisk -l

  Disk /dev/sda: 2000.0 GB, 2000043376640 bytes
  255 heads, 63 sectors/track, 243158 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00040391

     Device Boot      Start         End      Blocks   Id  System
  /dev/sda1   *           1          62      497983+  83  Linux
  /dev/sda2              63         305     1951897+  82  Linux swap
  /dev/sda3             306         791     3903795   83  Linux
  /dev/sda4             792      243158  1946812927+  8e  Linux LVM

  Disk /dev/sdc: 2000.0 GB, 2000041279488 bytes
  255 heads, 63 sectors/track, 243157 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00000000

     Device Boot      Start         End      Blocks   Id  System
  /dev/sdc1               1      243157  1953158571   8e  Linux LVM
La partición del nuevo disco está correcta y es de tipo LVM, entonces, ¿qué está a suceder?
Para intentar averiguarlo, vamos a hacer uso del comando dmsetup, que sirve para manejar a bajo nivel la agrupación de discos. Vamos a ello,
shell> dmsetup status
  SServeRA ARRAY2         825C31A6:       0 3906330624 linear
  vg0-home:                               0 4194304    linear
  SServeRA ARRAY2         825C31A6-part1: 0 3906317142 linear

shell> dmsetup ls
  SServeRA ARRAY2         825C31A6        (254, 4)
  vg0-home                                (254, 3)
  SServeRA ARRAY2         825C31A6-part1  (254, 5)
Por lo que parece, y tras investigarlo un poco, tenemos el disco duplicado pero con diferente nombre. Al kernel ha detectado algo extraño y creó dos nombres diferentes para el dispositivo. Por esta anomalía no nos lo está dejando usar. Para solucionarlo forzamos el borrado de todas las definiciones de dispositivos y sólo volverán aquellas que estén en uso.
shell> dmsetup remove_all

shell> dmsetup ls
  vg0-home   (254, 3)
A continuación volvemos a intentar unir el nuevo disco al grupo de LVM y ya debería de funcionar.
shell> pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created

shell> pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda1
  VG Name               vg0
  PV Size               1,81 TiB / not usable 511,50 KiB
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              475296
  Free PE               469152
  Allocated PE          6144
  PV UUID               vX2z1t-nF17-p5rP-

  "/dev/sdb1" is a new physical volume of "1,82 TiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               1,82 TiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               p0ej2B-RQy2-dGGl-

La entrada LVM: Can't open /dev/sdc1 exclusively la puedes leer en El mundo en bits.
Leer más

LVM: Couldn't find device with uuid

Este error es uno de esos que no se ven muy a menudo, pero cuando sucede, pues no gusta nada. Estamos ante un sistema con dos discos o dos RAID y todo sobre una partición única de LVM. Uno de los discos tuvo un fallo hardware y ha muerto y el resultado que tenemos es que se perdió el acceso al mismo. La salida del comando pvdisplay nos lo indica lo que estoy aquí comentando.
Donde antes había un dispositivo /dev/sdc1, ahora ya no hay nada. Efectivamente el disco ha muerto y lo hay que cambiar y necesitamos resolver el problema de eliminar el "unknown device" antes de volver a reconstruir el physical volume. En la mayoría de los casos, si queremos sacar un disco del volumen, empleamos el comando pvremove, pero en este caso, ¿qué dispositivo le pasamos como argumento?. No existe ninguno, así que esa opción lo tenemos que descartar.
shell> pvdisplay
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-...
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               1,81 TiB / not usable 511,50 KiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              475296
  Free PE               0
  Allocated PE          475296
  PV UUID               vX2z1t-nF17-p5rP-...

  --- Physical volume ---
  PV Name               unknown device
  VG Name               vg0
  PV Size               1,82 TiB / not usable 1,26 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              476847
  Free PE               0
  Allocated PE          476847
  PV UUID               PB7Y0A-qhlM-qfSW-xbhv-
Toda investigar un poco acerca del estado de LVM en nuestro sistema...
shell> pvscan
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  PV /dev/sdb1        VG vg0   lvm2 [1,81 TiB / 0    free]
  PV unknown device   VG vg0   lvm2 [1,82 TiB / 0    free]
  Total: 2 [3,63 TiB] / in use: 2 [3,63 TiB] / in no VG: 0 [0   ]

shell> vgscan
  Reading all physical volumes.  This may take a while...
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  Found volume group "vg0" using metadata type lvm2
Tenemos y debemos de encontrar la solución. Si nos fijamos, nos damos cuenta que el grupo de volúmenes también detecta lo mismo, que un UUID falta y no puede acceder a dichos datos. Puesto que asumimos que el disco está perdido, vamos a sacarlo.
shell> vgreduce --removemissing vg0
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  WARNING: Partial LV srv needs to be repaired or removed.
  WARNING: Partial LV opt needs to be repaired or removed.
  WARNING: There are still partial LVs in VG vg0.
  To remove them unconditionally use: vgreduce --removemissing --force.
  Proceeding to remove empty missing PVs.
Bien, nos dice que lo podemos sacar, pero que está siendo usado actualmente por un volumen lógico. Vamos a pensar un poco: PV -> VG -> LV, de más físico a más lógico, esa es la jerarquía. Así que sí, tiene sentido tener que eliminar los LV, para poder eliminar el VG y así solucionar el problema del PV. Vamos a ello entonces,
shell> lvdisplay
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  --- Logical volume ---
  LV Name                /dev/vg0/home
  VG Name                vg0
  LV UUID                W00ijC-8T2V-0H1T-
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                2,00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:3

  --- Logical volume ---
  LV Name                /dev/vg0/srv
  VG Name                vg0
  LV UUID                6ndFCu-E5n6-3YLV-
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                2,61 TiB
  Current LE             683855
  Segments               5
  Allocation             inherit
  Read ahead sectors     auto

  --- Logical volume ---
  LV Name                /dev/vg0/opt
  VG Name                vg0
  LV UUID                cf18M0-ja1w-8iXC-
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                1,00 TiB
  Current LE             262144
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

shell> lvremove /dev/vg0/srv
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  Logical volume "srv" successfully removed

shell> lvremove /dev/vg0/opt
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  Logical volume "opt" successfully removed
Y ahora probamos nuevamente a sacar el disco perdido del grupo.
shell> vgreduce --removemissing vg0
  Couldn't find device with uuid PB7Y0A-qhlM-qfSW-xbhv-
  Wrote out consistent volume group vg0
Y comprobamos que ha funcionado correctamente.
shell> vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  22
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               4
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1,81 TiB
  PE Size               4,00 MiB
  Total PE              475296
  Alloc PE / Size       6144 / 24,00 GiB
  Free  PE / Size       469152 / 1,79 TiB
  VG UUID               FrOinx-PLi6-e040-

shell> pvscan
  PV /dev/sdb1   VG vg0   lvm2 [1,81 TiB / 1,79 TiB free]
  Total: 1 [1,81 TiB] / in use: 1 [1,81 TiB] / in no VG: 0 [0   ]
Hemos perdido datos, no por que LVM haya fallado, sino por que un disco falló. Para evitar este tipo de catástrofes están los RAID.

Leer más

Recuperación de GRUB sin Live-CD

Hace ya un tiempo hablamos de cómo poder recuperar grub en caso de que éste haya desaparecido. La forma que vimos en aquel caso era la de arrancar con una Live-CD y entrar en nuestro sistema para restaurar el grub. Esa forma está muy bien, pero tiene el problema de que cuando lo necesitamos, a lo mejor no tenemos una Live a mano. En ese caso, ¿cómo hacemos para restaurar el sistema de arranque?
Pues bien, por suerte, grub tiene un pequeño prompt que permite, entre otras muchas cosas, arrancar el sistema en caso de emergencia. Así que vamos a ver cómo hacerlo.




  1. Listamos las particiones disponibles
    Esta es la parte más complicada, puesto que es necesario saber donde está la partición /boot. Si no os acordáis, no pasa nada, en dicho prompt existe en comando ls, que lista las particiones del disco y a la vez, el contenido del mismo. En mi caso tengo esto,
    grub> ls
    (hd0) (hd0,msdos5) (hd0,msdos1)
    
    De las particiones disponibles, tenemos que saber cual es la de arranque. En mi caso, yo sabía que era la (hd0,msdos1), sino, lo que tenemos que hacer es listar los ficheros de cada una, para descubrir dónde está /boot
    grub> ls (hd0,msdos1)/
    /etc  /media /boot /usr /var ...
    
    Es MUY importante la barra final y que el nombre sea exacto, sin espacio ni nada.
  2. Configuramos dinámicamente grub
    Una vez sepamos la partición en cuestión, debemos de añadir todos los datos que grub no sabe de forma dinámica. En caso de que alguno de estos datos no lo sepamos, simplemente empleamos ls para listar el contenido que deseemos.
    grub> set prefix=(hd0,msdos1)/boot/grub1
    grub> set root=(hd0,msdos1)
    grub> linux /boot/vmlinuz-3.2.0-29-generic-pae2 root=/dev/sda13
    grub> initrd /initrd.img
    
  3. Arrancamos
    Finalmente, cuando ya todo esté configurado, simplemente arrancamos el sistema.
    grub> boot
Una vez dentro, simplemente debemos de corregir el fallo del grub que impidió que arrancase el sistema correctamente y volver a instalarlo como es debido. Este método de arranque no es para todos los días ;-)

1 Debemos de encontrar la carpeta donde está localizado el grub. Por defecto está bajo /boot, así que ésta sería una buena configuración.
2 Aquí tenemos que poner el kernel de nuestro sistema! Si no lo sabemos, podemos optar por emplear, en mi caso, ls (hd0,msdos1)/boot y nos listará los disponibles y ya copiamos el nombre.
3 También debemos en este caso poner el disco. Puesto que en mi caso, es (hd0,msdos1), hd0, significa /dev/sda y el msdos1, la primera partición, de ahí /dev/sda1. Debéis ajustar esto a vuestro sistema, aunque esto es lo más habitual
La entrada Recuperación de GRUB sin Live-CD la puedes leer en Puppet Linux.
Leer más

Recuperación de GRUB

El otro día me puse a cambiar la distribución de particiones de un equipo, ya que éste las tenía un tanto extrañas, y como resultado de eso, al cargarme la partición con el flag boot el sistema original no iba a arrancar. Todo se hacía desde una live, pero el que no arrancaría más iba a ser el sistema real, algo que no interesaba.
Aquí pasaron 2 cosas diferentes, por un lado cambié la partición con el flag boot, por lo que tuve que crear una nueva con dicho flag y por lo tanto ya tenía que reinstalar el GRUB. Por otro lado, a la vez que cambiaba todo, la partición raíz, anteriormente /dev/sda5 ahora pasaría a ser /dev/sda1. Esto lógicamente al GRUB no le iba a gustar, ya que su configuración le indicaba que el kernel se encontraba en la anterior partición. Así que para recuperar el sistema, por un lado había que restaurar el master boot record y por otro, actualizar la configuración de GRUB. La forma más sencilla que encontré para ello, un entorno chroot.
Para hacerlo, simplemente desde el live-cd montamos la partición del sistema original (en mi caso /dev/sda1) y luego hacemos un entorno chroot. Para hacerlo correctamente, vamos a emplear dispositivos del live-cd, ya que el sistema original, está apagado.
shell> mount /dev/sda1 /mnt
shell> mount --bind /dev /mnt/dev
shell> mount --bind /dev/pts /mnt/dev/pts
shell> mount --bind /proc /mnt/proc
shell> mount --bind /sys /mnt/sys
Ahora que ya tenemos todo lo necesario montado, ya podemos emplear chroot,
shell> chroot /mnt
Tras ejecutar este comando ya estamos 'dentro' del sistema operativo físico, por lo que todos los cambios que hagamos nos afectarán directamente, así que únicamente vamos a restaurar y actualizar GRUB.
En mi caso, voy a restaurar GRUB en /dev/sda, que es mi disco de arranque. Ojo a esto, el MBR es del disco y no de la partición.
shell> grub-install --boot-directory=/boot/ --recheck /dev/sda
Tras tener el GRUB ya instalado, si todo fue satisfactorio, simplemente ahora vamos a actualizar el listado de kerneles disponibles para el arranque, y sobre todo, la localización de los mismos, que recientemente se vio alterada.
shell> update-grub2
Tras ejecutar este comando, si vamos al fichero /boot/grub/grub.cfg podremos ver como sí actualizó la localización de los kerneles para arrancar. En mi caso pasó de sda5 a sda1. Ahora simplemente reiniciamos y todo debería de funcionar correctamente.

Nota: Si como yo, en vuestro sistema real tenéis algunas particiones separadas, lo mejor es que antes de lanzar el chroot tengáis todo montado. Si una de esas particiones es /boot, en ese caso es 100% necesario su montaje! Así que si tenéis particionado /usr, /var y /boot, antes de ejecutar la jaula chroot,
shell> mount /dev/sda2 /mnt/boot
shell> mount /dev/sda3 /mnt/usr
shell> mount /dev/sda4 /mnt/var

Si este artículo te pareció interesante, quizás te interese también ver cómo recuperar el GRUB sin emplear un Live-CD.
La entrada Recuperación de GRUB la puedes leer en Puppet Linux.
Leer más

Puntos de montaje, opciones

En sistemas Unix existe un fichero, /etc/fstab, que contiene todos los puntos de montaje que el sistema puede acceder. Además, también es posible montar un sistema de ficheros empleando el comando mount. El comando mount, a groso modo lo que hace es leer e interpretar cada una de las líneas de dicho fichero y montar lo que correspondan con las opciones que correspondan. Muchas de estas opciones permiten modificar el comportamiento del sistema de ficheros, mejorando el rendimiento del mismo y también ofreciendo un extra de seguridad a un nivel más bajo, el del sistema de ficheros. Las más comúnmente empleadas son:
  • noexec
    No permite la ejecución de ningún tipo de binario bajo dicho sistema de ficheros.
  • nodev
    No interpreta dispositivos de tipo dev bajo la partición. Dicho de otra forma, impide que se creen dispositivos en la partición.
  • nosuid
    No permite que los ficheros con suid o sgid tengan efecto en ese sistema de ficheros.
  • noatime
    No actualiza el tiempo de acceso a los i-nodos del sistema de ficheros.
    Esto puede resultar muy útil en caso de equipos que escriban mucho a disco, ya que evitar esta actualización, mejora el rendimiento.
  • nodiratime
    Al igual que la opción anterior, pero no de ficheros, sino de directorios.
  • noauto
    La partición, aunque presente en el fichero /etc/fstab no se monta automáticamente al arrancar el sistema. Tendrá que ser el usuario root el que la monte manualmente.
  • nofail
    No reporta fallos en caso de que el dispositivo no exista.
  • nouser
    Impide que un usuario normal, no-root, monte el sistema de ficheros. Esta es la opción por defecto para todos los sistemas de ficheros.
  • user
    Permite que un usuario no-root monte dicho sistema de ficheros. Esta opción, implica también las opciones noexec, noduid y nodev, para proteger el sistema.
/dev/sda5   /ftpdata   ext3   nosuid,nodev,noexec   1   2
Leer más

lvm, montar particiones desde disco externo

Aunque no es algo habitual encontrar un disco duro usb con particiones lvm, ésto puede ocurrir ya que con discos duros más grandes, la necesidad de modificar particiones cada vez es mayor. Por defecto al conectar el disco al sistema éste será reconocido, pero no así sus particiones de tipo lvm, por lo que no podrá ser empleado. Antes de poder montar una de las nuevas particiones, habrá, por lo tanto que activarlas para el sistema,
shell> vgchange -ay
Una vez sean descubiertos y activados los nuevos recursos lvm ya se podrán montar como siempre,
shell> mount /dev/vg1/ext_2 /mnt/usb
Leer más

Clonar particiones en red

Aunque este es un tema bastante recurrido en la red, tuve que emplearlo hace poco para rescatar un disco y me parece interesante ponerlo, para que quede constancia y así la próxima vez que lo tenga que emplear, simplemente lo veo y listo.
SI tenéis la necesidad de clonar un disco en red, la forma más simple de hacerlo es empleando netcat y dd. Del lado del cliente, es decir, del lado del equipo que tiene el disco a clonar, tenemos que ejecutar lo siguiente,
shell> dd if=/dev/vg0/home bs=1M | nc 192.168.1.33
Mientras que del lado del servidor, es decir, el equipo que va a recibir los datos de la clonación, tenemos que ejecutar,
shell> nc -l 9999 | dd of=/dev/vg0/home_ext bs=1M
Una breve explicación de lo que se va a realizar es la siguiente. Primero se ejecuta el segundo comando, para abrir el puerto 9999 y dejar que el flujo de datos que llegue se escriban en la partición home_ext. Ésta debe de existir. A continuación, se ejecuta el primer comando, para enviar todos los datos vía netcat al equipo que está a la escucha. Como se puede observar, dd nos da la clave, if es el origen de datos y of es el destino de los mismos.
Leer más

Zabbix, control de puntos de montaje

Vamos a ver cómo poder configurar en zabbix una alerta (para sistemas GNU/Linux) que compruebe y monitorice que un punto de montaje está activo. En caso contrario, que nos alerte de que no lo está.
Puesto que desde zabbix no hay un item que monitorice si un punto de montaje está o no activo, podemos simularlo. Aquí ya es trabajo de bash y la forma de hacerlo, la que cada uno prefiera. Lo vamos a realizar de forma simple, así que comencemos con un pequeño script que simule lo que nos interesa.
shell> mount |grep /var|wc -l
0
shell> mount |grep /home|wc -l
1
Como podemos observar, con un simple mount y un wc, ya sabemos si una partición está o no montada. Si devuelve 0 la partición no estará montada y si devuelve 1, ésta sí estará montada. Por lo tanto, las variaciones que zabbix tendrá que tener en cuenta son únicamente los cambios de 0 -> 1 y 1 -> 0.
Como no tenemos un item que lo realice, vamos a agregar el item al fichero de configuración de zabbix, así que al final de todo del fichero de configuración simplemente agregamos un UserParameter.
#UserParameter=,
UserParameter=system.mount.home, mount |grep /home|wc -l
Tras agregarlo, reiniciamos el servicio.
shell> service zabbix-agentd restart
Ahora lo único que falta el crear el nuevo item para el equipo o plantilla, que se encargue de monitorizarlo y el trigger correspondiente.
Vamos por lo tanto a crear un nuevo item asociado a la plantilla Linux (o al equipo que deseemos) con los siguientes datos:
Description: Mount /home
Type: Zabbix agent
Key: system.mount.home
Type of information: Numeric
Data type: Decimal
Update interval (in sec): 1800
Show value: Service state
Applications: Filesystem
Tras ello, comenzará a monitorizarse si la partición está montada o no. Puesto que lo hemos definido como en "Service state", si el valor es 0, significará que no está montada y si es 1, que sí.
Ahora sólo queda crear un pequeño trigger qué salte si el valor de la key es cero. Para ello, simplemente creamos un trigger similar al que sigue,
Name: Partición /home no montada
Expression: {Template_Linux:system.mount.home.last(10)}=0
Severity: Average
Comments: La partición /home no está montada.
Y cuando un equipo que tenga la plantilla Template_Linux no tenga la partición /home montada, saltará el trigger y por lo tanto lo podremos revisar para ver qué pasó.
Esta forma de monitorizar la partición no es 100% efectiva, ya que habría que crear muchas entradas en el fichero de configuración del agente (una para cada partición) así que veremos en otra entrada cómo poder monitorizar varias particiones con una simple entrada, es decir, pasándole parámetros.
Leer más

lvm: "connect() failed on local socket"



Tras hacer algunas pruebas y jugar un poco con lvm y la posibilidad de hacer cluster's, intenté volver al uso normal y cotidiano del mismo, pero cada vez que ejecutaba algún comando que accedía a un recurso lvm, obtenía un maravilloso error, tal como el que sigue. Aunque dicho error no impedía el funcionamiento de los volúmenes lógicos, sí era cuando menos incómodo, ya que daba la sensación de que realmente algo iba a fallar y no se sabía exactamente lo qué.



shell> lvdisplay
connect() failed on local socket: No existe el fichero o el directorio
Internal cluster locking initialisation failed.
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.

shell> vgscan
connect() failed on local socket: No existe el fichero o el directorio
Internal cluster locking initialisation failed.
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.
Reading all physical volumes.  This may take a while...
Found volume group "vg0" using metadata type lvm2
Así que puse a investigar cómo poder suprimirlo, y la mejor forma es deshacer todo lo que había hecho, es decir, puesto que estuve jugando a hacer cluster's, lo lógico es deshabilitar el uso de los mismos si ya no se tiene acceso a resto de nodos. Por lo tanto,
shell> lvmconf --disable-cluster
Y como se puede ver, ahora al ejecutar cualquier comando relacionado con lvm, ya no aparece el molesto error que da la sensación de que algo falla al acceder a los grupos. Una vez que ha desaparecido el error, sólo queda reescanear los grupos accesibles localmente, para poder así seguir usándolo. Para ello,
shell> vgchange -a n
  0 logical volume(s) in volume group "vg0" now active
shell> lvscan
  ACTIVE            '/dev/vg0/datos' [53,00 GiB] inherit
  ACTIVE            '/dev/vg0/casa'  [15,00 GiB] inherit
Y ahora, una vez que hemos detectado los dispositivos que hay, los volvemos a activar, para poder usarlos.
shell> vgchange -a y
  2 logical volume(s) in volume group "vg0" now active
shell> lvscan
  ACTIVE            '/dev/vg0/datos' [53,00 GiB] inherit
  ACTIVE            '/dev/vg0/casa'  [15,00 GiB] inherit
Leer más

Etiquetando dispositivos extraibles

Algunas veces, cuando andamos con muchos pendrive's o discos externos se nos puede dar el caso de que no sabemos dónde hay que montarlos o cual es cual. Para solucionar este pequeño problemilla, existe el comando e2label, que no hace otra cosa que escribir una etiqueta a un disco/partición y luego devolverla.
Primero vamos a ver cómo funciona.
shell> dmesg
[1224834.074274] sd 5:0:0:0: [sdf] Write Protect is off
[1224834.074278] sd 5:0:0:0: [sdf] Mode Sense: 45 00 00 08
[1224834.074281] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[1224834.075895] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[1224834.075899]  sdf: sdf1
[1224834.078146] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[1224834.078150] sd 5:0:0:0: [sdf] Attached SCSI removable disk

shell> e2label /dev/sdf1

shell> e2label /dev/sdf1 PEN_8G
shell> e2label /dev/sdf1
PEN_8G
Como se puede observar, se ha conectado un nuevo dispositivo al sistema, que fue asignado a /dev/sdf1. A continuación pedimos su etiqueta y vemos que no devuelve nada. Eso es que primeramente hay que establecerle una. Le asignamos PEN_8G. A partir de este momento ese dispositivo siempre será reconocido con ese nombre.
Ahora lo que interesa es poder usar ese nombre para montar dispositivos, para hacerlo, nos fijamos que el comando mount tiene una opción para tal efecto.
shell> man mount
...
-L label
   Mount the partition that has the specified label.
...
Probamos a realizar el montaje usando la etiqueta y vemos que es correcto!
shell> mount -L PEN_8G /mnt/nfs/
shell> mount
...
/dev/sdf1 on /mnt/nfs type ext4 (rw)
Si ahora nos interesa que siempre se monte en dicha carpeta, lo añadimos con la etiqueta al fstab y todo debería de funcionar perfectamente.
shell> vi /etc/fstab
...
LABEL=PEN_8G  /mnt/nfs  ext4  defaults  0  0
...
Espero que os gustase este pequeño truco de etiquetas.
Leer más

Usando LVM (VI): vgmerge



Siguiendo con los post's interesantes de LVM, tenemos una nueva entrega en la que vamos a comentar cómo poder unir dos grupos de volúmenes en uno único.
Los sistemas van evolucionando y puede darse el caso de donde antes era de interés dos grupos de volúmenes (vg0 y vg1) ahora es mejor tener todo el espacio unido en un único volumen. Para conseguir esto, LVM tiene las herramientas necesarias para realizar el merge de dichos vg.
Partimos por lo tanto del siguiente escenario.

shell> vgdisplay 
  --- Volume group ---
    VG Name               vg0
    System ID             
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  684
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                30
    Open LV               15
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               459,40 GiB
    PE Size               4,00 MiB
    Total PE              117606
    Alloc PE / Size       53888 / 210,50 GiB
    Free  PE / Size       63718 / 248,90 GiB
    VG UUID               XSNV2N-ACNL-TgLX-77D4-bYko-wUP6-bg3jPn
   
  --- Volume group ---
    VG Name               vg1
    System ID             
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  11
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                2
    Open LV               0
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               81,53 GiB
    PE Size               4,00 MiB
    Total PE              20871
    Alloc PE / Size       17408 / 68,00 GiB
    Free  PE / Size       3463 / 13,53 GiB
    VG UUID               6WA2Va-KNEq-7I9u-4G0G-Tsrc-6tTi-akrBbU

Para unir ambos grupos por lo tanto, usaremos el comando vgmerge, pasándole ambos como parámetro. El primero será el que "absorba" al segundo, quedando por lo tanto el primero como único.
shell> vgmerge vg0 vg1
  Logical volumes in "vg1" must be inactive

Si sale el anterior fallo mensaje, es debido a que el volumen origen de datos, vg1, está siendo usado y antes de continuar habrá de marcarlo como inactivo, para ello emplearemos el comando vgchange.
shell> vgchange -an vg1
  0 logical volume(s) in volume group "vg1" now active

Una vez deshabilitado, ya se puede realizar el merge.
shell> vgmerge vg0 vg1
  Volume group "vg1" successfully merged into "vg0"

Una vez finalizado, ya sólo existe el primer grupo.
shell> vgdisplay 
  --- Volume group ---
    VG Name               vg0
    System ID             
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  684
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                30
    Open LV               15
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               540,93 GiB
    PE Size               4,00 MiB
    Total PE              138477
    Alloc PE / Size       71296 / 278,50 GiB
    Free  PE / Size       67181 / 262,43 GiB
    VG UUID               XSNV2N-ACNL-TgLX-77D4-bYko-wUP6-bg3jPn

Si ahora vemos los volúmenes que hay, podremos observar que los todos pertenecen al vg0, pero sin embargo los que antes pertenecían al vg1, ahora su status es NOT available y por lo tanto no se podrán usar.
shell> lvdisplay
  --- Logical volume ---
    LV Name                /dev/vg0/ldap
    VG Name                vg0
    LV Status              available
    (...)

  --- Logical volume ---
    LV Name                /dev/vg0/puppet
    VG Name                vg0
    LV Status              NOT available
    (...)

Antes de usarlos, habrá que activarlos, para ello emplearemos el comando lvchange y los activamos, tal como sigue.
shell> lvchange -ay /dev/vg0/puppet
Leer más

From ext3 to ext4

Con la no tan reciente aparición del sistema de ficheros ext4 y su incorporación al kernel de forma estable, muchas de las distribuciones ya lo han adoptado como sistema de ficheros por defecto para sus particiones, sin embargo aquellos equipos que están instalados de antes y todavía tienen el sistema de ficheros en ext3, actualizarlos a ext4 puede convertirse en una odisea.
No es tan complicado como pueda parecer y con unos pocos comandos se puede logar dicha actualización, y por lo tanto la mejora de rendimiento que ext4 ofrece sin perder datos ni tener que hacer odiseas para conseguirlo. A continuación se detalla cómo hacerlo.
shell> mount
/dev/vg0/home on /home type ext3 (rw)

shell> df -h
S.ficheros      Size  Used Avail Use% Montado en
/dev/vg0/home    15G  2,9G   12G  21%      /home

shell> umount /home

shell> fsck.ext3 -pf /dev/vg0/home  
/dev/vg0/home: 51/98040 ficheros (7.6% no contiguos), 80116/332160 bloques

shell> tune2fs -O extents,uninit_bg,dir_index /dev/vg0/home
tune2fs 1.41.12 (17-May-2010)

shell> fsck.ext4 -yfD /dev/vg0/home
e2fsck 1.41.12 (17-May-2010)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 3A: Optimizando directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos

/dev/vg0/home: ***** EL SISTEMA DE FICHEROS FUE MODIFICADO *****
/dev/vg0/home: 51/98040 ficheros (7.6% no contiguos), 80116/332160 bloques

shell> mount /dev/vg0/home /home

shell> mount
/dev/vg0/home on /home type ext4 (rw)

shell> df -h
S.ficheros      Size  Used Avail Use% Montado en
/dev/vg0/home    15G  2,9G   12G  21%      /home
Esta forma de hacerlo se podría clasificar cómo un método off-line, ya que la partición está desmontada y no hay riesgo alguno. En otro post explicaré como hacer lo mismo para el punto de montaje /, del que sí que no se puede prescindir. y por lo tanto el paso de ext3 a ext4 será "en caliente".
Leer más

lvm + xen, la combinación perfecta

La importación actual de lvm es tal, que está presente para poder ser usada incluso como particiones en sistemas de vurtualización, tales como xen o virtualbox. La versión xen gratuita, en sistemas debian/ubuntu, gracias al script xen-create-image puede crear nuevos volúmenes lógicos en un grupo y usarlos para la instalación del nuevo sistema operativo.
shell> xen-create-image --lvm=vg0 \
--hostname=syslog-server \
--memory=512M \
--ip=192.168.1.100 \
--role=udev
El resultado final es una fichero de configuración de la nueva máquina sobre el que se puede observar cómo las particiones están presentes sobre volúmenes lógicos y no sobre ficheros en disco, consiguiendo así un mayor rendimiento.
Leer más

Deshabilitar el File Access Time del fs

Bajo ciertas circunstancias el rendimiento del sistema de ficheros es más importante que tener la fecha de la última escritura o del última acceso a un fichero. Por ejemplo, si el sistema de ficheros está únicamente dedicado a bases de datos (un MySQL) que necesitan mucho rendimiento de I/O, deshabilitar la escritura de acceso del sistema de ficheros puede permitirnos ganar en rendimiento.
Es por ello, que los sistemas de ficheros modernos integrados de GNU/Linux permiten deshabilitar dichas opciones cuando se montan para ser usados. Estas opciones son:
  • noatime
    no actualiza el inodo con el tiempo de acceso.
  • nodiratime
    no actualiza el inodo del directorio con el tiempo de acceso.
Y estos cambios pueden hacerse permanentemente si se escriben en /etc/fstab para que al montar la partición ya tengas estos valores por defecto, quedando tal que así.
#<file system> <mount point> <type> <options>        <dump> <pass>
/dev/sda3       /srv          xfs    noatime,nodiratime  0      0
Leer más

Usando LVM (V)

Para borrar un volumen previamente creado, usaremos lvremove.
shell> lvremove /dev/vg0/home 
Do you really want to remove active logical volume home? [y/n]: y
  Logical volume "home" successfully removed
Leer más

Usando LVM (IV)

lvm, creación avanzada de volúmenes lógicos
lvm permite crear volúmenes más a medida y especificar determinados parámetros para obtener un mejor rendimiento a la hora de crear un volumen lógico.
La forma rápida de crear un volumen es, donde se crea un nuevo volumen de 2 Gb de tamaño, llamado tmp sobre el grupo vg0.
shell> lvcreate -L 2GB -n tmp vg0

lvcreate también permite crear un nuevo volumen con porcentajes de espacio libre o total referente al grupo al que pertenezca. Por ejemplo, para crear un nuevo volumen que tenga el 25% del espacio total del grupo, sería:
shell> lvcreate -l 25%VG -n tmp vg0

Y si nos interesa crear un volumen que tenga el 50% del espacio libre que haya en ese momento...
shell> lvcreate -l 50%FREE -n tmp vg0
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios