Skąd Linux wie, gdzie jest jego partycja wymiany?

13

Przeczytałem, że musisz umieścić partycję wymiany na HDD zamiast na SSD.

Moje pytania są następujące:

  • Kiedy i jak „sprawdzanie” odbywa się przez dystrybucję (lub coś innego) w celu znalezienia partycji wymiany?
  • Czy dzieje się to podczas uruchamiania?
  • Sprawdza tylko wszystkie dostępne dyski i szuka partycji z flagą „swap”?
  • Co się stanie, jeśli istnieje kilka takich partycji?
  • Ponadto, ile partycji wymiany muszę mieć, jeśli uruchomię na przykład dwie różne dystrybucje na tym samym dysku, powiedzmy Fedora i Ubuntu?
Ne Nenne
źródło
17
Zauważ, że zamiana na SSD byłaby naprawdę świetną zamianą (macOS robi to od wieków). Będzie jednak wykonywać dodatkowe operacje odczytu / zapisu na dysku SSD, co może skrócić jego żywotność.
Nonyme
20
Gdzie przeczytałeś, że swap powinien znajdować się na dysku twardym, a nie SSD? Ile lat miał artykuł lub komentarz? Nowoczesne dyski SSD są znacznie lepsze w wyrównywaniu zużycia i nie zawodzą po wielokrotnym zapisie, tak jak wtedy, gdy dyski SSD były nowe. Ponadto, jeśli masz komputer, który ma tylko dyski SSD, to naprawdę nie masz dużego wyboru, poza tym, że w ogóle nie korzystasz z wymiany
JDS 20'18
2
@zakinster: Co powiesz na to, kiedy dysk o pojemności 1 TB jest zawsze pełny? Zapotrzebowanie na pamięć wzrosło wraz z przepisami dotyczącymi przechowywania.
Wyścigi lekkości na orbicie
3
Innymi słowy, „tak, zgadzam się, w przeciwieństwie do mojego poprzedniego stwierdzenia, faktyczny rozmiar dysku jest nieistotny - tyle go używasz”
Lightness Races in Orbit
6
@DavidSchwartz A jeśli „używasz swapów w znacznych ilościach”, podczas gdy dysk SSD spowoduje znacznie mniej zauważalną utratę wydajności systemu niż dysk twardy, lepszym rozwiązaniem nadal będzie dodanie większej ilości pamięci RAM do systemu lub zmniejszenie liczby wirtualnych ślad w pamięci obciążenia w jakiś sposób, aby zatrzymać znaczące wykorzystanie wymiany. Zauważ też, że istnieje różnica między systemem działającym długo, który wypełnił swap prawie nigdy nie używanymi danymi, a systemem, który aktywnie zamienia i skanuje ...
twalberg

Odpowiedzi:

24

Statycznie skonfigurowana przestrzeń wymiany (typ używany przez prawie każdą dystrybucję) jest konfigurowana /etc/fstabtak jak systemy plików.

Typowy wpis wygląda mniej więcej tak:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

Możesz także zobaczyć jedno z nich discardlub nofailpodać je w polu flagi (czwarte pole). Każda taka linia odpowiada jednemu obszarowi wymiany (nie musi to być partycja, możesz mieć pliki wymiany, a nawet całe dyski wymiany).

W niektórych naprawdę specyficznych przypadkach zamiast tego możesz dynamicznie skonfigurować przestrzeń wymiany, chociaż jest to raczej rzadkie, ponieważ może powodować problematyczne zachowanie związane z zarządzaniem pamięcią. W takim przypadku konfiguracja jest obsługiwana całkowicie przez komponent przestrzeni użytkownika, który tworzy i włącza pliki wymiany w razie potrzeby w czasie wykonywania.

O ile potrzebujesz, to skomplikowane pytanie, na które należy odpowiedzieć, ale liczba różnych dystrybucji Linuksa, które planujesz uruchomić, nie ma na to wpływu, chyba że chcesz być w stanie uruchomić jedną dystrybucję, podczas gdy inna jest w stanie hibernacji (a ty prawdopodobnie nie chcę tego robić, ponieważ jest to naprawdę łatwy sposób zepsuć system).

Kiedy uruchomisz instalator dla prawie każdej dużej dystrybucji (w tym Fedory, OpenSUSE, Linux Mint, Debian i Ubuntu), wykryje on istniejące partycje wymiany w systemie i doda je do konfiguracji dystrybucji, którą jesteś instalowanie (chyba że wybierzesz ręczne partycjonowanie), aw większości przypadków spowoduje to rozsądną konfigurację systemu.

Poza tym osobiście sugerowałbym unikanie posiadania wielu partycji wymiany, chyba że mówisz o systemie serwera z dużą ilością dysków, a nawet wtedy naprawdę musisz wiedzieć, co robisz, aby skonfigurować, aby działał dobrze .

Austin Hemmelgarn
źródło
Jeśli masz 2 dystrybucje Linuksa, możesz mieć jedną partycję wymiany dla systemu ... więc możesz spróbować hibernować i wznowić ... (lepiej użyć różnych użytkowników BTW i powinieneś także potrzebować różnych /tmppartycji / katalogu). Prawdopodobnie w takim przypadku lepiej mieć maszyny wirtualne ...
Hastur
Więc co sugeruje się, aby zrobić, jeśli mają dedykowaną partycję do wymiany na tym samym dysku SSD, na którym jest zainstalowany system operacyjny Linux, jednak wydaje się, że tak naprawdę nie ma wymiany ani nie jest w użyciu. Jeśli uruchomię systemctl --all | grep swap, odzyskam dwa wyniki. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapi swap.targetoba są AKTYWNE = nieaktywne, a SUB = martwe . Jak sprawić, aby mój system korzystał z obszaru wymiany?
Rockin4Life33
21

powiedzmy, że Fedora i Ubuntu?

… Oba są obecnie systemowymi systemami operacyjnymi.

Co dzieje się w systemowych systemach operacyjnych

natywny mechanizm

Systemd stosuje różne rodzaje jednostek. .mountpliki jednostek nakazują mu montowanie woluminów. .swappliki jednostek instruują go, aby poinformował jądro o partycjach wymiany. ( .servicepliki jednostek instruują go, jak uruchamiać usługi. itd.). Są to natywne mechanizmy systemowe. Aby je uchwalić, systemd sam odrzuca procesy potomne, które wykonują odpowiednie wywołania systemowe.

Jeśli użyjesz systemctlpolecenia (z --all) w takim systemie operacyjnym, powie ci on o załadowanych .swapjednostkach. Na przykład:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap załadowane aktywne aktywne / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap załadowany aktywny aktywny / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4
dev-sda5.swap załadowany aktywny aktywny / dev / sda5

Powie ci również o .mountjednostkach.

Administrator systemu może faktycznie napisać takie .swappliki jednostki ręcznie, tak jak XE można napisać .service, .socketi inne pliki jednostkowe ręcznie. systemd sam szuka plików jednostkowych w systemie plików. Są ich rodzimym mechanizmem.

Można nawet uzyskać systemd, aby pokazać ci, co jest w tych plikach jednostkowych i gdzie w systemie plików można je znaleźć:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Generowane automatycznie przez systemd-fstab-generator

[Jednostka]
SourcePath = / etc / fstab
Dokumentacja = man: fstab (5) man: systemd-fstab-generator (8)

[Zamiana]
What = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Opcje = sw
$ 

automatycznie generowane pliki jednostek

Można je pisać ręcznie. Zazwyczaj jednak takie .mounti .swapjednostkowe pliki są automatycznie generowane przez programy znane jako generatory . Dwa takie generatory to systemd-fstab-generatori systemd-gpt-auto-generator. Oba działają na początku procesu ładowania początkowego i w odpowiedzi na systemctl daemon-reloadpolecenie, i (jak widać powyżej) generują cały ładunek plików jednostkowych do nieudokumentowanego podkatalogu w /run/systemd/. systemd sam używa tylko tych wygenerowanych plików jednostkowych .

Poprzedni generator czyta /etc/fstab, rozpoznając kilka systemowych rozszerzeń tego formatu pliku. Jak zauważył w komentarzu odpowiedzi, tradycyjnie partycje wymiany mają Rodzaj montażu na swi tak będzie znaleźć, że inne systemy operacyjne rozpoznają rekordy swapowych w tej tabeli. Ale oprogramowanie dla Linuksa zastosowało alternatywną metodę rozpoznawania typu VFS , szukając go swapjako typu VFS. systemd-fstab-generatornie jest tutaj wyjątkiem i tak interpretuje /etc/fstabprzy konwersji na natywne mechanizmy.

Ten ostatni generator przetwarza tablicę partycji EFI, która znajduje się na tym samym dysku, na którym znajduje się partycja systemowa EFI, szukając pozycji tablicy partycji EFI, które mają różne dobrze znane GUID typu partycji . Jednym z tych identyfikatorów GUID jest konwencjonalny identyfikator GUID przypisany do partycji wymiany systemu Linux; a jeśli systemd-gpt-auto-generatorznajdzie partycję z tym GUID (który spełnia kryteria podane w systemd doco), utworzy .swapdla niej jednostkę; w ogóle nie jest /etc/fstabzaangażowany .

Oczywiście proces ten ma wiele skutków ubocznych. Na przykład, ponieważ /etc/fstabnie ma klucza podstawowego do tabeli, rekordy mogą mieć zduplikowane pola „spec” i „file” (tj. „What” i „where”). Jednak w natywnym mechanizmie systemowym pole „plik” (tzn. „Gdzie”) jest unikalnym kluczem dla .mountjednostek, osadzonym w nazwach jednostek. Żadne dwie .mountjednostki nie mogą tego udostępnić. W przypadku .swapjednostek pole „spec” (tj. „What”) jest unikatowym kluczem dla jednostek. Żadne dwie .swapjednostki nie mogą tego udostępnić. Tak więc nie wszystkie rekordy /etc/fstabsą koniecznie konwertowane na natywne mechanizmy i będą działać, zwłaszcza jeśli ludzie robią rzeczy takie jak lista tego samego punktu montowania dla dwóch różnych celów lub lista tej samej partycji wymiany na dwa różne sposoby.

Podobnie, ponieważ zostało to przetłumaczone /etc/fstabna mechanizm natywny, a mechanizm natywny systemd ma inne sposoby aktywacji jednostek , zachowanie jest nieco inne niż w niesystemowych systemach operacyjnych. .mountJednostka będzie domyślnie być automatycznie aktywowanysystemd-udevd , nawet po bootstrap, w odpowiedzi na pojawienie zamontowanego urządzenia pamięci masowej. Lub może być wymieniony jako a Wants=lub Requires=niektóre .servicelub .socketjednostki, co oznacza, że ​​zostanie (ponownie) aktywowany, gdy będą. Jest nawet RequiresMountsFor=.

programy instalacyjne i sposób systemowy

Tradycyjnie programy instalacyjne systemu operacyjnego i administrator systemu po ponownej konfiguracji systemu zapisywali swwpisy /etc/fstab. I w ten sposób natywny .mounti .swapjednostki są generowane automatycznie. Narzędzie instalacyjne / konfiguracyjne „wie”, gdzie został umieszczony plik wymiany, ponieważ w interfejsie użytkownika administrator systemu dokonał pewnego wyboru i zapisał /etc/fstabpasującą wartość. Czasami ten wybór polega na tym, że musisz zrobić ze mnie partycję wymiany w ramach instalacji. ; czasami jest to po prostu użyj partycji wymiany, którą znalazłeś już na płycie. (instalatorzy również patrzą na typy partycji).

Ale systematyczni ludzie mają pomysł na systemy operacyjne, które automatycznie konfigurują się z zasadniczo pustego /etcdrzewa, tak zwanych systemów bezstanowych , i na tym właśnie polegają mechanizmy takie jak generator odczytujący tablicę partycji EFI. W planie ludzi systemowych nie ma żadnych /etc/fstabdanych konfiguracyjnych, a nawet nie ma w nich żadnych trwałych danych konfiguracyjnych /etc, a wszystkie te informacje są wywnioskowane z zawartości tabeli partycji na dysku , przy każdym ładowaniu i każdym systemctl daemon-reload. Obecnie promują programy instalacyjne systemu operacyjnego, niż nie piszą/etc/fstab .

Oczywiście w tradycyjnym schemacie każdy system operacyjny może mieć swoją prywatną partycję wymiany i nie dotykać nawzajem partycji wymiany. I rzeczywiście, jeśli używasz hibernacji do dysku za pomocą partycji wymiany i spodziewasz się, że będziesz w stanie uruchomić wiele systemów operacyjnych podczas hibernacji ( co jest bardzo złym pomysłem, ponieważ bardzo łatwo jest spowodować uszkodzenie systemu plików w ten sposób ), to będzie niezbędny.

W schemacie systemowym, nawet jeśli system operacyjny nie jest jeszcze taki, jak ludzie systemowi go sobie wyobrażają i jest „bezstanowy”, działają wyżej wymienione generatory; i dlatego wszystkie partycje wymiany (na dysku ESP / root) z wymaganym typem partycji są automatycznie stosowane przez wszystkie systematyczne systemy operacyjne. Ponieważ będą udostępniać wszystkie automatycznie wykryte partycje wymiany, tak naprawdę nie trzeba tworzyć jednej partycji wymiany na zainstalowany system operacyjny.

Dalsza lektura

JdeBP
źródło
Bardzo miło - dziękuję za wyjaśnienie!
Andy Dalton
Jest taka część mnie, która chce głosować w dół tylko za mówienie o systemd. Ale oczywiście jest to niesprawiedliwe (a także systematyczne lub nie, nie oznacza, że ​​się mylisz) i tak zazwyczaj nie głosuję za niczym, ponieważ nigdy nie wydawało mi się to odpowiednim sposobem na bycie konstruktywnym. Jest to jednak miły napis, więc pomimo zobaczenia odniesień do Lennarta, głosowałem za odpowiedzią. Jeśli tylko włożysz w to wysiłek, należy to pochwalić. Przeczytałem krótko o bezpaństwowych śmieciach i to jest coś, co raczej ... Nawet nie jestem pewien, co to robi, więc zostawię to przy tym.
Pryftan
13

Historycznie partycja wymiany jest określana /etc/fstabza pomocą wpisu typu swap. Podczas rozruchu procesy uruchamiania odczytują ten plik i wpychają tę konfigurację do jądra.

Przykładem wpisu /etc/fstabjest:

/dev/sdb    none    swap     sw      0  0

Nie znam sposobu systemdzarządzania zamianą, ale wierzę, że wynik końcowy jest taki sam: proces przestrzeni użytkownika jest świadomy tego, jaka przestrzeń jest przydzielona do wymiany, a proces przestrzeni użytkownika informuje jądro.

Andy Dalton
źródło
Pytający pytał o Linuksa, i nie jest to złe w przypadku Linuksa; ale jest to specyficzne dla Linuksa. Inne systemy operacyjne, takie jak na przykład FreeBSD, rozpoznają rekordy wymiany na /etc/fstabpodstawie swtypu montowania, a nie swaptypu VFS.
JdeBP
1
Odpowiedź nie obejmuje wszystkich części pytania.
Sergiy Kolodyazhnyy
Powinienem również zauważyć, że ta odpowiedź również jest nieaktualna w świecie systemowych systemów operacyjnych. Nie bierze pod uwagę systemd-gpt-auto-generator.
JdeBP
2
Co masz na myśli mówiąc, że systemd nie używa fstab? Oczywiście, że tak!
psusi
1
@psusi: systemd rozumie, ale nie wymaga fstab.
MSalters
4

Wszystkie pozostałe odpowiedzi wspominają, jak wskazać system plików wymiany podczas rozruchu.

Należy jednak dodać kilka punktów do innych odpowiedzi:

  • przestrzeń wymiany może być również plikiem;
  • partycja przestrzeni wymiany jest zwykle oznaczona jako typ 0x82;
  • możesz zamontować przestrzeń wymiany w dowolnym momencie w czasie wykonywania;
  • do oznaczenia / zainicjowania partycji / pliku, aby został on rozpoznany i użyty / zamontowany później jako przestrzeń wymiany, należy użyć polecenia mkswap;
  • do ręcznej aktywacji / używania partycji / pliku wymiany użyj polecenia swapon;
  • podobnie do zamiany, idziesz z swapoff.
Rui F. Ribeiro
źródło