Como mover / usr para uma nova partição?

26

Minha /usrpasta precisa ser movida para uma nova partição. Como posso fazer isso sem apagar o conteúdo?

Isso pode ser feito enquanto o Ubuntu está sendo executado ou preciso usar o LiveCD para isso?

Nathan Osman
fonte

Respostas:

27

Seria mais seguro usar um Live CD, mas você poderia:

  • copie todos os arquivos para uma nova partição, certificando-se de que o conteúdo de /usrnão seja alterado enquanto você estiver fazendo isso.
  • edite /etc/fstabpara que /usrseja montado na próxima reinicialização
  • reiniciar
  • excluir os arquivos antigos

Veja abaixo os detalhes de cada etapa.

Observe que você não pode montar a nova partição /usrenquanto estiver executando, pois haverá muitos arquivos /usrabertos.

Copiando os arquivos

Eu usaria cp -a. -aé a opção de arquivamento. Na página do 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

Editando / etc / fstab

Você precisa conhecer o UUID da sua nova partição. Você pode ver o mapeamento fazendo:

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

E adicione esta linha a /etc/fstab:

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

Altere o UUID para o seu UUID e mude ext4para o tipo de sistema de arquivos que você está usando - você deve saber disso se tiver configurado a partição.

Exclua os arquivos antigos

Após a reinicialização, os arquivos antigos na /usrpartição raiz serão ocultados pela nova partição montada /usr. Mas podemos usar alguns truques de montagem de ligação para acessar os arquivos antigos e excluí-los.

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

Mas alguns erros de digitação (digamos, pressionar Enter quando você digitou apenas sudo rm -rf /mnt) podem causar desastre, então eu usaria esse método apenas se estivesse muito confiante no que estava fazendo, realmente não pudesse lidar com nenhum tempo de inatividade ou não tivesse acesso físico à máquina e, portanto, não foi possível inicializar um CD ao vivo ou um stick USB ao vivo.

Hamish Downer
fonte
4
rsyncé muito melhor adequado para isso do quecp
Marco Ceppi
1
@MarcoCeppi Você poderia expandir isso? Talvez dê uma resposta variante que usa em seu rsynclugar?
Kazark 31/12/14
6
Substitua o comando cp por rsync -avz. O Rsync permite reiniciar cópias e geralmente deve ser usado ao se mover entre partições, dispositivos de bloco ou máquinas.
Marco Ceppi
2
NÃO use cp. Não preserva HARD LINKS. Isso interromperá as atualizações de pacotes no futuro. Por exemplo /usr/bin/s2pe /usr/bin/psedé o mesmo arquivo. Mudar com cpcriará duas versões independentes desse arquivo. Faça em rsync -aHvez disso.
oᴉɹǝɥɔ
1
Antes de tudo, pule o sinalizador -z - ele permite a compactação, que, dado que você não está enviando os arquivos por uma rede, é inútil (exceto que o rsync geralmente é inteligente o suficiente para ignorá-lo, mas ainda assim pode descartá-lo) . @ AleksandarStefanović você definitivamente quer o conteúdo lá, não a pasta, e a razão pela qual isso aconteceu é devido a algumas peculiaridades do rsync: trata de maneira rsync -avH a/ bdiferente rsync -avH a b, copiando o conteúdo da pasta a(ou seja a/*) no primeiro caso e da própria pasta no segundo. Certifique-se de usar a barra aqui.
Darael
7

Como a maioria das bibliotecas usadas está em / usr, eu não recomendaria mover este diretório enquanto estiver executando o Ubuntu. Na verdade, você provavelmente recebe mensagens de erro ao tentar fazer isso. Portanto, o melhor é usar o LiveCD.

Você pode usar várias possibilidades para mover / copiar os arquivos cp, rsync, etc. Você deseja garantir que todos os links simbólicos sejam criados e não apenas copiados. cp e rsync têm opções para isso.

Após mover os arquivos para a outra partição, você precisa adicionar outra montagem no / etc / fstab para montar a nova partição no / usr.

txwikinger
fonte
2

Atenção: Não faço ideia do que estou fazendo, apenas copiando comandos e fazendo o que é sugerido pelos outros. Esta pode ser a maneira incorreta de fazê-lo, mas funciona para mim (por enquanto, pelo menos).

Foi assim que eu fiz (seguindo a resposta de Hamish e os comentários):

  1. Copie todos os arquivos da partição recém-criada (substitua pelo local da sua partição, ela deve se parecer com a minha):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. Nesse ponto, percebi que ele copiava tudo na /usrpasta da partição, o que não funcionaria , então copiei tudo (com o gerenciador de arquivos) dessa pasta para a raiz da partição e excluí a pasta vazia. pasta depois.

  3. Editar /etc/fstab(o mesmo que na resposta de Hamish, é claro, substitua pelo seu UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Uma etapa que acabou não sendo muito sábia: mudei o nome da /usrpartição atualmente montada para /usrBACKUP, apenas para que eu saiba que, quando reinicializo o sistema, ele de fato reinicia na partição recém-criada, e não na antiga. . Depois disso, tudo deu errado na tela e eu tive que desligá-lo pressionando a tecla liga / desliga (gênio como eu sou) . Pule esta etapa se não desejar alterar seu sistema.

  5. Reinicie o sistema

  6. Após a reinicialização, abra o Monitor do sistema ou aplicativo similar para verificar se sua nova /usrpartição está montada e para verificar se tudo correu como planejado.

  7. Depois de verificar se está tudo bem, você pode excluir sua /usrpartição antiga . Vou manter o meu apenas no caso de algo dar errado.

Aleksandar Stefanović
fonte
Por que responder a uma pergunta de 5 anos se ela já tem uma resposta aceita e você não sabe do que está falando?
cmks
2
@cmks porque senti que outras respostas estavam incompletas - não obtive solução completa de uma resposta, e nenhuma das respostas não tinha detalhes suficientes para elas. Eu senti que os usuários que chegariam a essa pergunta precisariam de ajuda. Não importa se ele tem cinco anos se alguém ainda precisa das informações desta pergunta.
Aleksandar Stefanović
1
Por que todo mundo está reiniciando seu sistema? A não deveria sudo mount -apermitir que ele continue funcionando?
Hagen von Eitzen
@Hagen eu acho que é apenas para uma boa medida
Aleksandar Stefanović