Przeniesienie / var, / home do oddzielnej partycji

59

Po przeczytaniu tego przewodnika próbuję przenieść niektóre foldery (takie jak /vari /home) na osobną partycję:

3.2.1 Wybierz inteligentny schemat partycji

Udało mi się przenieść jeden folder z powodzeniem zgodnie z tym przewodnikiem.

Jednak wydaje się, że to nie działa w przypadku wielu folderów, a wszystkie moje foldery są zrzucane na partycję bez odpowiednich folderów.

Chciałbym zamontować /var, /homei /tmpna osobnej partycji; czy ktoś może mi w tym pomóc?

toffee.beanns
źródło
Czy stworzyłeś dodatkową partycję dla każdego z katalogów czy tylko jedną?
mreithub
@mreithub Chciałbym, aby wszystkie były idealnie przechowywane na tej samej partycji i różnią się tylko w zależności od folderu. w ten sposób jest mi o wiele łatwiej, nie martwiąc się o przestrzeń.
toffee.beanns
1
Nie polecam zakładania /varosobnej partycji. Nie ma z tego żadnych korzyści. Zachowaj cały system operacyjny na jednej partycji ( /). Używaj oddzielnych partycji tylko dla rzeczy, które nie są systemem operacyjnym - dane użytkownika /home, bufor poczty (jeśli masz duży) /var/mail, bazy danych np. /var/lib/mysqlLub /srv
Gilles
7
@Gilles „ Nie ma z tego korzyści ” ?????? (Może potrzebuję więcej znaków zapytania). Oczywiście jest to korzystne. / jest w większości statyczny. / var jest prawie całkowicie dynamiczny. Jeśli montujesz / var na osobnej partycji, możesz zamontować partycję root tylko do odczytu. Istnieje mnóstwo sytuacji, w których jest to Good Thing ™.
Auspex

Odpowiedzi:

73

1. Najpierw potrzebujesz trochę nieprzydzielonego miejsca, aby utworzyć partycje dla każdego punktu montowania (/ var, / home, / tmp). Użyj do tego Gparted.

2. Następnie musisz utworzyć systemy plików dla tych partycji (można to zrobić również w Gparted) lub użyć:

mkfs.ext4 /dev/sdaX

na przykład, aby utworzyć nowy system plików ext4 na urządzeniu / dev / sdaX (zamień / dev / sdaX na własne urządzenie)

3. Zamontuj nowy system plików w / mnt

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

4. Przejdź do trybu pojedynczego użytkownika, aby podczas procesu nie było żadnej aktywności rw w katalogu

init 1

5. Wprowadź hasło roota.

6. Utwórz kopię zapasową danych tylko w var (nie w samym katalogu / var)

cd /var
cp -ax * /mnt/var

7. Zmień nazwę katalogu / var po pomyślnym przesłaniu danych.

cd /
mv var var.old

8. Utwórz nowy katalog var

mkdir var

9. Odmontuj nową partycję.

umount /dev/sdaX

10. Zamontuj ponownie jako / var

mount /dev/sdaX /var

11. Edytuj plik / etc / fstab, aby uwzględnić nową partycję, przy czym / var jest punktem montowania, aby był automatycznie montowany podczas rozruchu.

/dev/sdaX       /var     ext4    defaults    0 0

12. Powtórz kroki 1-11 dla / home i / tmp.

13. Wreszcie powróć do trybu wielozadaniowości.

init 5
cioby23
źródło
tak, myślałem o użyciu gparted. Dziękuję za odpowiedź. planuję przeznaczyć 30 GB miejsca dla tych kilku folderów, tak naprawdę / home, / tmp, / var /, / opt, / usr /, czy masz przybliżoną ocenę tego, ile powinienem odpowiednio dać (dla prostego serwera hostingowego) ?
toffee.beanns
1
szukałem lvm, czy byłoby lepiej w porównaniu do gparted?
toffee.beanns
LVM to zupełnie inny temat. LVM służy jako warstwa do tworzenia woluminów logicznych na fizycznych dyskach twardych. Gparted to tylko narzędzie do tworzenia woluminów fizycznych LVM.
cioby23
1
Właściwie cp -ax * /mnt/varto zły pomysł , ponieważ zignoruje ukryte pliki / katalogi. Wolą cp -ax . /mnt/var. (@ cioby23, myślę, że powinieneś zaktualizować swoją odpowiedź)
berbt
6
Dodaj końcowy init 5do odpowiedzi.
Robert Pollak,
16

Jeśli chcesz używać ich wszystkich na tej samej partycji, możesz użyć jednego LVMlub trzech prostych montowań powiązań.

Aby utworzyć rozwiązanie oparte na wiązaniu

  1. utwórz partycję z systemem plików
  2. przejdź do trybu ratunkowego (pojedynczy użytkownik nadal potrzebuje niektórych folderów)
  3. zamontuj jako /mnt/data
  4. Przenieś wszystkie foldery, które chcesz przenieść. Korzystanie cpi mv dir dir.oldmoże być bezpieczniejsze, ale ponieważ zrobiłem to po instalacji, nie miało to dla mnie znaczenia.

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. utwórz odpowiednie wpisy montowania powiązań w fstab, na przykład mam

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

fabiański
źródło
Na mount(8)stronie podręcznika pod nodiratimenim jest napisane: If noatime option is set, this option is not needed.Czy i tak jest korzyść z redundancji?
brannerchinese
5

Osobiście wybrałbym rozwiązanie montowania binda @ Fabiana lub użyłem dowiązań symbolicznych:

  1. utwórz /etc/fstabwpis dla nowej partycji (użyj, blkidaby uzyskać odpowiedni identyfikator UUID dla nowej partycji i nie zapomnij mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. Użyj mount -alub coś podobnego do zamontowania nowej partycji

  3. przenieś oryginalne foldery na nową partycję:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. Twórz dowiązania symboliczne

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

Chociaż metoda bind-mocowanie jest chyba najlepszym rozwiązaniem praktyka I niby preferują ten jeden, bo nie skończy się niepotrzebnie długich dfi mountdziałowych list.

mreithub
źródło
1
Co dzieje się z odpowiednimi metodami, jeśli coś chce / var przed zamontowaniem? Raczej podejrzewam, że metoda wiązania będzie czystsza, ale tak naprawdę nie wiem.
Auspex
@Auspex Nie powinno być różnicy między tymi dwiema metodami w tym względzie (ponieważ wszystkie lokalne partycje /etc/fstabsą montowane w tym samym czasie podczas rozruchu). Przed /mnt/datazamontowaniem wszystkie dowiązania symboliczne byłyby „martwe”, więc każda próba odczytu / zapisu na nich (i na nieistniejących katalogach) zakończyła się niepowodzeniem (z ENOENT, jeśli dobrze pamiętam). W przypadku montowania powiązań uzyskuje się prawie taki sam wynik, ale programy mogą faktycznie zapisywać na partycji głównej (jeśli starają się być mądre w kwestii nieistniejących katalogów)
mreithub
1
To nie do końca prawda. Root jest montowany jako pierwszy, a ja specjalnie zapytałem, ponieważ rada Debiana „root tylko do odczytu” wspomina o możliwości procesów chcących uzyskać dostęp / var przed zamontowaniem. Ale w moim przypadku, w którym mam Raspberry Pi i skonfigurowałem system plików tylko do odczytu na / (ponieważ karta SD ciągle ulega uszkodzeniu, gdy zasilanie zostaje wyłączone na maszynę), zachęcasz mnie, że którakolwiek metoda zadziała . Nic nie zapisze się w głównym systemie plików, ponieważ jest to RO, więc w obu przypadkach wystąpi błąd.
Auspex
0

Oprócz procedury podanej cioby23 musiałem też zrobić:

  restorecon -R /var

aby sshd się zaczął.

froner
źródło