domingo, 12 de enero de 2014

Linux: particiones en sistemas EFI y en sistemas BIOS. Particionado MBR y GPT.

En este artículo, voy a tratar el tema de las particiones. Algunas de estas particiones son recomendables en un sistema GNU/Linux, y dependen en gran medida de nuestras necesidades. A esas particiones, las llamaré particiones del sistema.
Otras sin embargo, son obligatorias y vienen impuestas por el firmware de nuestra máquina (EFI o BIOS), así como por el método de particionado que hayamos elegido (MBR o GPT).


En este artículo, verás que hablo de particiones, cuando ni siquiera el sistema operativo está instalado. Puedes acceder a herramientas de particionado que vengan en un liveCD. Por ejemplo, knoppix es una distribución GNU/Linux cuyo fin es ser usada siempre como liveCD. Está basada en debian y viene con un montón de herramientas útiles para administradores de sistemas. Otra que también es buenísima es System Rescue CD, basada en gentoo, también es un live CD que no debería faltar en el arsenal de ningún administrador de sistemas Linux.

Mientras lees este artículo, te recomiendo que le eches un vistazo al mapa conceptual que he preparado. Es una forma más visual de ver la información que publico en este artículo: aqui


1. SISTEMAS DE PARTICIONADO: MBR Y GPT.

Actualmente existen dos sistemas de tablas de particiones: Master Boot Record (MBR) y GUID Partition Table (GPT).
MBR: Se suele llamar registro de arranque principal o registro de arranque maestro al primer sector de un disco duro. A menudo se llama sector de arranque del disco a los primero 512 bytes de un disco.
Esta región se suele utilizar para albergar código en lenguaje máquina, necesario para el arranque del sistema operativo, o bien para almacenar una tabla de particiones del disco.
El MBR utiliza BIOS y las direcciones físicas de la unidad del disco duro para especificar las particiones. A este sistema de direccionamiento se lo llama CHS (Cilindro Cabeza Sector).
Cuando el equipo finaliza la inicialización a través de BIOS, comprueba el MBR para la obtener información del sistema de arranque. En función de lo que contenga el MBR, el equipo inicia el sistema operativo principal o presenta una lista de arranque de sistemas operativos presentes en el equipo.

GPT: GUID partition table. Nace como una parte del estándar EFI, para la colocación de las particiones en un disco duro, superando las limitaciones tecnológicas de MBR en sistemas BIOS tradicionales.
A diferencia de MBR, que albergaba un binario para identificar la partición activa e iniciar el sistema, GPT utiliza las capacidades EFI para dichos procesos, haciendo innecesario el chainloading en máquinas con múltiples sistemas instalados.
Consta de una tabla de particiones al principio del disco, cuya primera entrada es MBR para mantener la compatibilidad con los viejos sistemas PC BIOS.
A diferencia de MBR, que utilizaba un direccionamiento a las unidades físicas del disco duro, GPT utiliza un sistema de direccionamiento lógico llamado LBA (Logical Block Addressing).
LBA 0  contiene la información del MBR heredado. LBA 1 contiene la cabecera de la tabla de particiones y el GUID del disco. LBAs 2 al 33 contiene las entradas para las particiones, en las que se indica el tamaño y GUID de cada partición.
LBA 34 en adelante --> espacio usable en el disco.

A efectos del usuario, las diferencias entre MBR y GPT es que MBR no soporta más de 4 particiones primarias, que no pueden exceder de 2,2 TB, es decir, que como mucho, puede gestionar discos de 8,8 TB.
Mientras que GPT soporta hasta 128 particiones primarias, cada una de hasta 256TB. Dicho de otro modo, con GPT, desaparece la limitación de las 3 particiones primarias y una extendida con a su vez un cierto número de particiones lógicas.


2. PARTICIONES IMPUESTAS POR EL FIRMWARE
Además de la partición  o particiones donde queramos instalar los sistemas operativos (en caso de arranques duales), tendremos que particionar el disco duro de una determinada manera en función del firmware de nuestro equipo y de si queremos utilizar MBR o GPT.

2.1. SISTEMAS BIOS

2.1.1. TABLA  DE PARTICIONES MBR
Generalmente, el espacio utilizable en disco después de la tabla de particiones y antes de la primera partición es de 31KB. Si hay algún problema de alineación de los cilindros se resuelven en la tabla de particiones. Sin embargo, si vas a usar GNU Grub como gestor de arranque, se recomienda dejar un espacio de 1MB sin particionar entre el MBR y la primera partición, para contener el core.img.
Es importante utilizar una herramienta de particionado que permita alinear las particiones a 1MB después del MBR. En este caso recomiendo fdisk.

2.1.2. TABLA DE PARTICIONES GPT
Algunas BIOS soportan tablas de particiones GPT. En estos casos, si vas a usar GNU Grub como gestor de arranque, necesitas crear una BIOS Boot Partition.

NO es posible usar BIOS-GPT si piensas tener un arranque dual con windows, ya que si windows detecta una tabla de particiones GPT, intentará arrancar en modo (U)EFI.

Las características de una BIOS Boot Partition son:
  • Tamaño 1007KB --> ya se encargará gdisk de alinear la partición a 1024KB.
  • Sin sistema de ficheros.
  • Código de partición ef02 al crearla con gdisk.
  •  El GUID de la partición siempre es: 21686148-6449-6e6f-744e656564454649
  • debes tener hecha esta partición antes de ejectutar #grub-install o #grub-setup.
  • No es necesario que esté al principio del disco, pero es recomendable que esté dentro de los primeros 2TB del disco.
Cuando GRUB encuentra una BIOS Boot Partition durante su instalación, automáticamente escribirá en ella su core.img.

Nota: syslinux NO necesita una BIOS Boot Partition

2.2. SISTEMAS (U)EFI

En este caso, es recomendable usar siempre una tabla de particiones GPT. Además, con firmware EFI, es muy importante contar con una partición especial llamada EFI System Partition (EFS). La EFS es necesaria para que el firmware EFI lance sus aplicaciones. En esta partición residirán los cargadores de los sistemas operativos instalados, haciendo innecesario chainloading en los casos de arranques duales.

Características de una EFI System Partition:
  • Debe ser la primera partición del disco.
  • Tamaño recomendado: Alrededor de 1GB
  • Código de la partición: EF00 ó ef00 si usas gdisk , o bien, con la etiqueta boot, (no confundir con legacy_boot), en caso de que uses GNU parted para crearla.
  • El GUID de la EFS, siempre va a ser: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  • Debe estar formateada en FAT32.
Para comprobar si tienes una EFI System Partition creada en tu sistema:
#parted /dev/sdX print --> estás buscando una partición vfat 32 de entre 256MB y 1GB aproximadamente con la etiqueta  "boot" activada. Dentro de esta partición debes tener una carpeta llamada "EFI". Si se cumplen estos requisitos, deberías memorizar el número de esta partición, para poder montarla más adelanta para instalar GRUB o syslinux en ella.

  3. PARTICIONES DEL SISTEMA.

Una vez creadas la EFI System Partition, o la BIOS Boot Partition, hay que pensar en las particiones que van a necesitar los sistemas operativos.
En caso de que pienses tener arranque dual con windows, debes instalar primero windows, y dejar espacio en el disco duro para instalar tu sistema GNU/Linux a continuación.

Las particiones que se recomiendan para Linux son las siguientes:
  • /boot --> tamaño recomendado 256MB. Sistema de ficheros: ext4 para tablas de particiones GPT o ext2 para tablas de particiones MBR.
  •  swap --> en sistemas con mucha carga de trabajo, si la memoria RAM es insuficiente, el sistema escribe en una partición swap, que hará de soporte para la memoria virtual.
    El tamaño recomendado para dicha partición depende de dos factores: la cantidad de memoria RAM que tengas en tu sistema y la carga de trabajo del mismo. En la wiki de Fedora, ponen esta tabla a título orientativo:
  • / --> sistema de ficheros ext4. Tamaño recomendado, de 15-20GB.
  • /var --> Si vas a tener un servidor de bases de datos, o un servidor de correo electrónico, un servidor FTP... Es recomendable tener una partición separada para /var. El motivo es que en este directorio se almacenan los logs del sistema. Estos ficheros de logs tienden a crecer considerablemente. En una base de datos, por ejemplo, cada transacción que se realiza genera entradas en el log de la base de datos. Si no llevas a cabo una buena política de administración del sistema, o en caso de que tu servidor sea atacado, esos ficheros de logs crecen y crecen, pudiendo llegar a ocupar todo el espacio de la partición. Si no separas esta partición, los logs podrían llegar a consumir todo el espacio en disco, y el sistema podría incluso no llegar a arrancar, ya que durante el arranque, linux escribe y lee también en la partición raíz.
    El tamaño recomendado va del 40% al 60% del espacio en disco restante después de haber creado la partición raíz.
    El sistema de ficheros recomendado también es ext4.
  • /home --> sistema de ficheros ext4. Tamaño: el resto del espacio en disco del que dispongas.
  • /datos o bien /media/datos --> puede ser útil crear una partición de este tipo para compartir ficheros con otros usuarios del sistema, o para almacenar colecciones de música, y videos. Sistema de ficheros ext4. Tamaño: el que te quede después de haber creado todas las particiones anteriores.

 4. CREANDO LAS PARTICIONES
Si no tieneis ningún sistema operativo instalado en el equipo porque  lo acabais de comprar o habeis formateado el disco, o el disco duro es nuevo, recordad que todas las herramientas de particionado que voy a utilizar aquí, las teneis en distribuciones GNU/Linux que funcionan en LiveCD, antes os hablaba de knoppix y de SystemRescueCD. Yo utilizaré SystemRescueCD.
Al arrancar el equipo con el cd de SystemRescueCD, nos saldrá un menú de GRUB, elegimos la primera entrada, y el sistema comenzará a arrancar.
A continuación, nos pregunta qué distribución de teclado preferimos, por defecto, la distribución es estadounidense, para especificar que usamos un teclado con distribución de España, el código es el 13. Ponemos 13 y le damos a enter:


4.1. Creando tabla de particiones GPT con gdisk
En este caso, voy a crear la EFI System Partition, una partición swap, y una partición raíz para el sistema. Para crear otras particiones como /boot, /home, /var... El proceso es exáctamente igual que el que voy a seguir para la partición /, de manera que no tiene mucho sentido hacer lo mismo 4 veces. Lo hago una a modo de ejemplo, y listo ;)

Lo primero será ver qué discos duros tengo, o cómo los ha llamado el sistema:
# ls /dev/sd*
En mi caso, /dev/sda. Suponiendo que tengamos más discos duros conectados, es obvio que nos interesa saber cuál es cual para no particionar y formatear el disco duro equivocado, para ello:
# fdisk -l /dev/sda


Una vez sabemos qué disco duro queremos particionar, crearemos una tabla de particiones GPT con gdisk.

A continuación, ejecutamos gdisk pasándole como argumento el disco que queremos particionar. Si tu disco ya tenía una tabla de particiones MBR, nos presentará un mensaje rodeado de asteriscos, indicándonos que ha encontrado una tabla de particiones MBR. En caso de que tu disco no tenga hecha ninguna tabla de particiones, nos dirá que no ha encontrado ninguna tabla de particiones.
Además, gdisk nos va ayudando en todo momento: nos muestra un prompt en el que nos pide un comando, y nos indica que si no sabemos, podemos teclear `?' para obtener una lista de los comandos disponibles:


Para comprobar que efectivamente estoy trabajando en el disco que quiero formatear, puedo usar el comando `p' para imprimir la tabla de particiones de ese disco:


De momento, las opciones que más nos interesan son:
d --> elimina una partición existente
n --> crea una nueva partición
o --> crea una tabla de particiones GPT vacia
l --> imprime una lista de los tipos de particiones existentes (muy importante)
q --> sale de gdisk sin guardar los cambios que se hayan hecho en el disco
w --> escribe los cambios que hayamos hecho con gdisk en el disco.
si te paren a pedos eso aumenta la probabilidad de decir ciertas tontadas xDDDD
Si en tu disco había hechas algunas particiones, debes eliminarlas usando la orden `d'

Antes de lanzarnos a crear particiones, debemos conocer qué tipos de particiones se pueden hacer. La orden `l', lista todos los tipos de particiones conocidos y sus códigos correspondientes en gdisk, os sugiero que os anoteis en algún lado los códigos que vayais a necesitar para cada partición:

Os he marcado en rojo los más importantes:
  • BIOS Boot Partition: ef02--> Para equipos con firmware BIOS que soportan GPT.
  • EFI System Partition: ef01 --> Equipos con firmware EFI y tablas de particiones GPT.
  • Linux swap: 8200 ---> Particiones swap
  • Linux filesystem: 8300 ---> Para las particiones del sistema (/, /boot, /var, /home...)

También os marco en naranja otras que son importantes dependiendo de si quereis implementar un array de discos, o recurrir a volúmenes lógicos en lugar del típico sistema de particiones:
  • array de discos: fd00
  • volúmenes lógicos: 8e00

Dicha toda esta parrafada, empecemos:
1. Creamos una nueva tabla de particiones GPT vacia: orden `o'. Nos advierte de que se eliminarán todas las particiones, y que se creará un MBR de protección, lo cual es lógico:






2. Creamos la EFI System Partition. Orden `n'. Número de partición 1. Sector de inicio: por defecto 2048. Tamaño 1GB, código ef00 (es la primera partición que debemos crear).


2. Creamos la partición swap. Órden `n'. Número de partición: 2, sector de inicio: por defecto (gdisk alinea sólo las particiones). Tamaño, el de tu memoria RAM (aproximadamente). Código de partición 8200


3. Creamos las particiones del sistema. Órden `n'. Número de partición:3. Sector de inicio (por defecto). Tamaño, lo que le quieras dar, esto ya son particiones del sistema. Código de partición, en mi caso linux filesystem: 8300, pero vamos, que puedes crear un tipo de partición especial para RAID, LVM, etc.


Para asegurarnos de que lo hemos hecho bien, podemos imprimir la tabla de particiones: orden `p':



Una vez comprobado que todo está bien, salimos de gdisk guardando los cambios en el disco --> Orden `w' --> nos indica que se van a escribir las particiones en el disco, nos pide que confirmemos.


4.2. Creando tabla de particiones MBR con fdisk

Quiero crear una tabla de particiones MBR en un disco de mi sistema, en mi caso va a ser el disco /dev/sdb. Para ello:
# fdisk /dev/sdb
fdisk nos ayuda, tenemos a nuestra disposición una lista de los comandos que admite, pulsando `m' y `enter' en el prompt que nos aparece:
`n' --> crea una nueva partición
`d' --> elimina una partición ya existente
`o' --> escribe una nueva tabla de particiones MBR en el disco.
`l' --> lisa los tipos de particiones que se pueden crear con fdisk
`w' --> escribe los cambios en el disco y termina
`q' --> sale de fdisk sin guardar los cambios al disco
`m' --> imprime el menú de comandos disponibles


Como quiero crear una nueva tabla de particiones MBR --> orden `o':

Una vez hecho esto, ahora voy a crear las particiones del sistema: una para /boot, otra partición swap, otra para / y otra para /home.

Es importante, listar los tipos de particiones que se pueden crear con fdisk y anotarnos los códigos de las mismas: orden `l'
  • FAT 32 --> código: b
  • Sistema de ficheros Linux --> código 83
  • Partición swap para Linux --> código 82
  • LVM para Linux --> código 8e
  • RAID para Linux --> código fd

Digimos al principio del artículo, que en sistemas BIOS con tablas de particiones MBR, era recomendable dejar un espacio de aproximadamente 1MB entre el MBR y la primera partición, para almacenar en él el core.img de GNU/Grub.

Nota:  Un sector de un disco duro es la sección de la superficie del mismo que corresponde al área encerrada entre dos líneas radiales de una pista.
Pueden almacenar una cantidad fija de bytes, generalmente suele ser de 0,5 KB hasta 64 KB. Así pues, un sector, como mínimo, contiene 0.5KB. Por tanto, 2048 sectores x 0.5 KB/sector = 1024 KB= 1MB, que es exáctamente lo recomendado para alojar el core.img. Como veremos a continuación, al particionar un disco con fdisk, por defecto el primer sector disponible, para empezar a crear nuevas particiones es el 2048. Luego, el espacio de 1MB requerido entre el MBR y la primera partición del disco, está asegurado sin que nos tengamos que preocupar de nada.


Creamos la primera partición. Orden `n'. tipo de partición: primaria `p'. Número de partición: `1'. Inicio: sector 2048 (por defecto). Tamaño: el de tu memoria RAM (aproximadamente):

Esta partición 1, va a ser mi partición swap, así que ahora utilizo la orden `t' para cambiar el tipo de partición, y le asigno el código 82, que corresponde a una partición Linux swap:

Como podeis ver en la imagen anterior, fdisk asigna por defecto el tipo de partición a linux.
A continuación creo la partición 2, que será para /boot. Para las particiones /, /var y /home, el proceso es análogo. Eso si, teneis que tener la precaución de que MBR sólo os permite 4 particiones primarias, de manera que si vais a necesitar más de 4 particiones, tendreis que crear 3 primarias, la 4 partición hacerla extendida, y ya dentro de esa partición, podreís crear las particiones lógicas que deseeis:

A continación, guardamos los cambios en el disco y salimos. Para ello, usaremos la orden `w'.

5. DANDO FORMATO A LAS PARTICIONES con mkfs

Como dijimos, en sistemas BIOS  con tablas de particiones GPT, había que crear una BIOS Boot Partition, pero a este tipo de partición, no hay que darle formato.

EFI System Partition --> formato FAT 32:
# mkfs.fat -F32 /dev/sda1    (sustituye sda1 por la que sea en tu sistema)
En caso de que os salga un mensaje como este:
Warning: not enough cluster for a 32 bit FAT!
Tendrás que reducir el tamaño del clúster, de lo contrario la partición puede ser ilegible por UEFI. Para ello, usa este comando:

  # mkfs.fat -S2 -F32 /dev/sda1    (sustituye sda1 por la que sea en tu sistema)  
 o bien:
  # mkfs.fat -S1 -F32 /dev/sda1
 
Si tu partición swap es /dev/sda2
  # mkswap /dev/sda2

Particiones del sistema cuyo formato es extX, por ejemplo, ext4:
   # mkfs.ext4 /dev/sda3

Eso es todo, espero que os resulte muy útil

domingo, 29 de diciembre de 2013

Linux: cómo saber el UUID de tus discos o particiones, incluso desde grub.

A veces nos encontramos con que necesitamos conocer el uuid de un disco duro o una partición. A menudo porque se ha producido algún fallo en grub, quizás por redimensionar una partición, cambiar un disco duro, etc. Aquí tienes distintas formas para ver cómo averiguar el uuid asociado a una partición.

1. Desde grub ---> útil si no carga el kernel y el sistema no arranca.

 En este caso, podemos acceder a la consola de comandos de grub. Al encender el pc, cuando aparece el menú de grub, pulsamos la tecla [e]. A continuación, veremos algo como esto:


A continuación, entramos en la consola de comandos de grub pulsando [Ctrl]-[c].

Es importante que sepas que grub siempre llama a las particiones y discos duros de la sigiente forma:

(hdX,tipo_particionY) ---> fíjate que va entre paréntesis.
  •  hd es el disco duro, siendo "X" un número entero mayor o igual que 0. hd0 será el disco duro 1, hd1 será el disco duro 2.... No importa si tu disco duro es scsi, sata o ata, grub siempre lo va a llamar hd.
  • tipo_particionY ---> "Y" es un numero entero mayor o igual a 1. Que indica un numero de partición dentro de un disco duro cualquiera. En cuanto al tipo de partición, si tu placa base usa BIOS, tu esquema de particionado será del tipo MBR, y por tanto, casi seguro que el tipo de partición sea msdos. En sistemas EFI, es probable que hayas seguido un esquema de particionado GPT, y que tus particiones sean del tipo gpt.
  • Así pues la partición (hd0,msdos1) (hd0,msdos2) serían dos particiones del disco duro hd0 particionado con esquema MBR.
Una vez en la consola de comandos de grub, usamos el comando ls :
        1. grub> ls           #esto de listará las particiones de tu sistema:

 



Supongamos que quiero saber el uuid de la particion (hd0,msdos2):
        2. grub> ls (hd0,msdos2)

 

2. Desde el sistema  operativo.

  • $ sudo blkid
  • $ sudo ls -l /dev/disk/by-uuid


  • El archivo /etc/fstab ---> muestra las particiones que el sistema operativo monta al inicio, y sus uuids respectivas. Si añades un disco duro a tu equipo y quieres que el sistema lo monte al inicio, tendrás que añadir esa nueva partición a este archivo editándolo.
    $ cat /etc/fstab





Espero que te sirva ;)

jueves, 7 de febrero de 2013

opensuse12.2: instalación de bumblebee 3.0.1 + drivers de nvidia. Para tarjetas Nvidia con tecnología optimus

Hola a todos!
La semana pasada me instalé opensuse en mi portátil. Intenté instalar bumblebee para dar soporte a la tecnología optimus pero... Tuve que leer mucha documentación y mirar en demasiados sitios. Es curioso: la documentación que en ubuntu se encuentra en miles de blogs, en opensuse escasea. Se nota que somos menos usuarios los de opensuse. Pero bastantes menos, diría yo.

El motivo que me ha llevado a publicar esta entrada es que la mayoría de los posts que he visto en foros dedicados a opensuse están desactualizados: hablan de paquetes que ya ni existen y casi siempre, los repositorios que proporcionan para instalar bumblebee es para la versión 2.4 del mismo. Esto puede crear confusiones e incluso instalaciones fallidas por no existir ya paquetes esenciales para esas versiones viejas de bumblebee.
Por otro lado, bumblebee 3.0 ha sido programado en C y eso le da un mejor desempeño que versiones más viejas del mismo.

En mi caso, voy a utilizar los drivers de nvidia. El motivo es que con los de nouveau no me funcionó correctamente. Bumblebee arrancaba pero por alguna razón nouveau no gestionaba mi gráfica nvidia.

1º. Consideraciones generales:
  •  Si tu portátil es un lenovo, puede que ésta guia no te sirva. Deberías consultar también estos dos enlaces:
  • Parto desde una instalación limpia de opensuse12.2. Es decir, hasta ahora, sólo he ejecutado dos comandos:
    • $ sudo zypper refresh
    • $ sudo zypper update (fíjate que no he añadido ningún repositorio. Ni siquiera packman o libdvdcss).
  • Mi portátil es un ASUS N53S.
  • Mis tarjetas gráficas: la implementada por intel y una nvidia GT540M.

2º. Desinstala el driver de nouveau y por si acaso, lo añades a la blacklist:

  • Para añadir el driver nouveau a la blacklist:
    • $ gnomesu gedit /etc/modprobe.d/50-blacklist.conf
      Das tu clave de admin e introduces esta linea:
      blacklikst nouveau
      (guarda los cambios y te sales de gedit)
     
  • Elimina el driver de nouveau y reinicia:
    •  $ sudo zypper rm xorg-x11-driver-video-nouveau && sudo /sbin/reboot
 3º. Añade los repositorios de nvidia e instala paquetes:
  • Añade el repositorio de nvidia latest opensuse-factory, refresca e instala:
    • $ sudo zypper ar -f http://download.opensuse.org/repositories/home:/Bumblebee-Project:/nVidia:/latest/openSUSE_Factory/ repo-nvidia-latest
    • $ sudo zypper refresh
    • $ sudo zypper in dkms
    • $sudo zypper in nvidia-compute x11-video-nvidia (Te dirá que va a instalar automáticamente estos paquetes: dkms-nvidia  nvidia-compute x11-video-nvidia x11-video-nvidia-devel ; acepta las dependencias).
    • Llegados a este punto, es posible que veas durante la instalación de los drivers un mensaje de error al final:
      cannot stat 'libXvMCNVIDIA.a': No such file or directory
      Ignora éste mensaje, es normal. A mí también me ha pasado y me funciona.
    • $ sudo /usr/sbin/dkms autoinstall -k `uname -a | awk -F" " '{ print $3 }'`
     
  • Reinicia $ sudo /sbin/reboot

Te llamará la atención que si haces lsmod, no verás nvidia ni nouveau por ningún lado, es decir que sólo ha cargado el driver i915. Es normal:



 Si usas gnome 3 y has perdido la aceleración gráfica o ahora estás en gnome clásico, es que algo has hecho mal. Deberías seguir teniendo aceleración gráfica proporcionada por la gráfica de intel.


4º. Añade el repositorio para bumblebee, lo instalas y sigue todos los pasos necesarios:
  •  Para añadir el repositorio de bumblebee de overman79:
    $ sudo zypper ar -f http://download.opensuse.org/repositories/home:/Overman79/openSUSE_12.2/ repo-bumblebee
  • $ sudo zypper refresh
  • $ sudo zypper in VirtualGL bbswitch-kmp-desktop dkms-bbswitch bumblebee
    (los paquetes VirtualGL bbswitch-kmp-desktop son absolutamente imprescindibles para que bumblebee 3.0.1 funcione, así que no olvides incluirlos en la linea de más arriba).
  • A continuación te logueas como root con el comando su
  • Crea el grupo bumblebee: # groupadd bumblebee
  • Añade a tu usuario al grupo bumblebee: # usermod -A bumblebee tu_usuario
  • Elimina cualquier pasword de acceso al grupo bumblebee:
    # gpasswd -r bumblebee
  • A continuación, si vas a utilizar los drivers de nouveau, edita el archivo /etc/bumblebee/bumblebee.conf. Si vas a utilizar los drivers de nvidia, entonces no toques nada en ese archivo.
  • Añade bumblebee a tu lista de demonios para que arranque al inicio:
    # systemctl enable bumblebeed.service
  • Arranca el demonio bumblebee:# systemctl start bumblebeed.service
  • Reinicia: # reboot


 La instalación ha finalizado. Ahora, vamos a ver si funciona o no:

En el lado de intel:

 $ glxgears



En el lado de nvidia:
$ optirun glxgears




$ optirun glxspheres




Si te ha gustado el artículo, los "me gusta" y los +1 siempre son bien recibidos ;)

 

lunes, 17 de diciembre de 2012

17 cosas útiles que puedes hacer con ffmpeg y algunos conceptos de video digital

En este post os voy a enseñar (muy por encima) a utilizar ffmpeg para:
  1. transformar archivos multimedia
  2. editar las etiquetas id3 tags de archivos de audio
ffmpeg funciona en línea de comandos, y es el programa que usan entre bambalinas muchos de los programas con entorno gráfico utilizados para transformar archivos multimedia.

(El caracter $ antes de cada comando representa el prompt de la shell).

1. Para saber si tienes instalado ffmpeg:

$ dpkg -l ffmpeg | grep ii

Si lo tienes instalado, te devolverá algo como esto:
ii  ffmpeg       4:0.8.4-0ubuntu0.12.04.1 Multimedia player, server, encoder and transcoder (transitional package)

2. Si no lo tienes instalado, para instalarlo:

$ sudo apt-get install ffmpeg
Ahora debes fijarte bien si más abajo te dice algo sobre paquetes sugeridos o paquetes recomendados. Si te pone paquetes recomendados, te sugiero que copies los nombres de todos esos paquetes, canceles la instalación pulsando "n" y hagas $ sudo apt-get install ffmpeg (copia aquí los nombres de los paquetes recomendados).
Te aconsejo que te olvides de los paquetes sugeridos.

3. Sintaxis de ffmpeg:

ffmpeg funciona del siguiente modo: le pasamos un archivo de entrada que queremos transformar y unos modificadores de ese archivo de entrada, y un archivo de salida con una serie de modificadores de dicho archivo de salida.
$ ffmpeg [opciones_archivo_entrada] -i archivo_entrada [opciones_archivo_salida] archivo_salida

4. Tratamiento de archivos de video con ffmpeg:

4.1. Principales modificadores:


-b Nk ----> establece a N el bitrate (nº de kbps) en el archivo de salida:
$ ffmpeg -i archivo_entrada.avi -b 1600k archivo_salida.avi

-r N ----> establece a N el nº de frames por segundo en el archivo de salida:
$ ffmpeg -i archivo_entrada.flv -r 50 archivo_salida.flv

-s NxM ----> establece a NxM el tamaño de cada frame (resolución):
$ ffmpeg -i archivo_entrada.mp4 -s 800x600 archivo_salida.mp4

-aspect XU:UV ----> establece la relación de aspecto a XU:UV. Por ejemplo, -aspect 16:9:
$ ffmpeg -i archivo_entrada.avi -aspect 16:9 archivo_salida.avi

-acodec codecX ----> codificará el audio del video de salida utilizando el codec de audio "codecX"

-vcodec codecX ----> codificará la sucesión de imágenes del video de salida utilizando el codec de video "codecX"


4.2. Códecs, formatos y contenedores

4.2.1. FORMATOS

Para ver qué formatos de audio y de video admite ffmpeg, haz esto:
$ ffmpeg -formats
  • Primera columna (recuadro rojo) ----> ffmpeg puede decodificar (D) y/o codificar (E) dicho formato.
  • Segunda columna (recuadro azul) →nombre del formato.
  • Tecera columna (recuadro verde) →descripción del formato.


Algunos formatos de audio frecuentes: mp3, aac, m4a, ac3, ogg, FLAC.
  • mp3, aac, m4a son formatos privativos (NO LIBRES) de compresión con pérdida de calidad.
  • ogg es un formato libre de compresión con pérdida.
  • FLAC es un formato libre de compresión sin pérdida de calidad (sería como tener el disco original).

Algunos de los formatos de video más frecuentes son divx, xvid, h264, x264, mpeg4, vp8, theora y muchos más.

  • mpeg4 ----> admite aceleración por hardware.
  • h264 ----> admite aceleración por hardware y es de código cerrado.
  • x264 ----> igual que h264 pero libre.
  • theora ----> alta compresión en formato libre.
  • vp8 ----> alta calidad en formato libre.
  • divx ----> mejor que mpeg4. El audio se codifica en mp3. Código cerrado.
  • xvid ----> igual que divx pero libre.

 4.2.2. CÓDECS 

Podemos entender los codecs como un conjunto de programas o librerías que utiliza ffmpeg para codificar y decodificar archivos. Según el tipo de contenedor que utilicemos, tenemos que decirle o no a ffmpeg el codec o códecs que queremos que utilice para codificar el archivo de salida.
Para ver la lista de códecs disponibles en ffmpeg
 $ ffmpeg -codecs
No todos los códecs son iguales. En la primera columna, el comando anterior te devuelve para cada codec esta leyenda:
  • D….. = Decoding supported.
  • .E…. = Encoding supported.
  • ..V… = Video codec.
  • ...A… = Audio codec.
  • ....S… = Subtitle codec.
  • ..…S.. = Supports draw_horiz_band.
  • .…..D. = Supports direct rendering method 1.
  • .…...T = Supports weird frame truncation.


4.2.3. CONTENEDORES

Un archivo de video no es más que una sucesión de imágenes acompañadas de sonido. Obviamente, tenemos que meter todo eso en un contenedor.
  • avi ----> muy extendido por compatibilidad, aunque queda muy atrás en cuanto a calidad con respecto a mp4, mkv, o webm.
  • flv ----> contenedor típico para videos en flash.
  • mkv ----> admite FullHD y es de código abierto.
  • mp4 ----> admite FullHD.
  • webm ----> admite FullHD. Tiene como peculiaridad que sólo soporta ogg como fomato de audio y vp8 como formato de video, de manera que si transformas un video a webm, no es necesario decirle a ffmpeg qué codecs tiene que utilizar, puesto que él ya lo sabrá.

4.3. Cambiar de formato archivos de video

modificadores importantes en cambios de formato de video:
  • -vcodec codecX ----> codificará la sucesión de imágenes del video de salida utilizando el codec de video "codecX"
  • -acodec codecX ----> codificará el audio de salida utilizando el codec de audio "codecX".
  • -sameq ----> conserva en el archivo de salida la calidad del archivo de entrada a pesar del cambio de formato.
  • -pix_fmt rgbXYle ----> útil para garantizar que se conserva la calidad cuando cambiamos la resolución o la relación de aspecto (modificadores -s y -aspect). Este modificador, sustituye el formato del píxel original predeterminado, que contiene 16 bits de información, por otro que contiene XY bits de información.
Convierte un archivo de entrada en contenedor mp4 en un archivo de salida en contenedor avi con un bitrate de 870kbps y una resolución de 1024x768. Los formatos de salida son xvid para el video y mp3 para el audio debido a los códecs utilizados.
$ ffmpeg -i archivo_entrada.mp4 -b 870k -s 1024×764 -acodec libmp3lame -vcodec libxvid archivo_salida.avi

Convierte un video en contenedor mp4 en uno en contenedor mkv. Los formatos de audio y de video son ogg o x264. El archivo de salida conserva la calidad del original gracias al modificador -sameq.
$ ffmpeg -i archivo_entrada.mp4 -sameq -acodec libvorbis -vcodec libx264 archivo_salida.mkv

Transforma un archivo de entrada en contenedor mp4 en un archivo en contenedor webm. Los formatos de audio y de video son forzosamente ogg y vp8 ya que webm no soporta otros, de ahí que no haya necesidad de especificar los códecs a utilizar en  este caso. El archivo de salida conserva la calidad del original gracias al modificador -sameq.
$ ffmpeg -i archivo_entrada.mp4 -sameq archivo_salida.webm

Transforma un archivo en contenedor mp4 en otro en webm. Los formatos ya sabemos que son ogg (audio) y vp8 (video). Se conserva la calidad del archivo original gracias a los modificadores -sameq y -pix_fmt rgb48e que sustituye el formato del pixel original predeterminado con 16 bits de información, por otro que contiene 48 bits de información.
Por otro lado, se fuerza a que la resolución del video de salida sea de 192x1080 con una relación de aspecto de 16:9.
$ ffmpeg -i archivo_entrada.mp4 -sameq -pix_fmt rgb48le -s 1920×1080 -aspect 16:9 archivo_salida.webm

4.4. Extraer de un video una secuencia de imágenes

$ ffmpeg -i video_entrada -sameq -r 10 imagen%d.png
Extrae del video de entrada 10 imágenes por segundo y las almacena en el directorio actual con el nombre imagen1.png, imagen2.png, imagen3.png…… imagenN.png en orden ascendente.

4.5. Crear un video a partir de una secuencia de imágenes

$ ffmpeg -i imagen%d.png  -sameq video_salida.mkv
Crea un video en contenedor mkv partiendo de la secuencia de imágenes imagen1.png, imagen2.png, imagen3.png, ..... , imagenN.png

4.6. Quitar el sonido de un video

$ ffmpeg -i VideoEntrada -sameq -an VideoSalida

4.7. Extraer el sonido de un video

$ ffmpeg -i video_entrada -sameq audio_video.flac
Extrae el sonido del video de entrada sin pérdida de  calidad y lo almacena en el archivo audio_video.flac (recuerda que el formato flac es un algoritmo de compresión de audio sin pérdida).

$ ffmpeg -i video_entrada -ab 192k audio_video.ogg
Extrae el sonido del video de entrada con pérdida de calidad. Y lo almacen en el archivo audio_video.ogg, en el que el bitrate de audio será de 192kbps.


4.8. Insertar nuevo audio en un archivo de video (necesitas que el archivo de video NO tenga sonido)

$ ffmpeg -i archivo_audio.mp3 -i video_sin_audio.avi -sameq nuevo_video+audio.avi


4.9. Unir varios videos en uno (necesitas tener dichos videos en mpeg)

$cat video1.mpeg video2.mpeg video3.mpeg videoN.mpeg >video_final.mpeg

4.10. Acortar un video

Genera un video de salida a partir del segundo 132 del video de entrada:
$ ffmpeg -i video_entrada -sameq -ss 132 video_salida

Genera un video de salida que dure 10 minutos justos.
$ ffmpeg -i VideoOriginal -sameq -t 600 VideoFinal


5. Tratamiento de archivos de audio con ffmpeg

5.1. Ver las etiquetas Id3, o los comentarios de un archivo de audio

$ ffmpeg -i audio_entrada


Si quieres enviar dicha información a una tubería para ser tratada por un segundo comando:
$ ffmpeg -i audio_entrada 2>&1 |  comando2
Fíjate que redirijo la salida de error estándar hacia el descriptor de la salida estándar del comando. Esto es así porque al no especificar ningún archivo de salida, resulta que la salida de ffmpeg se envía a la salida de error estándar. De no poner ese 2>&1 no iría ninguna información al comando 2 de la tubería.

Ejemplo:
$ ffmpeg -i vnv_nation-lightwave.ogg 2>&1 | tr [:upper:] [:lower:] | grep artist | awk -F": " '{ print $2 }'
Esto devuelve: vnv nation

$ ffmpeg -i vnv_nation-lightwave.ogg | tr [:upper:] [:lower:] | grep artist | awk -F": " '{ print $2 }'
Esto devuelve por pantalla lo mismo que $ffmpeg -i vnv_nation-lightwave.ogg y eso es porque la salida de ffmpeg no ha ido a la tubería.


5.2. Conversión a otros formatos de audio


Modificadores más importantes:

  • -acodec códecX ----> igual que en vídeo.
  • -aq N ----> Audio quality. N es un número de 1 a 9. 1 para que el archivo de audio de salida tenga la calidad más baja y 9 para la más alta. Con un 5 el archivo de salida tendrá un bitrate de unos 160kbps y con un 6, unos 192kbps.

Si quiero pasar de formato flac a ogg con un bitrate de 192 kbps para el archivo de salida:
$ ffmpeg -i audio_entrada.flac -acodec libvorbis -aq 6 audio_salida.ogg

Si quiero generar un archivo en formato aac con un bitrate de 192kbps partiendo de un archivo original en formato flac:
$ ffmpeg -i audio_entrada.flac -acodec libvo_aacenc -aq 6 audio_salida.aac

Si quiero generar un archivo en formato mp3 con un bitrate de unos 224 kbps partiendo de un archivo en formato wav:
$ ffmpeg -i audio_entrada.wav -acodec libmp3lame -aq 7 audio_salida.mp3

Si quiero generar un archivo en formato flac partiendo de un archivo en formato wav:
$ ffmpeg -i audio_entrada.wav -sameq -acodec flac audio_salida.flac


5.3. Escribir / modificar las etiquetas id3 de los archivos de audio

modificadores importantes:
  • -map_metadata -1 ----> borras las etiquetas id3 del archivo de entrada, o generas un archivo de salida igual que el de entrada sin etiquetas id3.
  • -metadata campo="nombre_del_campo" ----> generas un archivo de salida con etiqueta id3 con un campo y su valor. ejemplo: -metadata artist="the rolling stones"

Para borrar todas las etiquetas id3 del archivo de entrada. Genero un archivo de salida igual que el de entrada, pero sin etiquetas id3 o comentarios.

$ ffmpeg -i audio_entrada.aac -map_metadata -1audio_salida.aac

Las etiquetas id3, se conservan por defecto, incluso al cambiar de formato un archivo. Para pasar de mp3 a ogg haciendo que el archivo de salida conserve las etiquetas id3 del archivo original:
$ ffmpeg -i audio_entrada.mp3 -acodec libvorbis -aq 6 audio_salida.ogg

Para incrustar etiquetas id3 en un archivo de audio, utilizamos -metadata de forma repetitiva, una vez por cada campo id3 que queremos incrustar en el archivo. Ejemplo, supongamos:
  • grupo música----> vnv nation
  • álbum ----> matter and form
  • título ----> lightwave
  • número de pista ----> 10
  • año del álbum ----> 2005
  • género ----> electrodark * (otros pondrían future pop, según como clasifiques).
  • discos que forman el álbum ----> 1 (luego es el disco 1 de 1)
$ ffmpeg -i audio_entrada.flac -acodec libvorbis -aq 6 -metadata title="lightwave" -metadata artist="vnv nation" -metada album_artist="vnv nation" -metadata album="matter and form" -metadata track="10" -metadata date="2012" -metadata genre="electrodark" -metadata disc="1/1" audio_salida.ogg


Bastante largo, y siento haberos soltado este turrón, pero es que la página de man de ffmpeg parece una enciclopedia, sólo que sin fotos xDDD.
Éstas son sólo las opciones más importantes, igual que en el último ejemplo sólo he puesto algunas de las etiquetas id3 que soporta ffmpeg, pero de verdad que hay mucho más. Os aseguro que más resumido no se puede si es que se quiere hacer un buen manual ;)

Si te ha gustado mi post, agradecer no cuesta nada, dame un "me gusta", un +1 o un lo que sea en los botones que tienes más abajo. Gracias ;)

PD: en unos dias pondré un script para pasar discos e incluso colecciones enteras a ogg, editando incluso las etiquetas id3 de los archivos