Spostare / var, / home per separare la partizione


59

Sto tentando di spostare alcune cartelle (come /vare /home) in una partizione separata dopo aver letto questa guida:

3.2.1 Scegliere uno schema di partizione intelligente

Sono stato in grado di spostare con successo una cartella seguendo questa guida.

Tuttavia, non sembra funzionare per più cartelle e tutte le mie cartelle vengono scaricate nella partizione senza cartelle appropriate.

Vorrei montare /var, /homee /tmpsulla partizione separata; qualcuno può guidarmi su questo?


Hai creato una partizione aggiuntiva per ognuna delle directory o solo una?
mreithub,

@mreithub Vorrei che fosse idealmente tutto memorizzato nella stessa partizione e varia solo con la cartella. in questo modo è molto più semplice per me, non doversi preoccupare dello spazio.
toffee.beanns,

1
Non consiglio di mettere /varsu una partizione separata. Non ci sono benefici. Mantieni l'intero sistema operativo su una singola partizione ( /). Usa partizioni separate solo per cose che non sono il sistema operativo - dati utente /home, spool di posta (se ne hai uno grande) /var/mail, database in es. /var/lib/mysqlO /srv...
Gilles "SO - smetti di essere malvagio"

7
@Gilles " Non ci sono vantaggi " ?????? (Forse ho bisogno di più punti interrogativi). Naturalmente c'è un vantaggio. / è principalmente statico. / var è quasi interamente dinamico. Se si monta / var su una partizione separata, è possibile montare la partizione di root in sola lettura. Ci sono un sacco di situazioni in cui questa è una buona cosa ™.
Auspex,

Risposte:


73

1. Innanzitutto è necessario dello spazio non allocato per creare le partizioni per ciascun mountpoint (/ var, / home, / tmp). Usa Gparted per questo.

2. Quindi devi creare i filesystem per quelle partizioni (può essere fatto anche con Gparted) o usare:

mkfs.ext4 /dev/sdaX

ad esempio per creare un nuovo filesystem ext4 sul dispositivo / dev / sdaX (sostituire / dev / sdaX con il proprio dispositivo)

3. Montare il nuovo filesystem in / mnt

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

4. Passare alla modalità utente singolo in modo che non vi siano attività rw nella directory durante il processo

init 1

5. Immettere la password di root.

6. Backup dei dati solo in var (non nella directory / var stessa)

cd /var
cp -ax * /mnt/var

7. Rinominare la directory / var dopo che i dati sono stati trasferiti correttamente.

cd /
mv var var.old

8. Creare la nuova directory var

mkdir var

9. Smontare la nuova partizione.

umount /dev/sdaX

10. Rimontarlo come / var

mount /dev/sdaX /var

11. Modifica il file / etc / fstab per includere la nuova partizione, con / var come punto di montaggio, in modo che venga automaticamente montato all'avvio.

/dev/sdaX       /var     ext4    defaults    0 0

12. Ripetere i passaggi 1-11 per / home e / tmp.

13. Infine, torna alla modalità multitasking.

init 5

sì, stavo pensando di usare gparted. Grazie per la risposta. sto programmando di mettere da parte 30 GB di spazio per queste poche cartelle in realtà / home, / tmp, / var /, / opt, / usr /, hai un indicatore approssimativo di quanto dovrei dare di conseguenza (per un semplice server di hosting) ?
toffee.beanns,

1
stavo guardando su usando lvm, sarebbe meglio rispetto a gparted?
toffee.beanns,

LVM è un argomento completamente diverso. LVM viene utilizzato come layer per creare volumi logici su hard disk fisici. Gparted è solo lo strumento per creare i volumi fisici LVM.
cioby23,

1
In realtà, cp -ax * /mnt/varè una cattiva idea , perché ignorerà i file / le directory nascosti. Prefer cp -ax . /mnt/var. (@ cioby23, penso che dovresti aggiornare la tua risposta)
berbt,

6
Aggiungi un finale init 5alla risposta.
Robert Pollak,

16

Se si desidera utilizzarli tutti sulla stessa partizione, è possibile utilizzare LVMo tre semplici attacchi di bind.

Per creare una soluzione basata sul bind tu

  1. crea una partizione con un filesystem
  2. vai in modalità di salvataggio (l'utente singolo ha ancora bisogno di alcune cartelle)
  3. montalo come /mnt/data
  4. Sposta tutte le cartelle che desideri spostare. L'uso cpe mv dir dir.oldpotrebbe essere più sicuro, ma dal momento che l'ho fatto dopo l'installazione non mi importava.

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. creare voci di mount bind appropriate in fstab, per esempio ho

    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. riavvio


Nella mount(8)pagina man sotto nodiratimedice: If noatime option is set, this option is not needed.C'è un vantaggio di ridondanza nel includerlo comunque?
Brannerchinese,

5

Personalmente sceglierei la soluzione bind-mount di @ Fabian o utilizzare i link simbolici:

  1. creare la /etc/fstabvoce per la nuova partizione (utilizzare blkidper ottenere l'UUID giusto per la nuova partizione e non dimenticare di mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. Utilizzare mount -ao qualcosa di simile per montare la nuova partizione

  3. sposta le cartelle originali nella nuova partizione:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. Crea collegamenti simbolici

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

Anche se il metodo bind-mount è probabilmente la soluzione delle migliori pratiche, preferisco questo perché non si finisce con elenchi di partizioni dfe inutilmente lunghi mount.


1
Cosa succede con i rispettivi metodi se qualcosa vuole / var prima che sia montato? Piuttosto sospetto che il metodo bind sarà più pulito, ma davvero non lo so.
Auspex,

@Auspex Non ci dovrebbe essere alcuna differenza tra i due metodi a questo proposito (dato che tutte le partizioni locali /etc/fstabsono montate contemporaneamente durante l'avvio). Prima /mnt/datache vengano montati tutti i collegamenti simbolici sarebbero "morti", quindi qualsiasi tentativo di lettura / scrittura su di essi (e su sottodir inesistenti) fallirebbe (con ENOENT se ricordo bene). Con i bind-mount ottieni praticamente lo stesso risultato, ma i programmi potrebbero effettivamente scrivere sulla partizione di root (se provano a essere furbi sulle directory inesistenti)
mreithub

1
Bene, questo non è rigorosamente vero. Il root viene montato per primo, e ho chiesto espressamente perché il consiglio di "sola lettura" di Debian menziona la possibilità che i processi vogliano accedere a / var prima che venga montato. Ma nel mio caso, dove ho un Raspberry Pi e ho impostato un filesystem di sola lettura su / (perché la scheda SD continua a corrompersi quando si spegne la macchina), mi stai incoraggiando che entrambi i metodi funzioneranno . Nulla scriverà sul filesystem di root, perché è RO, quindi entrambi i casi comporteranno un errore.
Auspex,

0

Oltre alla procedura data cioby23, dovevo anche fare:

  restorecon -R /var

per avviare sshd.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.