Linuxはスワップパーティションの場所をどのようにして知るのですか?


13

スワップパーティションをSSDではなくHDDに配置する必要があることを読みました。

私の質問は次のとおりです。

  • スワップパーティションを見つけるために、ディストリビューション(または他の何か)によって「チェック」がいつどのように行われますか?
  • 起動中に発生しますか?
  • 利用可能なすべてのディスクをチェックし、「スワップ」フラグのあるパーティションを検索しますか?
  • そのようなパーティションが複数ある場合はどうなりますか?
  • また、たとえば、同じディスク上で2つの異なるディストリビューションを実行する場合、FedoraとUbuntuの場合、スワップパーティションはいくつ必要ですか。

17
SSDでのスワップは実際には非常に優れたスワップであることに注意してください(macOSは長い間そうしています)。ただし、SSDに対して追加の読み取り/書き込みを行うため、SSDの寿命が短くなる可能性があります。
ノニム

20
スワップはSSDではなくHDD上にあるべきだとどこで読みましたか?また、記事またはコメントは何歳でしたか?最新のSSDはウェアレベリングがはるかに優れており、SSDが新しいときと同じように繰り返し書き込みを行っても失敗しません。あなたが唯一のSSDを持っていることを、コンピュータを持っている場合にも、あなたは本当にすべてでスワップを使用しない以外に、多くの選択肢を持っていない
JDS

2
@zakinster:1TBのドライブが常にいっぱいのときはどうですか?ストレージの要件により、ストレージのニーズが増加しています。
モニカとの軽さレース

3
言い換えれば、「はい、私は、私の以前の声明に反し同意ディスクの実際のサイズは関係ありません-それはあなたが使用しているどのくらいのだ」
モニカと明度レース

6
@DavidSchwartzそして、「かなりの量のスワップを使用している」場合、SSDはHDDに比べてシステムパフォーマンスの損失をかなり少なくしますが、システムにRAMを追加するか、仮想ワークロードのメモリフットプリントを何らかの方法で使用して、大幅なスワップ使用を停止します。また、ほとんど使用されていないデータでスワップがいっぱいになった長時間実行システムと、アクティブにスワップおよびスキャンされているシステムとの間には違いがあることに注意してください
...-twalberg

回答:


24

静的に構成されたスワップスペース(ほとんどすべてのディストリビューションが使用するタイプ)は、/etc/fstabファイルシステムと同じように構成されます。

典型的なエントリは次のようになります。

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

また、flagsフィールド(4番目のフィールド)で、discardまたはnofail指定されたものが表示される場合があります。1つのスワップ領域へのすべてのそのような行が対応する(それはありません持っているパーティションであることを、あなたはスワップファイル、あるいは全体のスワップディスクを持つことができます)。

いくつかの実際に特定のケースでは、代わりに動的に構成されたスワップ領域がありますが、これはメモリ管理に関連する問題のある動作を引き起こす可能性があるため、かなりまれです。この場合、構成は、実行時に必要に応じてスワップファイルを作成して有効にするユーザースペースコンポーネントによって完全に処理されます。

必要な限り、それは答えるのは複雑な質問ですが、実行する予定の異なるLinuxディストリビューションの数は、ある休止状態にあるディストリビューションを実行できるようにしたい場合(およびシステムを台無しにするのは本当に簡単な方法なので、おそらくこれを行いたくないでしょう。

ほぼすべての主要なディストリビューション(Fedora、OpenSUSE、Linux Mint、Debian、Ubuntuを含む)でインストーラーを実行すると、システム上の既存のスワップパーティションが検出され、それらがディストリビューションの構成に追加されますインストール(手動パーティションを選択した場合を除く)。ほとんどの場合、これによりシステムが適切な方法で構成されます。

それとは別に、多くのディスクを備えたサーバーシステムについて話している場合を除き、複数のスワップパーティションを持つことを避けることを個人的にお勧めします。 。


Linuxディストリビューションが2つある場合、システム用に1つのスワップパーティションがあるかもしれません...したがって、休止状態にして再開しようとするかもしれません...(別のユーザーBTWを使用する方が良いし、別の/tmpパーティション/ディレクトリも必要です)。おそらくその場合は、仮想マシンを使用する方が良いでしょう...
Hastur

したがって、Linux OSがインストールされているのと同じSSDにスワップ専用のパーティションがある場合に実行することが推奨されることはありますが、実際にはスワップを使用していないか、使用中ではないようです。実行するsystemctl --all | grep swapと、2つの結果が返されます。dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapそして、swap.targetあるどちらもACTIVE =非アクティブSUB =死にました。システムでスワップ領域を使用するにはどうすればよいですか?
Rockin4Life33

21

FedoraとUbuntuとしましょうか?

…現在、どちらもsystemdオペレーティングシステムです。

systemdオペレーティングシステムで何が起こるか

ネイティブメカニズム

Systemdはさまざまな種類のユニットを採用しています。 .mountユニットファイルは、ボリュームをマウントするよう指示します。 .swapユニットファイルは、スワップパーティションについてカーネルに通知するよう指示します。(.serviceユニットファイルは、サービスの実行方法を指示します。など)。これらは、ネイティブのsystemdメカニズムです。それらを実行するために、systemd自体は、関連するシステム呼び出しを行う子プロセスから分岐します。

このようなsystemdオペレーティングシステムでsystemctl(で--all)コマンドを使用すると、ロードされた.swapユニットについて通知されます。例えば:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap loaded active active / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap loaded active active / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
dev-sda5.swapロード済みアクティブアクティブ/ dev / sda5

また、.mountユニットについても説明します。

システム管理者は.swap、xeが、、およびその他のユニットファイルを手動で書き込むことができるよう.service.socket、実際にそのようなユニットファイルを手動で書き込むことができます。systemd自体は、ファイルシステムでユニットファイルを探すだけです。それらはそのネイティブメカニズムです。

systemdを使用して、これらのユニットファイルの内容とファイルシステム内の場所を表示することもできます。

$ 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
#systemd-fstab-generatorにより自動生成

[単位]
SourcePath = / etc / fstab
Documentation = man:fstab(5)man:systemd-fstab-generator(8)

[スワップ]
What = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Options = sw
$ 

自動生成されたユニットファイル

手書きで書くことができます。 ただし、通常、このようなファイル.mountおよび.swapユニットファイルは、ジェネレーターと呼ばれるプログラムによって自動的に生成されます。二つのそのような発電機があるsystemd-fstab-generatorsystemd-gpt-auto-generator。これらは両方とも、ブートストラッププロセスの初期およびsystemctl daemon-reloadコマンドへの応答で実行され、(上記でわかるように)ユニットファイルのロード全体を、ドキュメント化されていないサブディレクトリに生成し/run/systemd/ます。systemd自体は、生成されたユニットファイルを使用します

前者のジェネレーターはを読み取り/etc/fstab、そのファイル形式に対するいくつかのsystemd拡張機能を認識します。回答のコメントで指摘したように、従来のスワップパーティションのマウントタイプsw、他のオペレーティングシステムがこのテーブル内のスワップレコードを認識する方法です。しかし、Linuxソフトウェアは代わりにVFSタイプを認識し、VFSタイプswapとして探すという代替手段を採用しています。 systemd-fstab-generatorここでも例外ではなく、それが/etc/fstabネイティブメカニズムに変換するときに解釈する方法です。

後者のジェネレーターは、EFIシステムパーティションを保持する同じディスクにあるEFIパーティションテーブルを処理し、さまざまな既知のパーティションタイプ GUID を持つEFIパーティションテーブルエントリを探します。これらのGUIDの1つは、Linuxスワップパーティションに割り当てられた従来のGUIDです。そしてsystemd-gpt-auto-generator、そのGUID(systemd docoで指定された基準を満たす)を持つパーティションを見つけると、そのための.swapユニットを作成します。全く/etc/fstab関与していません

もちろん、このプロセスには多くの副作用があります。たとえば/etc/fstab、テーブルへの主キーがないため、レコードには「spec」フィールドと「file」フィールド(つまり「what」と「where」)が重複している場合があります。ただし、ネイティブのsystemdメカニズムでは、「file」(つまり「where」)フィールドは.mountユニットの一意のキーであり、ユニット名に埋め込まれています。2つの.mountユニットで共有することはできません。以下のため.swapのユニット「スペック」(すなわち「何を」)フィールドには、ユニットの一意のキーです。2つの.swapユニットがそれを共有することはできません。したがって、すべてのレコード/etc/fstabが必ずしもネイティブメカニズムに変換できるわけではなく、特に、2つの異なる目的で同じマウントポイントをリストしたり、2つの異なる方法で同じスワップパーティションをリストしたりする場合は、機能しません。

同様/etc/fstabに、ネイティブメカニズムに変換されており、systemdのネイティブメカニズムにはunitsをアクティブにする他の方法があるため、動作はsystemd以外のオペレーティングシステムとは微妙に異なります。.mountユニットは、デフォルトでは、説明する自動的によって活性化systemd-udevdの出現に応答してもブートストラップの後には、ストレージデバイスを搭載しました。または、一部または単位としてリストすることもできます。Wants=つまりRequires=、あるときに(再)アクティブ化されます。さえあります。.service.socketRequiresMountsFor=

インストーラープログラムとsystemdの方法

従来、オペレーティングシステムのインストーラプログラムと、システムを再構成した後のsystemd管理者は、swエントリをに書き込みました/etc/fstab。そして、それがネイティブ.mount.swapユニットが最終的に自動生成される方法です。インストール/構成ユーティリティは、システム管理者がユーザーインターフェイスで何らかの選択/etc/fstabを行い、一致するように書き込むため、スワップファイルが置かれた場所を「認識」します。時々、その選択は、インストールの一部として私にスワップパーティションを作る必要があることです。; ディスク上にすでにあるスワップパーティションを使用するだけの場合もあります。(インストーラーはパーティションの種類も調べます)。

しかし、systemdの人々は、大部分が空の/etcツリー、いわゆるステートレスシステムから自動的に構成するオペレーティングシステムという考えを持っています。それが、EFIパーティションテーブルを読み取るジェネレーターのようなメカニズムです。systemdの人々の計画で/etc/fstabは、永続的な構成データは存在せず、実際には存在しません。/etcこのすべては、ディスク上のパーティションテーブルの内容、すべてのブートストラップ、およびすべてから推測されますsystemctl daemon-reload。最近では、オペレーティングシステムのインストーラプログラムを宣伝するのではなく、/etc/fstab

従来のスキームでは、もちろん、各オペレーティングシステムに独自のプライベートスワップパーティションを持たせ、お互いのスワップパーティションに触れさせないようにすることができます。そして、あなたはスワップパーティションを介してディスクに休止状態を使用して休止状態ながら、(別のオペレーティングシステムへのマルチブートにできるように期待している確かにあればある非常に悪い考えているため、それが原因ファイルシステムの破損、このように非常に簡単ですになります)必要。

systemdスキームでは、オペレーティングシステムがまだsystemdの人々が想定している「ステートレス」ではない場合でも、前述のジェネレーターが実行されます。したがって、必要なパーティションタイプのすべてのスワップパーティション(ESP /ルートディスク上)は、すべてのsystemdオペレーティングシステムで自動的に使用されます。自動的に検出されたすべてのスワップパーティションを共有するため、インストールされたオペレーティングシステムごとに1つのスワップパーティションを作成する必要はありません。

参考文献


とても素敵です-説明をありがとう!
アンディダルトン

systemdについて話すためだけに、実際にあなたに賛成票を投じたいと思う人がいます。しかし、もちろんそれは不公平です(また、systemdまたはnoはあなたが間違っているという意味ではありません)。とにかく物事に反対票を投じることはありません。しかし、素晴らしい記事なので、レナートへの言及を見ていても、私はこの答えに賛成票を投じました。他に何も努力しなければ、賞賛されるべきです。私は無国籍のゴミについて簡単に読みましたが、それはむしろ何かです...それが何をするのかわからないので、そのままにしておきます。
プリフタン

13

歴史的に、スワップパーティションは/etc/fstabtypeのエントリで指定されますswap。起動時に、起動プロセスはそのファイルを読み取り、その構成をカーネルにプッシュします。

のエントリの例/etc/fstabは次のとおりです。

/dev/sdb    none    swap     sw      0  0

私はsystemdスワップの管理方法についてはよく知りませんが、最終結果は同じだと思います。ユーザースペースプロセスはスワップに割り当てられているスペースを認識し、ユーザースペースプロセスはカーネルに通知します。


質問者はLinuxについて尋ねましたが、これはLinuxにとって間違っていません。しかし、それはLinuxに特有です。たとえば、FreeBSDなどの他のオペレーティングシステムは、VFSタイプではなく/etc/fstabswマウントタイプからスワップレコードを認識しswapます。
JdeBP

1
答えは、質問のすべての部分を扱っているわけではありません。
セルギーKolodyazhnyy

また、この答えもsystemdオペレーティングシステムの世界では時代遅れになっていることを指摘する必要があります。考慮に入れていないsystemd-gpt-auto-generator
JdeBP

2
systemdがfstabを使用しないのはどういう意味ですか?もちろんそうです!
psusi

1
@psusi:systemdは理解しますが、fstabは必要ありません。
–MSalters

4

他のすべての回答は、ブート時にスワップファイルシステムを指す方法について言及しています。

ただし、他の回答に追加するいくつかのポイント:

  • スワップ領域はファイルにすることもできます。
  • スワップ空間パーティションは通常、タイプ0x82としてマークされます。
  • 実行時の任意の時点でスワップスペースをマウントできます。
  • パーティション/ファイルをマーク/初期化するために、後でスワップスペースとして認識および使用/マウントするために、コマンドを使用する必要がありmkswapます;
  • 手動でスワップパーティション/ファイルを有効化/使用するには、コマンドを使用しswaponます;
  • 同様にそれを交換するために、あなたはで行きますswapoff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.