Como o Linux sabe onde está sua partição de swap?

13

Eu li que você precisa colocar a partição swap no disco rígido, em vez do SSD.

Minhas perguntas são as seguintes:

  • Quando e como a "verificação" é feita pela distribuição (ou outra coisa) para encontrar sua partição Swap?
  • Isso acontece durante a inicialização?
  • Apenas verifica todos os discos disponíveis e procura uma partição com o sinalizador 'swap'?
  • O que acontece se houver várias partições como essa?
  • Além disso, quantas partições de troca eu preciso ter se executar, por exemplo, duas distribuições diferentes no mesmo disco, digamos Fedora e Ubuntu?
Ne Nenne
fonte
17
Observe que uma troca no SSD seria realmente uma grande troca (o macOS faz isso há muito tempo). No entanto, ele fará leitura / gravação adicional no SSD, o que pode reduzir sua vida útil.
Nonyme
20
Onde você leu que a troca deveria estar em um disco rígido e não em um SSD? Além disso, quantos anos tinha o artigo ou comentário? Os SSDs modernos são muito melhores no nivelamento de desgaste e não falham após gravações repetidas, como ocorreram quando os SSDs eram novos. Além disso, se você tiver um computador que só tem SSDs, então você realmente não tem muita escolha, outros do que não usar swap em tudo
JDS
2
@zakinster: E quando a sua unidade de 1 TB estiver sempre cheia? As necessidades de armazenamento aumentaram com as provisões de armazenamento.
Lightness Races com Monica
3
Em outras palavras, "sim eu concordo, contrariamente à minha declaração anterior o tamanho real do disco é irrelevante - é como muito do que você está usando"
Leveza raças com Monica
6
@DavidSchwartz E, se você estiver "usando swap em quantidades significativas", enquanto um SSD produzirá consideravelmente menos perda de desempenho do sistema do que um HDD, a melhor opção ainda será adicionar mais RAM ao sistema ou reduzir o virtual pegada de memória da sua carga de trabalho de alguma forma para interromper o uso significativo da troca. Além disso, note que há uma diferença entre um sistema de longa duração que encheu-se de swap com dados quase nunca usado contra um sistema que está trocando e digitalização ativamente ...
twalberg

Respostas:

24

O espaço de troca configurado estaticamente (o tipo que praticamente toda distribuição usa) é configurado em /etc/fstab exatamente como os sistemas de arquivos.

Uma entrada típica se parece com:

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

Você também pode ver discardou nofailespecificado no campo sinalizadores (o quarto campo). Cada linha corresponde a uma área de swap (não possui ser uma partição, você pode ter arquivos de troca ou até discos de troca inteiros).

Em alguns casos realmente específicos, você pode ter um espaço de troca configurado dinamicamente, embora isso seja bastante raro, pois pode causar um comportamento problemático relacionado ao gerenciamento de memória. Nesse caso, a configuração é manipulada inteiramente por um componente do espaço do usuário que cria e habilita os arquivos de troca conforme necessário no tempo de execução.

Quanto você precisa, essa é uma pergunta complicada de se responder, mas o número de diferentes distribuições Linux que você planeja executar tem impacto nulo, a menos que você queira executar uma distribuição enquanto estiver em hibernação (e você provavelmente não quer fazer isso, pois é uma maneira muito fácil de estragar seu sistema).

Quando você executa o instalador para quase todas as principais distribuições (incluindo Fedora, OpenSUSE, Linux Mint, Debian e Ubuntu), ele detecta qualquer partição de troca existente no sistema e as adiciona à configuração da distribuição que você está usando. instalação (exceto possivelmente se você selecionar o particionamento manual) e, na maioria dos casos, isso resultará na configuração do sistema de maneira sensata.

Além disso, eu pessoalmente sugeriria evitar várias partições de troca, a menos que você esteja falando de um sistema de servidor com muitos discos e, mesmo assim, você realmente precisa saber o que está fazendo para se configurar para que ele funcione bem .

Austin Hemmelgarn
fonte
Se você possui 2 distribuições Linux, pode ter uma partição swap para o sistema ... portanto, pode tentar hibernar e retomar ... (melhor usar usuários diferentes entre BTW e você também precisa de /tmppartições / diretórios diferentes ). Provavelmente, nesse caso, é melhor ter máquinas virtuais ...
Hastur
Portanto, o que é sugerido para se fazer se eles tiverem uma partição dedicada para troca no mesmo SSD em que o sistema operacional Linux está instalado, no entanto, não parece realmente ter troca ou para que esteja em uso. Se eu correr systemctl --all | grep swap, recebo dois resultados. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swape swap.targetambos são ATIVOS = inativos e SUB = mortos . Como faço para que meu sistema faça uso da área de troca?
Rockin4Life33
21

digamos Fedora e Ubuntu?

... atualmente são sistemas operacionais systemd.

O que acontece nos sistemas operacionais systemd

o mecanismo nativo

O Systemd emprega vários tipos de unidades. .mountarquivos de unidade instruem-no a montar volumes. .swaparquivos de unidade instruem-no a informar o kernel sobre partições de troca. (os .servicearquivos da unidade instruem como executar serviços. E assim por diante.) Esses são os mecanismos nativos do sistema. Para promulgá-los, o próprio systemd cria processos filhos que fazem as chamadas relevantes do sistema.

Se você usar o systemctlcomando (with --all) nesse sistema operacional systemd, ele informará sobre o carregamento.swap unidades . Por exemplo:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap ativo ativo carregado / dev / disk / by-partuuid / 40549710-05
Dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap ativo carregado / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339
dev-sda5.swap ativo carregado / dev / sda5

Ele também informará sobre as .mountunidades.

Um administrador do sistema pode realmente escrever esses .swaparquivos de unidade à mão, assim como xe pode escrever .service, .sockete outros arquivos de unidade com a mão. O systemd em si apenas procura por arquivos de unidade no sistema de arquivos. Eles são seu mecanismo nativo.

Pode-se até fazer com que systemd mostre o que há nesses arquivos de unidade e onde eles podem ser encontrados no sistema de arquivos:

$ 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
# Gerado automaticamente pelo systemd-fstab-generator

[Unidade]
SourcePath = / etc / fstab
Documentação = man: fstab (5) man: systemd-fstab-generator (8)

[Troca]
O que = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Opções = sw
$ 

arquivos de unidade gerados automaticamente

Pode-se escrevê-los à mão. Geralmente, porém, esses arquivos .mounte .swapunidades são gerados automaticamente por programas conhecidos como geradores . Dois desses geradores são systemd-fstab-generatore systemd-gpt-auto-generator. Ambos são executados no início do processo de auto-inicialização e em resposta a um systemctl daemon-reloadcomando e (como você pode ver acima) geram uma carga inteira de arquivos de unidade em um subdiretório não documentado no Windows /run/systemd/. O próprio systemd usa apenas os arquivos de unidade gerados .

O gerador anterior lê /etc/fstab, reconhecendo várias extensões systemd para esse formato de arquivo. Como apontei em um comentário de resposta, tradicionalmente as partições de troca têm o tipo de montagemsw e é assim que alguém descobrirá que outros sistemas operacionais reconhecem registros de troca nesta tabela. Mas os softwares Linux adotaram o caminho alternativo de reconhecer o tipo VFS , procurando swapcomo o tipo VFS. systemd-fstab-generatornão é uma exceção aqui, e é assim que ele interpreta /etc/fstabao convertê-lo nos mecanismos nativos.

O último gerador processa a tabela de partição EFI que está no mesmo disco que contém a Partição do Sistema EFI, procurando entradas da tabela de partição EFI que possuem vários GUIDs do tipo de partição conhecidos . Um desses GUIDs é o GUID convencional atribuído às partições de troca do Linux; e se systemd-gpt-auto-generatorencontrar uma partição com esse GUID (que satisfaça os critérios fornecidos no systemd doco), fará uma .swapunidade para ele; não está /etc/fstabenvolvido .

Obviamente, esse processo tem muitos efeitos colaterais. Por exemplo, como /etc/fstabnão possui chave primária na tabela, os registros podem ter campos "spec" e "file" duplicados (ou seja, "what" e "where"). No mecanismo systemd nativo, no entanto, o campo "arquivo" (ou seja, "onde") é uma chave exclusiva para .mountunidades, incorporada aos nomes das unidades. Duas .mountunidades não podem compartilhá-lo. Para .swapunidades, o campo "spec" (ou seja, "what") é a chave exclusiva para unidades. Não há duas .swapunidades que possam compartilhar isso. Portanto, nem todos os registros /etc/fstabsão necessariamente conversíveis nos mecanismos nativos e funcionarão, especialmente se as pessoas fizerem coisas como listar o mesmo ponto de montagem para dois propósitos diferentes ou listar a mesma partição de troca de duas maneiras diferentes.

Da mesma forma, como foi traduzido /etc/fstabpara o mecanismo nativo e o mecanismo nativo do systemd possui outras maneiras de ativar unidades , o comportamento é sutilmente diferente daquele dos sistemas operacionais que não são do systemd. Por .mountpadrão, uma unidade será ativada automaticamentesystemd-udevd , mesmo após a inicialização, em resposta à aparência do dispositivo de armazenamento montado. Ou pode ser listado como um Wants=ou Requires=de alguns .serviceou .socketunidade, o que significa que será (re) ativado quando estiver. Existe até RequiresMountsFor=.

programas instaladores e a maneira systemd

Tradicionalmente, os programas de instalação do sistema operacional e o administrador do sistema após a reconfiguração do sistema têm swentradas gravadas no /etc/fstab. E é assim que o nativo .mounte as .swapunidades acabam sendo gerados automaticamente. O utilitário de instalação / configuração "sabe" onde o arquivo de troca foi colocado, porque em sua interface com o usuário o administrador do sistema fez algum tipo de escolha e grava uma /etc/fstabcorrespondência. Às vezes, essa opção é que preciso que você me faça uma partição de troca como parte da instalação. ; às vezes é apenas use a partição swap que você já encontrou no disco. (instaladores olhando para os tipos de partição também).

Mas as pessoas do sistema têm essa idéia de sistemas operacionais que se configuram automaticamente a partir de uma /etcárvore em grande parte vazia , os chamados sistemas sem estado , e é isso que mecanismos como o gerador que lê a tabela de partições EFI. No plano das pessoas do sistema, não existem /etc/fstabe, de fato, não existem dados de configuração persistentes /etc, e todo esse material é deduzido do conteúdo da tabela de partições em disco , a cada inicialização e a qualquer momento systemctl daemon-reload. Atualmente, eles estão promovendo programas de instalação de sistemas operacionais do/etc/fstab que os que não escrevem .

No esquema tradicional, é claro que você pode realmente ter cada sistema operacional com sua própria partição de troca privada, e não fazer com que eles toquem nas partições de troca um do outro. E, de fato, se você estiver usando o hibernate em disco por meio de uma partição de swap e esperando poder fazer a inicialização múltipla em outro sistema operacional enquanto hibernado (o que é uma péssima idéia, porque é muito fácil causar corrupção no sistema de arquivos dessa maneira ), isso será necessário.

No esquema systemd, mesmo que o sistema operacional ainda não esteja como as pessoas do sistema o imaginam e "sem estado", os geradores mencionados anteriormente são executados; e, portanto, todas as partições de troca (no disco ESP / raiz) com o tipo de partição necessário são empregadas automaticamente por todos os sistemas operacionais systemd. Como eles compartilharão todas as partições de swap descobertas automaticamente, não é necessário criar uma partição de swap por sistema operacional instalado.

Leitura adicional

JdeBP
fonte
Muito bom - obrigado pela explicação!
Andy Dalton
Há uma parte de mim que quer realmente recusar o voto por falar sobre o systemd. Mas é claro que isso é injusto (e também sistemad ou não, não significa que você esteja errado) e eu normalmente não voto as coisas de qualquer maneira, pois nunca me pareceu a maneira apropriada de ser construtiva. No entanto, é uma boa redação, apesar de ver referências a Lennart, votei nessa resposta. Se nada mais, você se esforça e deve ser elogiado. Eu li brevemente sobre o lixo apátrida e isso é algo que ... Não tenho certeza do que faz, então vou deixar por isso mesmo.
Pryftan
13

Historicamente, a partição de troca é especificado em /etc/fstabcom uma entrada de tipo swap. Na inicialização, os processos de inicialização leem esse arquivo e enviam essa configuração para o kernel.

Um exemplo da entrada em /etc/fstabé:

/dev/sdb    none    swap     sw      0  0

Não estou familiarizado com como systemdgerencia a troca, mas acredito que o resultado final é o mesmo: um processo no espaço do usuário está ciente de qual espaço é alocado para a troca, e o processo no espaço do usuário informa o kernel.

Andy Dalton
fonte
O interlocutor perguntou sobre o Linux, e isso não está errado para o Linux; mas é peculiar ao Linux. Outros sistemas operacionais, como o FreeBSD, por exemplo, reconhecem registros de swap /etc/fstabdo swtipo de montagem, e não do swaptipo VFS.
JdeBP
1
A resposta não aborda todas as partes da pergunta.
Sergiy Kolodyazhnyy
Devo também salientar que esta resposta também está desatualizada no mundo dos sistemas operacionais systemd. Não leva em consideração systemd-gpt-auto-generator.
JdeBP
2
O que você quer dizer com systemd não usa fstab? Claro que sim!
22418 psusi
1
@psusi: systemd entende, mas não requer fstab.
precisa saber é o seguinte
4

Todas as outras respostas mencionam como apontar para um sistema de arquivos swap na inicialização.

No entanto, vários pontos a serem adicionados às outras respostas:

  • o espaço de troca também pode ser um arquivo;
  • uma partição de espaço de troca é marcada geralmente como tipo 0x82;
  • você pode montar um espaço de troca a qualquer momento no tempo de execução;
  • para marcar / inicializar uma partição / arquivo, para que ela seja reconhecida e usada / montada posteriormente como espaço de troca, você precisa usar o comando mkswap;
  • para ativar / usar uma partição / arquivo de swap manualmente, use o comando swapon;
  • Da mesma forma, para trocá-lo, você segue swapoff.
Rui F Ribeiro
fonte