Jak przenieść / var na inną istniejącą partycję?

16

Mam partycję /, która zawiera / var i jest za mała. Mam inną istniejącą partycję z wystarczającą ilością miejsca.

Oto mój df:

File system          Size. Occ. Avai. %Ful. Monté sur
/dev/sda1             5,0G  4,5G  289M  95% /
tmpfs                 242M     0  242M   0% /lib/init/rw
udev                   10M  2,7M  7,4M  27% /dev
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda2              15G  406M   14G   3% /home

Jak mogę przenieść folder / var z sda1 na sda2?

Jérémie
źródło

Odpowiedzi:

19

Przejdź do trybu pojedynczego użytkownika i upewnij się, że proces zapisu do /varzostał zatrzymany. (Sprawdź za pomocą lsof | grep /var)

  • mkdir -p /home/var
  • rsync -va /var /home/var
  • mv /var /var.old# możesz usunąć /var.oldpo zakończeniu, aby odzyskać miejsce
  • mkdir -p /var
  • mount -o bind /home/var /var
  • zaktualizuj swój, /etc/fstababy permanentny bind-mount był stały.

/etc/fstab

 /home/var /var        none    bind
Zoredache
źródło
Dzięki! Jak mogę wejść w tryb pojedynczego użytkownika? Czy folder „var” pozostanie w / home?
Jérémie,
Tak, zawsze będzie /home/varkatalog, jeśli rozwiążesz problem w ten sposób. Jednym ze sposobów przejścia do trybu pojedynczego użytkownika jest ponowne uruchomienie i wybranie trybu pojedynczego użytkownika z menu Boot.
Zoredache,
Nie jestem do końca pewien, czy to zadziała przez cały czas. Jeśli używasz nowszej wersji (wheezy), możesz być w porządku, ponieważ ma on system plików / run. OTOH: na początku procesu rozruchu pliki można otworzyć w katalogu / var, zanim zostanie on podłączony.
cstamas
1
@cstamas, Posiadanie / var na oddzielnym systemie plików jest obsługiwane i zawsze tak było. Posiadanie / var na osobnej jest nawet sugerowane jako dobra rzecz w FHS i oficjalnych dokumentach Debiana.
Zoredache,
Ok, myślę, że masz rację. Dziwnie było mi to robić z oprawkami do wiązania.
cstamas
5

Możesz także użyć:

 mkdir /home/var
 <move contents of /var to /home/var -- however you want; EX: mv /var/* /home/var>
 mv /var /var.old
 ln -s /home/var /var

Wydaje się to o wiele łatwiejsze niż rozwiązywanie problemów z fstab i montowaniem.

mdpc
źródło
1
Nie jestem pewien, dlaczego ktokolwiek miałby to głosować w dół. To działałoby idealnie dobrze. Łącze sym-link powinno działać poprawnie. Po prostu używam oprawek do wiązania do innych rzeczy, więc zwykle o nich myślę.
Zoredache,
1
Aby dodać do tego, może nie być tak bezpiecznie, ale w rzeczywistości działa. Ostatnio zrobiłem to na maszynie przed wprowadzeniem jej do produkcji. Powinienem zachować ostrożność, jeśli jest to maszyna, która była używana lub działa wiele procesów. W moim przypadku był to nowy serwer przeznaczony do uruchamiania tylko tomcat.
AJ Brown,
1
Symlinkowanie / var działa, ale zamiast tego wolę umieścić wpis w / etc / fstab, aby zapamiętać siebie na której partycji / woluminie umieściłem i dlaczego (możesz dodawać komentarze). Jest to dla mnie bardziej zrozumiałe, co muszę zmienić w konfiguracji, jeśli muszę coś zmienić w swoim sprzęcie.
gerlos
1
Nie widzę, jak to by działało. Chcę, żeby to działało, ale podstawowe rzeczy, takie jak init używają / var, prawda?
Sue Spence
1

Przejdź /varbez przechodzenia w tryb jednego użytkownika

Kiedy przejęłem nowy serwer wirtualny, który został dla mnie udostępniony przez firmę hostingową mojego pracodawcy, utworzyłem dodatkowe woluminy logiczne vari homektóre były zwykłymi katalogami na partycji głównej. Ponieważ dostawca serwera wirtualnego nie zapewnił interfejsu podobnego do KVM, za pomocą którego mógłbym uzyskać dostęp do serwera w trybie pojedynczego użytkownika, powyższe odpowiedzi nie dotyczyły mojej konfiguracji. Mam nadzieję, że ta odpowiedź będzie przydatna dla innych osób w podobnej sytuacji (zachowałem szczegóły LVM, ale można je pominąć, ponieważ nie jest szczególnie istotne, czy nowy system plików jest tworzony na woluminie logicznym, czy na partycji dysku).

Utwórz i użyj nowego /varsystemu plików za pomocą LVM

Utwórz system plików dla nowego varwoluminu, zamontuj go (używając katalogu tymczasowego) i skopiuj pliki z bieżącego /vardo nowego systemu plików. Podczas kopiowania plików rsyncużyj -a, --archiveopcji zachowania znaczników czasu, własności, trybów itp. Oraz -X, --xattrsopcji zachowania rozszerzonych atrybutów, takich jak etykiety bezpieczeństwa używane przez AppArmor i SELinux.

sudo lvcreate -L 60GB -n var VolGroup00
sudo mkfs.ext4 /dev/VolGroup00/var
sudo mkdir /var.new
sudo mount /dev/VolGroup00/var /var.new
sudo rsync -raX /var/ /var.new/

Zaktualizuj tabelę systemu plików

Skonfiguruj nowy system plików, który będzie używany jako nowy punkt montowania, /vardodając następujący wiersz do /etc/fstab. Zauważ, że 0jest używany jako numer przepustki (ostatnie pole), aby system plików nie był automatycznie sprawdzany ( fsck) po określonej liczbie ponownych uruchomień (nie mam dostępu do zalogowania się na serwerze w trybie pojedynczego użytkownika).

/dev/mapper/VolGroup00-var    /var    ext4  defaults  0 0

Ponieważ nie mogę przejść do trybu pojedynczego użytkownika, uruchom ponownie komputer, aby użyć tego nowego woluminu jako /var.

Odzyskaj miejsce na dysku z głównego systemu plików

Po ponownym uruchomieniu komputera wykonaj następujące czynności, aby wyczyścić katalog tymczasowy i usunąć stare /varpliki z głównego systemu plików:

  1. Usuń tymczasowy punkt montowania:

    sudo rmdir /var.new
    
  2. Utwórz nowy punkt podłączenia, aby utworzyć alternatywną ścieżkę do plików w starym /varkatalogu w głównym systemie plików (jest on obecnie „maskowany” przez nowy /varsystem plików zamontowany w katalogu):

    sudo mkdir /old-root
    sudo mount /dev/mapper/VolGroup00-root /old-root/
    sudo rm -rf /old-root/var/*
    sudo umount /old-root/
    sudo rmdir /old-root/
    
Anthony G - sprawiedliwość dla Moniki
źródło