domingo, 12 de febrero de 2012

Cambiar /usr a otra partición


/usr es el directorio que contiene todos los programas (/usr/bin), las bibliotecas (/usr/lib) y sus respectivos documentos (/usr/share/doc) y, fundamentalmente, es el directorio que mayor espacio requiere en nuestra instalación Linux. Por esta razón, si tenemos “/usr”dentro del directorio raiz “/”, tiende a llenarse causando la advertencia constante acerca de la falta de espacio en la partición raiz.

Yo tengo Ubuntu en una partición de 5 Gigas. Afortunadamente, en algún momento en el pasado se me ocurrió poner “/home” (216 Gigas) en una partición diferente a la de raiz, pero con los diferentes programas que he montado solamente me quedan 130 Megas de espacio libre, de tal forma que no puedo instalar algo nuevo sin desinstalar algo que necesito.

Una solución sería volver a instalar Ubuntu en otra partición más grande pero, al igual que hice con /home, me parece que es mejor solución poner /usr en otra partición. Gracias a Dios tengo una partición sin uso!!!

El asunto lo divido en tres partes: 1)Dejar lista la nueva partición, 2) Pasar el contenido de /usr a la nueva partición, y 3) Decirle a Ubuntu dónde encontrar la nueva /usr. Comienzo alistando la partición:

Dejar lista la nueva partición
Empleando la “Utilidad de discos” de Ubuntu, ubico la partición que tengo libre (sda7 en mi caso. Esto puede variar en otros computadores.) y la formateo usando Ext4. 
Aquí es necesario indicar que el computador conoce esta partición como un dispositivo (!). En este caso el dispositivo /dev/sda7. Esto es importante porque se empleará más adelante para hacer que Ubuntu reconozca (monte) este dispositivo como un directorio o sistema de archivos.
Con esto tenemos la partición lista para hacer que nuestro Ubuntu la reconozca. Es decir, montar la partición.
Para hacer esto primero creamos un directorio en el cual montaremos el dispositivo sda7. Se puede crear un directorio en casi cualquier parte del sistema, pero lo haremos en el directorio /media para mantener nuestro sistema de ficheros en orden. El nombre que le daré será “usrtemp”.
Desde consola tecleamos:

          > sudo mkdir /media/usrtemp

Ahora si montamos la partición en el directorio que acabamos de crear tecleando en consola:

          > sudo mount /dev/sda7 /media/usrtemp

En la imagen se puede ver la instrucción anterior, seguida de la orden ls /media que nos lista los directorios dentro del directorio /media. En el último lugar tenemos el directorio que acabamos de crear: usrtemp.


Con esto ya hemos dejado lista la nueva partición para el siguiente paso que es...

Pasar el contenido de /usr a la nueva partición
Antes de proceder a hacer la copia del contenido de /usr debo detenerme en el significado de un punto “.” cuando hablamos de directorios en linux. La razón de esto es que algunas veces cometí el error de despreciar un punto en una orden y los resultados eran erróneos.
Voy a listar el contenido del directorio /media/usrtemp, que acabamos de dejar listo, con la orden:
> ls -al /media/usrtemp
la cual le pide a linux que nos de la información completa del los archivos dentro del directorio usrtemp


Los dos primeros directorios que aparecen son: punto “.” y dos puntos “..”. En realidad estos son apuntadores hacia:
El mismo directorio en el que estamos, es decir /usrtemp, en el caso del directorio punto “.”.
El directorio padre de aquel en el que estamos, es decir /media, en el caso del directorio “..”

Ahora si, a copiar los datos. En consola nos cambiamos al directorio /usr con la orden

          > cd /usr

y copiamos todo lo que hay en este a /media/usrtemp

          > sudo cp -ax . /media/usrtemp

Atención con el punto en esta orden!!! Esta copia puede tomar algunos minutos para completarse...

Ahora tenemos que hacer la última parte:

Decirle a Ubuntu dónde encontrar la nueva /usr
Ya tenemos todos los archivos de /usr copiados en /media/usrtemp por lo cual nos vamos a deshacer de /usr y montamos el nuevo pero, atención, dejamos /usr guardado por si algo sale mal y tenemos que echar marcha atrás.
Copiamos /usr a un directorio con el nombre /usr.viejo.

          > cd /
          > sudo mv /usr /usr.viejo

Ahora creamos un nuevo directorio /usr para montar el dispositivo sda7

En los tutoriales que consulté la orden para crear este directorio es sudo mkdir /usr, pero esta orden no tiene efecto alguno porque “sudo” está en /usr y ese directorio ya no existe!!! 

De paso, al intentar tomar la foto de la consola me doy cuenta que Ubuntu tampoco encuentra el programa que toma la foto porque este estaba en /usr.
Por esto tenemos que decirle al computador dónde encontrar “sudo”. La orden será:

          > /usr.viejo/bin/sudo mkdir/usr

Y luego montar el dispositivo sda7 en el directorio creado.

          >/usr.viejo/bin/sudo mount /dev/sda7 /usr

Con esto ya tenemos el /usr funcionando desde la nueva partición; Ahora si podemos escribir “sudo” sin más, o tomar fotos de las ventanas sin problemas, pero al apagar la máquina se pierde el punto de montaje, por lo cual, si se inicia nuevamente, Ubuntu irá a buscar los programas en /usr dentro del directorio raiz “/” el cual ¡está vacío! Porque todos los programas están en sda7

Tenemos que decirle a Ubuntu que, en el momento de arranque, monte la partición sda7 como /usr.Hay otras formas de hacerlo, pero parece que esta es la mas segura.

Averiguamos la UUID (identificador universal) de la partición y editamos el /etc/fstab para montar la partición al inicio.
En los manuales se indica que la orden es sudo vol_id -uuid /dev/nombre de la partición, pero vol_id no funciona de tal forma que utilizamos blkid

          > sudo blkid /dev/sda7


Esto me dice que la sda7 está en la dirección dc3a78d3-c662-4d6e-8bbf-387b21b34beb, y que el formato es ext4. Esto es importante porque necesitamos escribirlo en el archivo /etc/fstab, de tal forma que lo editamos:

          > sudo gedit /etc/fstab

Y añadimo estas lineas al final:

# partición /dev/sda7 montada en /usr manualmente (comentario)
UUID=dc3a78d3-c662-4d6e-8bbf-387b21b34beb /usr ext4 defaults 1 2

Grabamos, cerramos y listo, podemos reiniciar nuestro Ubuntu.

Si algo salió mal podemos utilizar una usb o un disco de arranque y restaurar el directorio /usr.viejo a /usr y borrar las dos líneas que hemos introducido en fstab, con lo que podemos repetir los pasos evitando los errores que hayamos cometido.

Si no hemos cometido error alguno, al reiniciar tendremos todo funcionando perfectamente, pero con particiones separadas. Solamente nos faltara borrar /usr.viejo para liberar el espacio que teníamos copado en la raiz /

> sudo rm -R /usr.viejo

6 comentarios:

  1. Mi problema es que parece que se estropeó el disco interno y no me quedó otra que instalar el sistema en un USB de 20GB. Y ahora quería instalar los programas en una de las particiones del interno que parece no tener problemas.
    Quería dejar el USB lo más libre posible e instalar los programas en la partición del interno
    Ya diré cómo queda la cosa ...

    ResponderEliminar
    Respuestas
    1. Pues nada, todo mi pozo en un gozo.
      Tres intentos y me quedo en
      "Por esto tenemos que decirle al computador dónde encontrar “sudo”. La orden será:

      > /usr.viejo/bin/sudo mkdir/usr"

      Dice que No such file ir directory.

      Eliminar
  2. Les comento mi problema. Quize hacer todo esto en una OrangePi, con Armbian. Y no habia caso una vez que renombre el directorio usr a usr.viejo...ya no pude hacer nada. Basicamente, no lograba posicionarme como Usuario Root, ya que Sudo, no me funcionaba, ni siquiera con /usr.viejo/bin/sudo.
    La solucion que halle, fue poner
    > su -
    colocar la clave root, y ahi si pude crear el directorio /usr
    y luego montar en /usr, el /dev/sda7
    muchas gracias x este tutorial.

    ResponderEliminar