¿Cómo mover / usr a una nueva partición?

26

Mi /usrcarpeta necesita ser movida a una nueva partición. ¿Cómo puedo hacer esto sin borrar el contenido?

¿Se puede hacer esto mientras Ubuntu se está ejecutando, o necesito usar el LiveCD para esto?

Nathan Osman
fuente

Respuestas:

27

Sería más seguro usar un Live CD, pero podría hacer lo siguiente:

  • copie todos los archivos a una nueva partición, asegurándose de que el contenido de /usrno cambie mientras lo hace.
  • editar /etc/fstabpara que /usrse monte en el próximo reinicio
  • reiniciar
  • eliminar los archivos antiguos

Vea a continuación los detalles de cada paso.

Tenga en cuenta que no puede montar la nueva partición /usrmientras se ejecuta, ya que habrá muchos archivos /usrabiertos.

Copiando los archivos

Me gustaría utilizar cp -a. -aEs la opción de archivo. Desde la página del manual :

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

Edición / etc / fstab

Necesita conocer el UUID de su nueva partición. Puede ver el mapeo haciendo:

$ ls -l /dev/disk/by-uuid/

Y luego agregue esta línea a /etc/fstab:

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

Cambie el UUID a su UUID y cambie ext4para que sea el tipo de sistema de archivos que está utilizando; debe saber esto si ha configurado la partición.

Eliminar los archivos antiguos

Después del reinicio, /usrla nueva partición montada ocultará los archivos antiguos de la partición raíz /usr. Pero podemos utilizar algunos trucos de enlace de montaje para acceder a los archivos antiguos y luego eliminarlos.

$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt

Pero un ligero error de escritura (digamos, presionar Enter cuando solo había escrito sudo rm -rf /mnt) podría causar un desastre, por lo que solo usaría este método si tuviera mucha confianza en lo que estaba haciendo, realmente no podría lidiar con ningún tiempo de inactividad o no tuviera acceso físico a la máquina y, por lo tanto, no se pudo iniciar un CD en vivo o una memoria USB en vivo.

Hamish Downer
fuente
44
rsynces mucho más adecuado para esto quecp
Marco Ceppi
1
@MarcoCeppi ¿Podría ampliar eso? Tal vez dar una respuesta variante que utiliza en su rsynclugar
Kazark
66
Reemplace el comando cp con rsync -avz. Rsync le permite reiniciar copias y, por lo general, debe usarse cuando se mueve entre particiones, dispositivos de bloque o máquinas.
Marco Ceppi
2
NO lo use cp. No conserva los ENLACES DUROS. Esto interrumpirá las actualizaciones de paquetes en el futuro. Por ejemplo /usr/bin/s2py /usr/bin/psedes el mismo archivo. Mudarse cpcreará 2 versiones independientes de ese archivo. Hazlo en su rsync -aHlugar.
oᴉɹǝɥɔ
1
En primer lugar, omita el indicador -z: habilita la compresión, que dado que no está enviando los archivos a través de una red es una sobrecarga inútil (excepto que rsync generalmente es lo suficientemente inteligente como para ignorarlo, pero aún así, también podría dejarlo caer) . @ AleksandarStefanović definitivamente desea que el contenido esté allí, no la carpeta, y la razón por la que sucedió de esa manera se debe a algunas peculiaridades de rsync: trata de manera rsync -avH a/ bdiferente rsync -avH a b, copiando el contenido de la carpeta a(es decir, a/*) en el primer caso y la carpeta en sí en el segundo. Asegúrate de usar la barra aquí.
Darael
7

Como la mayoría de las bibliotecas que se usan están en / usr, no recomendaría mover este directorio mientras se ejecuta Ubuntu. De hecho, probablemente reciba mensajes de error cuando intente hacer esto. Por lo tanto, lo mejor es usar el LiveCD.

Puede utilizar varias posibilidades para mover / copiar los archivos cp, rsync, etc. Desea asegurarse de que se creen enlaces simbólicos y no solo se copien. cp y rsync tienen opciones para esto.

Después de mover los archivos a la otra partición, debe agregar otro montaje en / etc / fstab para montar la nueva partición en / usr.

txwikinger
fuente
2

Atención: no tengo idea de lo que estoy haciendo, solo estoy copiando comandos y haciendo lo sugerido por los demás. Esta puede ser la forma incorrecta de hacerlo, pero funciona para mí (al menos por ahora).

Así es como lo hice (siguiendo la respuesta de Hamish y los comentarios):

  1. Copie todos los archivos de la partición recién creada (reemplace con la ubicación de su partición, debería ser similar a la mía):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. En este punto, me di cuenta de que copió todo en la /usrcarpeta de la partición, lo que no va a funcionar , así que copié todo (con el administrador de archivos) de esa carpeta a la raíz de la partición, y lo eliminé vacío carpeta después.

  3. Editar /etc/fstab(igual que en la respuesta de Hamish, por supuesto, reemplazar con su UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Un paso que resultó no ser muy acertado: cambié el nombre de la /usrpartición montada actualmente a /usrBACKUP, solo para saber que, cuando reinicio el sistema, de hecho se reinicia en la partición recién creada, y no en la anterior. . Después de eso, todo falló en la pantalla, y tuve que apagarlo presionando la tecla de encendido (genio como soy) . Omita este paso si no desea fallar su sistema.

  5. Reiniciar el sistema

  6. Después de reiniciar, abra System Monitor o una aplicación similar para ver si su nueva /usrpartición está montada y para verificar con seguridad si todo salió según lo planeado.

  7. Después de verificar que todo esté bien, puede eliminar su /usrpartición anterior. Guardaré el mío por si algo sale mal.

Aleksandar Stefanović
fuente
¿Por qué responder una pregunta de 5 años si ya tiene una respuesta aceptada y no sabe de qué está hablando?
cmks
2
@cmks porque sentí que otras respuestas estaban incompletas: no obtuve la solución completa de una respuesta y ninguna de las respuestas tenía suficientes detalles. Sentí que los usuarios que llegarían a esta pregunta necesitarían ayuda. No importa si tiene cinco años si alguien aún necesita la información de esta pregunta.
Aleksandar Stefanović
1
¿Por qué todos reinician su sistema? ¿No debería sudo mount -apermitir que siga funcionando?
Hagen von Eitzen
@Hagen, supongo que es solo una buena medida
Aleksandar Stefanović, el