03 abril 2007

Cómo cambiar /home a una partición nueva (o clonar partición)

Alguna vez en la vida os habréis encontrado con la necesidad de copiar el contenido de una partición de un sitio a otro. Esto que en otros sistemas operativos se hace con una conocida aplicación propietaria con su disco de arranque, en los sistemas unix se puede hacer fácilmente.

Los pasos previos son la parte más larga, necesaria en cualquier caso. Primero tenemos que tener claro de dónde a dónde vamos a mover lo que sea. Supongamos que tenemos un sistema linux instalado en nuestro disco duro, en una partición única, y queremos separar /home a una partición nueva. Si sólo tenemos ese disco y queremos hacer esas nuevas particiones, tenemos que dejar algún espacio donde crear la nueva. Para eso hemos de reiniciar con un disco, por ejemplo el CD en vivo de Ubuntu, y abrir el gestor de particiones de Gnome (gparted). Con él habría que redimensionar la partición y crear la nueva. Tenemos que fijarnos bien en el nombre de la nueva. Ver aquí sobre los tamaños adecuados.
Esto tiene riesgos; podría salir mal (muy muy mal) y pueden perderse todos los datos, así que con un solo disco duro, tocar algo siempre es arriesgado. Lo mejor es siempre tener un respaldo en otro disco por si hubiera algún problema. Además, dependiendo del espacio que tengamos ocupado en el disco el asunto puede complicarse hasta el punto de ser imposible. Tenemos que reducir la partición que tenemos y nos tiene que quedar sitio para poder mover /home a esa partición nueva. Si no hay espacio, o lo hacemos progresivamente (mover poco a poco y redimensionar varias veces) o hay que usar necesariamente otro disco. No pueden hacerse milagros.

Una vez tenemos claro de dónde a dónde vamos a mover, tenemos que tener montada la partición nueva para poder copiar a ella los archivos.

sudo mount /dev/nombredelapartición /mnt/nuevapart

donde nombredelapartición será el nombre de la nueva partición que hemos creado, y nuevapart un directorio que habremos creado (sudo mkdir (/mnt/nuevapart) dentro de /mnt con objeto de montarla aquí.

Finalizados los pasos previos, empezaremos a copiar los archivos. Esto puede hacerse desde el CD en vivo o desde el sistema instalado, pero si es este segundo caso, sería recomendable pasar al modo monousuario, para evitar problemas:
sudo init 1

Vamos al directorio origen, en este caso /home y empezamos a copiar
cd /home
cp -ax . /mnt/nuevapart

Ya está copiado. Esta última orden es la que sirve para clonar. ATENCIÓN AL ".". Aunque este método ya está probado, siempre hay que comprobar que no nos hemos equivocado en algo (o que el que escribe se ha dejado algún detalle) antes de continuar. Podemos usar esto para crear respaldos. Y si queremos mantener una copia de seguridad continua, añadiríamos el parámetro "u", que sólo copia en caso de haber archivos más nuevos que los del destino.

Ahora queremos seguir con el cambio de sitio de /home. Tenemos que hacer que se monte al arrancar el sistema (primero la montamos para tenerla ya), y renombrar el /home viejo para que no moleste. Podremos borrarlo cuando acabemos, o dejarlo como respaldo.
cd /
mv /home /home.viejo
mkdir /home
mount /dev/nombredelapartición /home

Salimos del modo monousuario:
init 5

Ahora tenemos que editar el /etc/fstab, que es el archivo donde se le indica al sistema dónde se montan las particiones.
Usamos el editor que queramos:
sudo gedit /etc/fstab

Y añadimos esta linea al final.
/dev/nombredelapartición /home ext3 defaults 0 1

(Actualizado 01/02/2008) Éste es el método antiguo. Si queremos usar identificadores únicos (UUID), en lugar de /dev/nombredelapartición habrá que poner el chorro de letras que nos de tras UUID esta orden:
sudo vol_id /dev/nombredelapartición

O nos fijamos en la línea correspondiente de ésta, que nos da todos:
blkid

Hecho. Al reiniciar tendremos todo funcionando exactamente igual, pero con particiones separadas, más seguro.

17 comentarios:

Carlos dijo...

Hola,

Me queda la duda de para qué sirve exactamente el parámetro "-x" de cp. Supongo que es innecesario si se pasa de una partición ext3 a otra... ¿o no?

Tampoco he entendido para qué sirve el punto ".".

Un saludo.

El 64 dijo...

La x es para que sólo copie la partición actual. Podría pasar que tuvieras alguna partición montada dentro de /home (por ejemplo NFS o samba) y esto evita que se copie.
El punto se refiere a que el origen de la copia será el directorio actual, por lo que copiará todo lo que éste contiene, incluyendo archivos ocultos.

Mon-Xas dijo...

me gustaria saber si es posible hacerlo en una particion en fat32 o ntfs, es q me gustaria tener mis documentos de windows tambien dirigidos a una tercera particion

por favor ponte en contacto conmigo.
mi email esta en mi perfil de blogger

Carlos-cr dijo...

Casi me quedo sin home (no podía ingresar) al aplicar esto
cd /
mv /home /home.viejo
mkdir /home
mount /dev/nombredelapartición /home

Tuve que hacer el proceso inverso para recuperar el home. Y sólo lo recuperó de manera parcial (sin los archivos y la configuración, tuve que copiarlo luego en modo gráfico usando sudo nautilus).

Me parece que antes de hacer esto se debe ingresar de nuevo al modo gráfico y editar el fstab para indicar la ubicación del nuevo home. Pero todavía no he probado.

Además, por alguna razón que desconozco cp -ax . /mnt/nuevapart no copió el home a la nueva partición (que la tengo montada en /media/pasar y corresponde a la partición /dev/sda9).

El 64 dijo...

mon-xas:Sobre lo de ntfs o fat32, hay problemas con este método por cuestión de tablas de caracteres. Hay errores con los nombres de archivo que tengan espacios o tildes.

carlos-cr: Creo que no entiendo bien lo que dices. ¿Lo has montado en /media/pasar? Entonces habrás puesto "cp -ax . /media/pasar", ¿verdad?
Sobre lo que dices del proceso inverso, no puedes haber perdido ningún archivo. Simplemente has cambiado el nombre de un directorio y has montado otro en su lugar. Los datos siguen ahí. Precisamente lo hago así para asegurar los datos ante cualquier fallo.

Anónimo dijo...

Hola:
he leido el articulo y quisiera saber si hay alguna forma de ganar espacio en el disco para cambiar /home de lugar, logicamente sin reiniciar con Live CD. Dispongo de 400 Gb aproximadamente pero cuando abro "gparted" no me deja rediemsionar nada.
El disco tiene una particion primaria que es la que queiro dimensionar y otra extendida donce reciden swap y ttres particionaes logicas de una version anterior de Ubuntu

muchisimas gracias, mi nomnbre es Eduardo Jorge-C.Riv-Argentina

El 64 dijo...

Eduardo, si no reinicias con un disco no puedes modificar las particiones, porque están en uso.

Anónimo dijo...

De acuerdo, la otra duda es referida al espacio Si bien el disco tiene espacioo esta disponible en la particion promaria raiz ò sino en la particion extendida donde estan las particiones logicas swap y otras 3 de una instalacion anterior (fundamentalmente /home antigua. Que sugieres que deberìa hacer, entiendo que si no elimino alguna no dispondrè de espacio para modificar nada.

Disculkpa si no entiendes
Saludos, Eduardoapaincomdevers

El 64 dijo...

Recapitulando. Si estás con el sistema iniciado, las particiones del sistema no las puedes modificar, pero sí otras que tengas aparte. O sea, que si tienes la partición / y la swap de tu sistema, en gparted verás un icono que las marca como en uso. Si tienes otras aparte y están montadas, simplemente tienes que desmontarlas, para modificar su tamaño o eliminarlas y crear otras. Date cuenta que cuando arrancas con un disco, si tienes una partición de intercambio, ésta es posible que se aproveche y que tengas que desactivarla (en el propio gparted). Siempre que no sean particiones en uso, las puedes modificar como te venga en gana, cambiando el tamaño o eliminando.
Como comento en el artículo, lo de ir redimensionando progresivamente unas y otras puede ser un proceso interminable. Quizá deberías reducir la raiz y unificar las demás (eliminarlas y crear una nueva). Ya que son de una versión anterior, puedes eliminarlas y crear una nueva.
Lo ideal sería que tuvieras otro disco para mover los datos de /home (y para copias en general) y luego restaurarlos una vez hechos los cambios.

Anónimo dijo...

Buenas tardes:
he desmontado una partición de las tres que dispongo para ganar espacio y supongo que debo eliminar las lineas del archivo fstab para que en el reinicio no vuelvan a montarse.
Esta es la particion que desmonte
#Entry for /dev/sdb5 :
UUID=894b2cac-edb4-dfac-3696-aea5da39b01a /media/sdb5 ext3 defaults 0 2
Si todo funciona como espero y efectivamente en el reinicio no se montan las particiones , las puedo boorar y ya tendrìa lugar para fredimensionar, pero como obtengo el còdigo UUID para la nueva particion

Gracias, Eduardo

Anónimo dijo...

Hola: espero no cansar con mi cháchara... pero desmonte tres particiones y no las borre, En el reinicio evite que se monten automáticamente. Después de intentar borrarlas , la partición de intercambio cambiaba de nombre desde sdb8 a sdb5, asi que cancele todo por que aún guardando los cambios y editando el fstab , me quedaba la duda si el UUID asignado cambiaba automáticamente al reiniciar el sistema y entraba a Linux de forma adecuada o se mantenía el UUID original y ello imposibilitaba acceder a Linux.
No conforme con ello, volví a reiniciar desde el DVD live de Linux y trate de redimensionar la partición raíz para ganar espacio a fin de reubicar /home, pero al aceptar los cambios la primera operación en Gparted que se encarga de verificar si hay errores en los discos indico la existencia de uno y no pude redimensionar nada. Tengo algunos accesos directos a otros discos con formato NTFS , no se si ello puede ser una de las causas del error.
Si pueden brindarme ayuda, bienvenida sea.

Muchas gracias, Eduardo

Anónimo dijo...

Hola: nuevamente Eduardo...
el error que indique en mi mensaje anterior figura en el suguiente texto
y al final comenta algo sobre el sistema de archivos y la cantidad de bloques.... En fin gracias nuevamente
GParted 0.3.5

Libparted 1.7.1
Mover /dev/sdb1 a la izquierda y reducirlo de 412.22 GiB a 369.35 GiB  07:52    ( ERROR )
    
calibrar /dev/sdb1  00:00    ( SUCCES )
    
ruta: /dev/sdb1
inicio: 63
fin: 864489779
tamaño: 864489717 (412.22 GiB)


calcular el tamaño nuevo y la posicion de /dev/sdb1  00:00    ( SUCCES )
    
inicio solicitado: 0
fin solicitado: 774590039
tamaño solicitado: 774590040 (369.35 GiB)
nuevo inicio: 63
nuevo final: 774590039
tamaño nuevo: 774589977 (369.35 GiB)


comprobar errores en el sistema de archivos en /dev/sdb1 y (si es posible) arreglarlos  03:56    ( SUCCES )
    
e2fsck -f -y -v /dev/sdb1
    
Paso 1: verificando nodos i, bloques y tamaños
Paso 2: Se verifica la estructura de directorios
Paso 3: Se revisa la conectividad del directorio.
Paso 4: revisando las cuentas de referencia
Paso 5: Se revisa el resumen de informacion del grupo

250187 inodes used (0.93%)
3261 non-contiguous inodes (1.3%)
# of inodes with ind/dind/tind blocks: 15146/566/0
6849501 blocks used (6.34%)
0 bad blocks
2 large files

197853 regular files
24235 directories
70 character device files
26 block device files
2 fifos
819 links
27254 symbolic links (25091 fast symbolic links)
738 sockets
--------
250997 files
e2fsck 1.40.8 (13-Mar-2008)




encoger el sistema de archivos  00:00    ( ERROR )
    
resize2fs /dev/sdb1 387294988K
    
resize2fs 1.40.8 (13-Mar-2008)
Por favor ejecute antes 'e2fsck -f /dev/sdb1'.

comprobar errores en el sistema de archivos en /dev/sdb1 y (si es posible) arreglarlos  03:56    ( SUCCES )
    
e2fsck -f -y -v /dev/sdb1
    
Paso 1: verificando nodos i, bloques y tamaños
Paso 2: Se verifica la estructura de directorios
Paso 3: Se revisa la conectividad del directorio.
Paso 4: revisando las cuentas de referencia
Paso 5: Se revisa el resumen de informacion del grupo

250187 inodes used (0.93%)
3261 non-contiguous inodes (1.3%)
# of inodes with ind/dind/tind blocks: 15146/566/0
6849501 blocks used (6.34%)
0 bad blocks
2 large files

197853 regular files
24235 directories
70 character device files
26 block device files
2 fifos
819 links
27254 symbolic links (25091 fast symbolic links)
738 sockets
--------
250997 files
e2fsck 1.40.8 (13-Mar-2008)




aumentar el tamaño del sistema de archivos hasta llenar la particion  00:00    ( SUCCES )
    
resize2fs /dev/sdb1
    
resize2fs 1.40.8 (13-Mar-2008)
El sistema de ficheros ya tiene 108061214 bloques. ¡No hay nada que hacer!







========================================

El 64 dijo...

Eduardo, el UUID, al final del artículo indico cómo: sudo vol_id /dev/nombredelapartición o sudo blkid para ver todos.
El UUID permite despreocuparse del nombre del dispositivo. Mientras no modifiques la propia partición, seguirá siendo el mismo. En el peor caso, aunque no se encuentre la partición de intercambio (swap) que indique el /etc/fstab por un error en el identificador, el sistema arrancará. Si tienes muy poca memoria puede tardar eternamente, pero no será tu caso, ¿no? Al arrancar puedes ver si está activa en el monitor del sistema (sistema>administración). Donde si que tienes que tener cuidado es con la partición / y /boot el sistema y el arranque. Si cambia el UUID, tendrías que cambiarlo en el /etc/fstab y también en el /boot/grub/menu.lst .
En cualquier caso, miras con sudo blkid y te sale todo. Si coincide, sin problemas, y si no, lo cambias. No pasa nada.

¿Lo que llamas "accesos directos a otros discos" que es? Sea un enlace simbólico (ficheros especiales en los que se basó MS para hacer los accesos directos) o un lanzador del escritorio, no influye en nada para el manejo de particiones.

Sobre el registro de gparted... parece que esté todo bien. Avisa de un error al iniciar el proceso porque hay que revisar el sistema de ficheros, lo revisa y continua el proceso. Todo correcto aparentemente, aunque parece que falten cosas. ¿No la encogió? ¿Has vuelto a entrar por si no te indicaba la información correcta? ¿Has vuelto a intentarlo?

Carlos Camilo dijo...

Lo correcto sería /dev/sda9 /home ext3 defaults 0 1

Esto no es correcto:
/dev/sda9 /home ext3 defaults 1 2

dump: Esta opcion solo puede poseer el valor 0 o 1, en ella se guardan los errores en tiempo de sistema que ha reportado el sistema de archivos. Al activarlo (1) se hará un backup con las opciones, creando backup por si surge algún tipo de problema, lo normal es tenerlo desactivado (0), ya que rara vez se produce un error.

pass: Esta opción al igual que la anterior tan solo puede poseer el valor 0 o 1. Si la activamos (1) el sistema realizara una pasada cada X desmontadas o si el dispositivo a sido desmontado incorrectamente para comprobar su integridad. En caso de estar desactivado (0), el sistema no realizara nunca ninguna pasada para comprobar la integridad del dispositivo físico, por ello es recomendable tenerlo en activado (1).

Un saludo

El 64 dijo...

Cierto, Carlos, lo corrijo, gracias. No se de dónde me saqué eso, la verdad.

jmarior dijo...

gracias, ha ido perfecto

Anónimo dijo...

yo añadiria el parametro -p a cp

de esta forma se conservaran las fechas originales de archivos y directorios en la copia