システムオペレーティングシステムでは何が起こりますか?

システムオペレーティングシステムでは何が起こりますか?

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

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

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

答え1

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

一般的な項目は次のとおりです。

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

フラグフィールド(4番目のフィールド)でそれを表示または指定することもできますdiscardnofailこれらの各ラインはスワップ領域に対応する。持つパーティションとしてスワップファイルまたはフルスワップディスクを持つことができます。

非常に特別なケースでは、スワップ領域を動的に構成することもできますが、これはメモリ管理に関連する問題の動作を引き起こす可能性があるため、非常にまれです。この場合、構成は実行時に必要に応じてスワップファイルを作成してアクティブにするユーザースペースコンポーネントによって完全に処理されます。

どのくらい必要なのかは、答えるのが複雑な質問です。ただし、他のディストリビューションをアイドル状態にして、1つのディストリビューションを実行できるようにしたくない限り、実行しようとしているさまざまなLinuxディストリビューションの数はこれに影響しません。システムを台無しにするのは非常に簡単な方法なので、これをしたくありません。)

Fedora、OpenSUSE、Linux Mint、Debian、Ubuntuなど、ほとんどすべての主要ディストリビューションに対してインストーラを実行すると、システムの既存のスワップパーティションを検出して使用するディストリビューションに追加します。 (手動でパーティションを選択しない限り)ほとんどの場合、システムは合理的な方法で構成されます。

それ以上に、ディスクが多いサーバーシステムについて話していない限り、個人的に複数のスワップパーティションを避けることをお勧めします。そのような場合でも、正しく動作するように設定するには、何をしているかを知る必要があります。 。

答え2

たとえば、FedoraとUbuntu?

...これは両方ともシステム化されたオペレーティングシステムです。

システムオペレーティングシステムでは何が起こりますか?

基本メカニズム

Systemd はさまざまな種類の単位を使用します。 .mountユニットファイルはボリュームのマウントを指示します。 .swap単位ファイルは、スワップパーティションについてカーネルに通知する内容を表します。 (.serviceユニットファイルはサービスの実行方法を示します。など)これは基本的なsystemdメカニズムです。これを実装するために、systemd自体は関連するシステムコールを実行する子プロセスをフォークします。

そのオペレーティングシステムでsystemdコマンド(with)を使用すると、systemctlロードされたデバイスに関する情報が表示されます。たとえば、--all.swap

dev-disk-by\x2dpartuuid-40549710\x2d05.swap ロードアクティブアクティビティ/dev/disk/by-partuuid/40549710-05
dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap アクティブなアクティビティのロード /dev/disk/by-uuid/1bb589e8-929f-404
dev-sda5.swap ロードアクティブアクティブ /dev/sda5

.mountまた、デバイスに関する情報もお知らせします。

xeが、、、および他のユニットファイルを直接作成できるように、システム管理者は実際に.swapこれらのユニットファイルを直接作成できます。 systemd自体は、ファイルシステム内の単位ファイルを探します。それらは基本的なメカニズムです。.service.socket

これらのユニットファイルに何があるのか​​、ファイルシステムがそのファイルを見つけることができる場所を表示するように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によって自動的に生成される

[単位]
ソースパス=/etc/fstab
ドキュメント=man:fstab(5) man:systemd-fstab-generator(8)

【交換】
何=/dev/disk/by-uuid/1bb589e8-929f-4041-81f4-ff2b339b4e2a
オプション=sw
$

ユニットファイルの自動生成

人々は手書きできます。 通常ただし、これらのファイルと.mountユニット.swapファイルは、次のファイルによって生成されます。発電機。そのようなジェネレータの2つはsystemd-fstab-generatorおよびですsystemd-gpt-auto-generator。どちらもブートプロセスの最初に実行され、systemctl daemon-reloadコマンドに応答し(上記のように)、デバイスファイル全体を/run/systemd/.system自体にロードします。生成されたユニットファイルのみを使用

古いジェネレータは、/etc/fstabファイル形式を認識する複数のシステム拡張子を読み込みます。私の答えの説明で指摘したように、スワップパーティションは伝統的に設置タイプこれはsw、他のオペレーティングシステムがこのテーブルのスワップレコードを認識することを発見した方法です。しかし、Linuxソフトウェアは識別のための別のアプローチをとります。VFSタイプswap代わりにVFSタイプを見つけます。systemd-fstab-generatorここでも例外ではありません。これは/etc/fstab基本的なメカニズムに変換するときに解釈される方法です。

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

もちろんこの過程には副作用が多い。たとえば、/etc/fstabテーブルに主キーがないため、レコードに重複した「仕様」および「ファイル」(例:「何」や「場所」)フィールドがある場合があります。ただし、デフォルトのsystemdメカニズムでは、「ファイル」(たとえば「場所」)フィールドは、デバイス名.mountに含まれるデバイスの一意のキーです。両方.mountのユニットが共有できません。デバイスの場合、.swap「仕様」(たとえば「コンテンツ」)フィールドはデバイスの一意のキーです。両方.swapのユニットがそれらを共有できません。したがって、すべてのレコードが必ずしも/etc/fstab基本メカニズムに変換されて機能するわけではありません。特に、人々が2つの異なる目的で同じマウントポイントをリストしたり、2つの異なる方法で同じスワップパーティションをリストしたりするなどのタスクを実行する場合は、さらにそうです。

/etc/fstab同様に、基本メカニズムとsystemdの基本メカニズムに変換されたためユニットを起動する他の方法があります、システムではなくオペレーティングシステムとは若干異なる動作をします。デフォルトでは、.mount単位は次のとおりです。自動起動systemd-udevd、起動後もマウントされたストレージデバイスがあれば応答します。あるいは、1つWants=Requires=一部.service、または単位としてリストすることもできます.socket。これは、アクティブになると(再)アクティブになることを意味します。でもRequiresMountsFor=

インストーラとシステム化方法

通常、swエントリはオペレーティングシステムのインストーラと後でシステムを再設定するシステム管理者によって作成されました/etc/fstab。これがネイティブ.mount.swapユニットが最終的に自動的に生成される方法です。インストール/設定ユーティリティは、システム管理者がユーザーインターフェイスからいくつかの項目を選択してマッチを記録するため、スワップファイルがある場所を「知っています」/etc/fstab。時々このオプションはインストール中にスワップパーティションを作成する必要があります。;時々ディスク上のスワップパーティションを使用してください。(インストールプログラムはパーティションタイプも確認します)。

しかし、システムを持つ人々は次のような考えを持っていました。オペレーティングシステムは、いわゆる本質/etc的に空のツリーで自動的に設定できます。無状態システム、EFIパーティションテーブルを読み取るためのジェネレータなどのメカニズムがすべてです。システム化された人の計画には永続的な/etc/fstab構成データはまったくありません/etc。これはすべてディスクのパーティションテーブルの内容から推論、すべてのブートローダおよびすべてsystemctl daemon-reload書かないで/etc/fstab

もちろん、従来のシナリオでは、各オペレーティングシステムが独自のプライベートスワップパーティションを持ち、互いのスワップパーティションに触れないようにすることができます。実際に、スワップパーティションを介して休止状態を使用してディスクを焼き、休止状態の間に別のオペレーティングシステムで複数回起動できるようにしたい場合(これはとても悪い考えなぜならこれにより、ファイルシステムが簡単に破損する可能性があります。)必要です。

systemdシナリオでは、オペレーティングシステムがまだsystemdの人々が想像しているように「状態の非保存」状態でない場合でも、前述のジェネレータが実行されます。みんなすべてのシステムオペレーティングシステムは、必要なパーティションタイプを持つスワップパーティション(ESP /ルートディスク)を自動的に使用します。自動的に検出されたすべてのスワップパーティションを共有するため、実際にインストールされている各オペレーティングシステムに対してスワップパーティションを作成する必要はありません。

追加読書

答え3

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

項目の例は次/etc/fstabのとおりです。

/dev/sdb    none    swap     sw      0  0

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

答え4

他のすべての回答には、起動時にスワップファイルシステムを指す方法が記載されています。

しかし、他の答えに追加する必要があるいくつかの点があります。

  • スワップスペースはファイルでもかまいません。
  • スワップ空間パーティションは、通常0x82タイプで表されます。
  • 1つをインストールできます交換ランタイムのどの時点でもスペースがあります。
  • 後でスワップ領域として認識され、使用/マウントできるようにパーティション/ファイルを表示/初期化するには、次のコマンドを使用する必要がありますmkswap
  • スワップパーティション/ファイルを手動で有効/使用するには、次のコマンドを使用できますswapon
  • もう一度申し上げますが、この機能をオフにするにはを選択しますswapoff

関連情報