Movendo / var, / home para separar partição

59

Estou tentando mover algumas pastas (como /vare /home) para uma partição separada depois de ler este guia:

3.2.1 Escolha um esquema de partição inteligente

Consegui mover uma pasta com sucesso, seguindo este guia.

No entanto, parece não funcionar para várias pastas, e todas as minhas pastas são despejadas na partição sem as pastas apropriadas.

Gostaria de montar /var, /homee /tmppara a partição separada; alguém pode me guiar nisso?

toffee.beanns
fonte
Você criou uma partição extra para cada um dos diretórios ou apenas um?
Mreithub 21/05
@mreithub eu gostaria que fosse idealmente tudo armazenado na mesma partição e varia apenas com a pasta. dessa forma, é muito mais simples para mim, sem ter que me preocupar com o espaço.
Toffee.beanns
11
Eu não recomendo colocar /varem uma partição separada. Não há benefício nisso. Mantenha o sistema operacional inteiro em uma única partição ( /). Use partições separadas apenas para itens que não são o SO - dados do usuário /home, spool de correio (se você tiver um grande) /var/mail, bancos de dados em, por exemplo , /var/lib/mysqlou /srv...
Gilles 'SO- stop be evil'
7
@Gilles " Não há benefício nisso " ?????? (Talvez eu precise de mais pontos de interrogação). Claro que há um benefício nisso. / é principalmente estático. / var é quase inteiramente dinâmico. Se você montar / var em uma partição separada, poderá montar a partição raiz somente leitura. Há muitas situações em que isso é uma coisa boa ™.
Auspex

Respostas:

73

1. Primeiro, você precisa de algum espaço não alocado para criar as partições para cada ponto de montagem (/ var, / home, / tmp). Use Gparted para isso.

2. Então você precisa criar os sistemas de arquivos para essas partições (também pode ser feito com o Gparted) ou usar:

mkfs.ext4 /dev/sdaX

por exemplo, para criar um novo sistema de arquivos ext4 no dispositivo / dev / sdaX (substitua / dev / sdaX pelo seu próprio dispositivo)

3. Monte o novo sistema de arquivos em / mnt

mkdir /mnt/var        
mount /dev/sdaX /mnt/var

4. Vá para o modo de usuário único para que não haja atividade de rw no diretório durante o processo

init 1

5. Digite sua senha root.

6. Faça backup dos dados somente em var (não no próprio diretório / var)

cd /var
cp -ax * /mnt/var

7. Renomeie o diretório / var depois que seus dados foram transferidos com sucesso.

cd /
mv var var.old

8. Crie o novo diretório var

mkdir var

9. Desmonte a nova partição.

umount /dev/sdaX

10. Remonte-o como / var

mount /dev/sdaX /var

11. Edite o arquivo / etc / fstab para incluir a nova partição, com / var como o ponto de montagem, para que seja montado automaticamente na inicialização.

/dev/sdaX       /var     ext4    defaults    0 0

12. Repita as etapas de 1 a 11 para / home e / tmp.

13. Finalmente, retorne ao modo multitarefa.

init 5
cioby23
fonte
Sim, eu estava pensando em usar o gparted. obrigado pela resposta. Estou planejando reservar um espaço de 30 GB para essas poucas pastas, na verdade / home, / tmp, / var /, / opt, / usr /, você tem um indicador aproximado de quanto devo dar de acordo (para um servidor de hospedagem simples) ?
Toffee.beanns
11
eu estava olhando para usar o lvm, isso seria melhor em comparação com o gparted?
Toffee.beanns
LVM é um tópico completamente diferente. O LVM é usado como uma camada para criar volumes lógicos sobre os discos rígidos físicos. Gparted é apenas a ferramenta para criar os volumes físicos do LVM.
cioby23
11
Na verdade, cp -ax * /mnt/varé uma péssima idéia , porque ignorará arquivos / diretórios ocultos. Preferir cp -ax . /mnt/var. (@ cioby23, eu acho que você deve atualizar a sua resposta)
berbt
6
Por favor, adicione uma final init 5à resposta.
Robert Pollak
16

Se você quiser usá-los todos na mesma partição, poderá usar LVMou três montagens simples de ligação.

Para criar uma solução baseada em ligação, você

  1. criar uma partição com um sistema de arquivos
  2. vá para o modo de recuperação (um único usuário ainda precisa de algumas pastas)
  3. monte-o como /mnt/data
  4. Mova todas as pastas que deseja mover. Usando cpe mv dir dir.oldpode ser mais seguro, mas desde que eu fiz isso após a instalação, isso não me importava.

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. criar entradas apropriadas de montagem de ligação no fstab, por exemplo, tenho

    UUID=01234567-89abc-def0-1234-567890abcde /mnt/data         ext4          noatime,nodiratime,relatime                           0       0
    
    # Binds
    /mnt/data/opt                             /opt              none          bind                                                  0       0
    /mnt/data/home                            /home             none          bind                                                  0       0
    /mnt/data/usr                             /usr              none          bind                                                  0       0
    
  6. reiniciar

Fabian
fonte
Na mount(8)página de manual abaixo nodiratime, diz: If noatime option is set, this option is not needed.Existe uma vantagem de redundância em incluí-la de qualquer maneira?
brannerchinese 27/02
5

Pessoalmente, eu iria com a solução bind-mount do @ Fabian ou usaria links simbólicos:

  1. crie uma /etc/fstabentrada para a nova partição (use blkidpara obter o UUID correto para sua nova partição e não se esqueça de mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. Use mount -aou algo semelhante para montar a nova partição

  3. mova as pastas originais para sua nova partição:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. Criar links simbólicos

    ln -s /mnt/data/var /var
    ln -s /mnt/data/home /home
    # ...
    

Embora o método bind-mount seja provavelmente a solução de melhores práticas, prefiro esse porque você não acaba com listas dfe mountpartições desnecessariamente longas .

mreithub
fonte
11
O que acontece com os respectivos métodos se algo quiser / var antes de ser montado? Eu suspeito que o método bind será mais limpo, mas eu realmente não sei.
Auspex
@ Auspex Não deve haver diferença entre os dois métodos nesse sentido (já que todas as partições locais /etc/fstabsão montadas ao mesmo tempo durante a inicialização). Antes de serem /mnt/datamontados, todos os seus links simbólicos estariam "mortos", portanto, qualquer tentativa de leitura / gravação neles (e em subdiretórios inexistentes) falharia (com ENOENT, se bem me lembro). Com bind-mounts, você obtém praticamente o mesmo resultado, mas os programas podem realmente gravar na partição raiz (se tentarem ser espertos em diretórios inexistentes)
mreithub
11
Bem, isso não é estritamente verdade. O root é montado primeiro, e eu perguntei especificamente porque o conselho "raiz somente leitura" do Debian menciona a possibilidade de processos quererem acessar / var antes de serem montados. Mas, no meu caso, onde eu tenho um Raspberry Pi e configurei um sistema de arquivos somente leitura em / (porque o cartão SD fica corrompido quando a energia acaba na máquina), você está me encorajando que qualquer um desses métodos funcione . Nada será gravado no sistema de arquivos raiz, porque é RO, então ambos os casos resultarão em um erro.
Auspex
0

Além do procedimento dado cioby23, eu também tive que fazer:

  restorecon -R /var

para que o sshd inicie.

froner
fonte