Verschieben von / var, / home, um die Partition zu trennen

59

Ich versuche, einige Ordner (wie z. B. /varund /home) nach dem Lesen dieses Handbuchs auf eine separate Partition zu verschieben:

3.2.1 Wählen Sie ein intelligentes Partitionsschema

Nach dieser Anleitung konnte ich einen Ordner erfolgreich verschieben .

Es scheint jedoch nicht für mehrere Ordner zu funktionieren, und alle meine Ordner werden in die Partition ohne richtige Ordner gespeichert.

Ich möchte montieren /var, /homeund /tmpauf die separate Partition; kann mich jemand dazu führen?

toffee.beanns
quelle
Haben Sie für jedes der Verzeichnisse eine zusätzliche Partition erstellt oder nur eine?
mreithub
@mreithub Ich möchte, dass es idealerweise alle in der gleichen Partition gespeichert werden und nur mit Ordner variiert. auf diese weise ist es für mich viel einfacher, sich keine sorgen um den platz machen zu müssen.
toffee.beanns
1
Ich empfehle nicht, /vareine separate Partition zu erstellen. Das hat keinen Vorteil. Lassen Sie das gesamte Betriebssystem auf einer einzelnen Partition ( /). Verwenden Sie separate Partitionen nur für Dinge , die nicht die OS sind - Benutzerdaten in /home, Mail - Spool (wenn Sie ein großes haben) in /var/mailDatenbanken zB in /var/lib/mysqloder /srv...
Gilles ‚SO- Anschlag, der böse‘
7
@ Gilles " Es gibt keinen Vorteil " ?????? (Vielleicht brauche ich mehr Fragezeichen). Das hat natürlich einen Vorteil. Ich bin meistens statisch. / var ist fast vollständig dynamisch. Wenn Sie / var auf einer separaten Partition mounten, können Sie die Root-Partition schreibgeschützt mounten. Es gibt eine Menge Situationen, in denen das eine gute Sache ist.
Auspex

Antworten:

73

1. Zuerst benötigen Sie nicht zugewiesenen Speicherplatz, um die Partitionen für jeden Einhängepunkt (/ var, / home, / tmp) zu erstellen. Verwenden Sie hierfür Gparted.

2. Anschließend müssen Sie die Dateisysteme für diese Partitionen erstellen (kann auch mit Gparted durchgeführt werden) oder Folgendes verwenden:

mkfs.ext4 /dev/sdaX

Zum Beispiel, um ein neues ext4-Dateisystem auf dem / dev / sdaX-Gerät zu erstellen (ersetzen Sie / dev / sdaX durch Ihr eigenes Gerät)

3. Hängen Sie das neue Dateisystem unter / mnt ein

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

4. Wechseln Sie in den Einzelbenutzermodus, damit während des Vorgangs keine RW-Aktivität im Verzeichnis stattfindet

init 1

5. Geben Sie Ihr Root-Passwort ein.

6. Daten nur in var sichern (nicht im Verzeichnis / var selbst)

cd /var
cp -ax * /mnt/var

7. Benennen Sie das Verzeichnis / var um, nachdem Ihre Daten erfolgreich übertragen wurden.

cd /
mv var var.old

8. Erstellen Sie das neue var-Verzeichnis

mkdir var

9. Hängen Sie die neue Partition aus.

umount /dev/sdaX

10. Hängen Sie es erneut als / var ein

mount /dev/sdaX /var

11. Bearbeiten Sie die Datei / etc / fstab, um die neue Partition einzuschließen, wobei / var der Einhängepunkt ist, damit sie beim Booten automatisch eingehängt wird.

/dev/sdaX       /var     ext4    defaults    0 0

12. Wiederholen Sie die Schritte 1 bis 11 für / home und / tmp.

13. Kehren Sie schließlich zum Multitasking-Modus zurück.

init 5
cioby23
quelle
Ja, ich habe darüber nachgedacht, gparted zu verwenden. Danke für die Antwort. Ich plane, 30 GB Speicherplatz für diese wenigen Ordner tatsächlich / home, / tmp, / var /, / opt, / usr / vorzusehen. Haben Sie eine ungefähre Einschätzung, wie viel ich entsprechend geben sollte (für einen einfachen Hosting-Server)? ?
toffee.beanns
1
Ich habe nachgeschaut, wie man lvm benutzt. Wäre das besser als gparted?
toffee.beanns
LVM ist ein ganz anderes Thema. LVM wird als Layer verwendet, um logische Volumes auf physischen Festplatten zu erstellen. Gparted ist nur das Tool zum Erstellen der physischen LVM-Volumes.
Cioby23
1
Eigentlich cp -ax * /mnt/varist das eine schlechte Idee , da versteckte Dateien / Verzeichnisse ignoriert werden. Lieber cp -ax . /mnt/var. (@ Cioby23, ich denke, Sie sollten Ihre Antwort aktualisieren)
berbt
6
Bitte fügen Sie init 5der Antwort ein Finale hinzu .
Robert Pollak
16

Wenn Sie sie alle auf derselben Partition verwenden möchten, können Sie entweder LVMdrei einfache Bindungs-Mounts verwenden.

So erstellen Sie eine bindungsbasierte Lösung

  1. Erstellen Sie eine Partition mit einem Dateisystem
  2. in den Rettungsmodus wechseln (Einzelbenutzer benötigt noch einige Ordner)
  3. montiere es als /mnt/data
  4. Verschieben Sie alle Ordner, die Sie verschieben möchten. Verwenden cpund mv dir dir.oldvielleicht sicherer, aber da ich dies nach der Installation tat, war es mir egal.

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. Erstellen Sie entsprechende Bind-Mount-Einträge in Fstab, zum Beispiel habe ich

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

Fabian
quelle
In der mount(8)Manpage darunter nodiratimesteht: If noatime option is set, this option is not needed.Gibt es einen Redundanzvorteil, wenn man es trotzdem einbindet?
Brannerchinese
5

Ich persönlich würde mich entweder für die Bind-Mount-Lösung von @ Fabian entscheiden oder Symlinks verwenden:

  1. Erstellen Sie einen /etc/fstabEintrag für die neue Partition (verwenden Sie blkid, um die richtige UUID für Ihre neue Partition zu erhalten, und vergessen Sie nicht, dies zu tun mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. Verwenden Sie mount -aoder ähnliches, um die neue Partition zu mounten

  3. Verschieben Sie die ursprünglichen Ordner auf Ihre neue Partition:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. Erstellen Sie Symlinks

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

Obwohl die Bind-Mount-Methode wahrscheinlich die Best-Practice-Lösung ist, bevorzuge ich diese, weil Sie nicht unnötig lange dfund mountPartitionslisten haben.

mreithub
quelle
1
Was passiert mit den jeweiligen Methoden, wenn etwas / var möchte, bevor es gemountet wird? Ich vermute eher, dass die Bindemethode sauberer sein wird, aber ich weiß es wirklich nicht.
Auspex
@Auspex In dieser Hinsicht sollte es keinen Unterschied zwischen den beiden Methoden geben (da afaik alle lokalen Partitionen in /etc/fstabwährend des Bootens zur gleichen Zeit gemountet werden). Bevor es /mnt/dataeingehängt wird, wären alle Ihre Symlinks "tot", sodass jeder Lese- / Schreibversuch auf ihnen (und auf nicht vorhandenen Unterverzeichnissen) fehlschlagen würde (mit ENOENT, wenn ich mich richtig erinnere). Mit bind-mounts erhalten Sie so ziemlich das gleiche Ergebnis, aber Programme schreiben möglicherweise tatsächlich auf die Root-Partition (wenn sie versuchen, über nicht vorhandene Verzeichnisse klug zu sein)
mreithub
1
Nun, das stimmt nicht ganz. Root wird zuerst gemountet, und ich habe speziell gefragt, weil Debians "Nur-Lese-Root" -Hinweis die Möglichkeit erwähnt, dass Prozesse vor dem Mounten auf / var zugreifen möchten. Aber in meinem Fall, in dem ich einen Raspberry Pi habe und ein schreibgeschütztes Dateisystem auf / eingerichtet habe (weil die SD-Karte immer beschädigt wird, wenn der Computer ausgeschaltet wird), ermutigen Sie mich, dass beide Methoden funktionieren . Es wird nichts in das Root-Dateisystem geschrieben, da es sich um RO handelt. In beiden Fällen wird ein Fehler ausgegeben.
Auspex
0

Zusätzlich zu der Prozedur von cioby23 musste ich auch Folgendes tun:

  restorecon -R /var

damit sshd startet.

Froner
quelle