Linux スワップ スペースの機能は、ホストが利用できる仮想メモリを増やすことです。スワップ スペースは、最新の Linux システムにおける 2 番目のタイプのメモリです。スワップ スペースの主な機能は、すべての RAM が占有されている場合などです。メモリが必要な場合、RAM メモリの代わりにディスク領域が使用されます。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux スワップ領域は何に使用されますか?
Linux システムのスワップ スペースの概要
システム上のスワップ スペースの容量を変更する方法と、必要なスワップ スペースの量について説明します。
今日、どのようなオペレーティング システムであっても、スワップスペースは非常に一般的です。 Linux はスワップ領域を使用して、ホストが利用できる仮想メモリを増やします。 1 つ以上の専用スワップ パーティションを使用したり、通常のファイルまたは論理ボリューム上のスワップ ファイルを使用したりできます。
一般的なコンピュータには 2 つの基本的なタイプのメモリがあります。 1 つ目のタイプのランダム アクセス メモリ (RAM) は、コンピュータが使用するデータとプログラムを保存するために使用されます。コンピュータは、プログラムとデータが RAM に保存されている場合にのみ使用できます。ランダム アクセス メモリは揮発性メモリであり、コンピュータの電源を切ると RAM に保存されているデータは失われます。
ハードディスクは、データやプログラムを長期保存するために使用される磁気媒体です。この磁気メディアはデータを非常によく保存できるため、コンピュータの電源が切れた場合でも、ディスクに保存されているデータは保持されます。 CPU (中央処理装置) はハードディスク上のプログラムやデータに直接アクセスすることはできません。それらはまず RAM にコピーされる必要があり、そこで CPU はコード命令にアクセスしてデータを操作します。ブート プロセス中に、コンピュータは特定のオペレーティング システム プログラム (カーネル、init、systemd など) とハード ディスク上のデータを RAM にコピーします。RAM では、コンピュータのプロセッサ (CPU がデータに直接アクセスできます)。
スワップ スペースは、最新の Linux システムにおける 2 番目のタイプのメモリです。スワップ スペースの主な機能は、すべての RAM が占有されており、より多くのメモリが必要な場合に、RAM メモリをディスク スペースに置き換えることです。
たとえば、8GB RAM を搭載したコンピューターがあると仮定します。起動したプログラムが RAM をいっぱいにしない場合は、すべて問題なく、スワップは必要ありません。スプレッドシートで作業しているとします。行を追加するとスプレッドシートが大きくなり、すべてのプログラムが実行されているため、RAM がすべて占有されてしまいます。この時点で利用可能なスワップ領域がない場合は、他のプログラムを閉じて RAM を解放するまで、スプレッドシートでの作業を停止する必要があります。
カーネルはメモリ マネージャーを使用して、最近使用されていないメモリ ブロック (メモリ ページ) を検出します。メモリ管理プログラムは、これらの比較的使用頻度の低いメモリ ページを、「ページング」またはスワッピング用に指定されたハード ディスク上の特別なパーティションにスワップします。これにより RAM が解放され、スプレッドシートにさらに多くのデータを入力できる余地が生まれます。ディスクにスワップアウトされたメモリ ページは、カーネルのメモリ管理コードによって追跡され、必要に応じて RAM にページバックできます。
Linux コンピュータのメモリの総量は RAM スワップ パーティションであり、スワップ パーティションは仮想メモリと呼ばれます。
Linux が提供するスワップ領域には 2 種類あります。デフォルトでは、ほとんどの Linux インストールでスワップ パーティションが作成されますが、特別に構成されたファイルをスワップ ファイルとして使用することもできます。名前が示すように、スワップ パーティションは標準のディスク パーティションであり、スワップ領域は mkswap
コマンドによって指定されます。
新しいスワップ パーティションを作成するためのディスク領域がない場合、またはスワップ領域用の論理ボリュームを作成するための領域がボリューム グループにない場合は、スワップ ファイルを使用できます。これは、指定されたサイズに作成され、事前に割り当てられる単なる通常のファイルです。次に、mkswap
コマンドを実行して、スワップ スペースとして構成します。どうしても必要な場合を除き、スワップ領域にファイルを使用することはお勧めしません。 (LCTT 翻訳: Ubuntu の最近のバージョンはスワップ領域ではなくスワップ ファイルを使用するため、この記述については私の意見を留保します)
仮想メモリの合計が(RAM およびスワップ領域) がほぼいっぱいになると、スワップが頻繁に発生することがあります。システムは、スワップ領域と RAM の間でメモリ ブロックのページングに非常に多くの時間を費やすため、実際の作業に費やす時間がほとんどなくなります。この状態の一般的な症状は、システムが遅くなるか完全に応答しなくなり、ハード ドライブのライトがほぼ常に点灯することです。
free
コマンドを使用して CPU 負荷とメモリ使用量を表示すると、CPU 負荷が非常に高く、おそらくシステム内の CPU コア数の 30 ~ 40 倍であることがわかります。もう 1 つの状況は、RAM とスワップ領域がほぼ完全に割り当てられている場合です。
実際、SAR (システム アクティビティ レポート) データを見ると、これらのことも明らかになります。各システムに SAR をインストールし、データ分析に使用します。
何年も前、ハード ディスクに割り当てられたスワップ領域のサイズは、コンピュータの RAM のサイズの 2 倍でした (もちろん、これはほとんどのコンピュータの RAM が KB または MB 単位で測定されていた頃の話です) )。したがって、コンピュータに 64KB の RAM が搭載されている場合は、128KB のスワップ パーティションを割り当てる必要があります。このルールは、当時 RAM サイズが非常に小さく、スワップ領域に 2 倍を超える RAM を割り当ててもパフォーマンスが向上しなかったという事実を考慮しました。ほとんどのシステムは、実際に有益な作業を行うよりも、スワップに RAM を 2 倍以上使用する時間の方が長くなります。
RAM は現在安価であり、今日のほとんどのコンピューターには数ギガバイトの RAM が搭載されています。私の新しいコンピューターのほとんどには少なくとも 8GB の RAM が搭載されており、1 台には 32GB の RAM が搭載されており、メインのワークステーションには 64GB の RAM が搭載されています。私の古いコンピューターには 4 ~ 8GB の RAM が搭載されていました。
大量の RAM を搭載したコンピューターを操作する場合、スワップ領域のパフォーマンス制限要因は 2 倍をはるかに下回ります。 Fedora 28 オンライン インストール ガイドでは、スワップ スペース割り当ての現在のアプローチを定義しています。以下は私の提案です。
次の表は、システムの RAM の量と、システムを休止状態にするのに十分なメモリがあるかどうかに基づいた、スワップ パーティションの推奨サイズを示しています。推奨されるスワップ パーティション サイズは、インストール中に自動的に設定されます。ただし、システムの休止状態を満たすには、カスタム パーティションの段階でスワップ領域を編集する必要があります。
表 1: Fedora 28 ドキュメントの推奨システム スワップ スペース
システム メモリ サイズ 推奨スワップ スペース 推奨スワップ スペース サイズ (休止モードをサポート) 2 GB 未満 RAM の 2 倍 RAM の 3 倍 2 GB ~ 8 GB は RAM サイズの 2 倍 8 GB ~ 64 GB RAM の 0.5 倍 RAM の 1.5 倍 64 GB を超える ワークロード関連の休止モードは推奨されません 上記
リストされている各範囲間の境界 (たとえば、2GB、8GB、または 64GB のシステム RAM) は、選択したスワップ スペースと休止状態のサポートに基づいて注意してください。システム リソースが許可している場合は、スワップ領域を追加するとパフォーマンスが向上する可能性があります。
もちろん、ほとんどの Linux 管理者は、どのくらいのスワップ領域を使用すべきかについて独自の考えを持っています。以下の表 2 には、さまざまな環境での私の個人的な経験に基づいた推奨事項が含まれています。これらはあなたには当てはまらないかもしれませんが、表 1 と同様に役に立つかもしれません。
表 2: 著者が推奨するシステム スワップ スペース
RAM サイズ推奨スワップ スペース ≤ 2GB2X RAM2GB – 8GB= RAM>8GB8GB
これら 2 つ表全体に共通しているのは、RAM の量が増加するにつれて、特定のポイントを超えてスワップ領域を追加すると、スワップ領域がほぼ完全に使用される前にスワップが頻繁に発生するだけであるということです。上記の提案に基づいて、可能であればスワップ領域を追加するのではなく、RAM を追加する必要があります。システムのパフォーマンスに影響を与える同様の状況と同様に、自分にとって最適な推奨事項を使用してください。 Linux 環境でのテストと状況に応じた変更には時間と労力がかかります。
Linux がインストールされているホストとスワップ スペースのニーズの変化に直面し、場合によってはシステム定義の変更が必要になることがあります。スワップスペースのサイズ。この手順は、スワップ領域のサイズを増やす必要があるあらゆる状況で使用できます。十分な空きディスク容量が必要です。また、この手順では、ディスク パーティションが論理ボリューム管理 (LVM) を使用するのではなく、「生の」EXT4 およびスワップ パーティションであることを前提としています。
基本的な手順は簡単です。
/etc/fstab
に追加します。 マシンを再起動する必要はありません。
安全上の理由から、スワップ領域を閉じる前に、少なくともアプリケーションが実行中でなく、スワップ領域が使用されていないことを確認する必要があります。 free
または top
コマンドを使用すると、スワップ領域が使用中かどうかを確認できます。セキュリティを強化するために、ランレベル 1 またはシングルユーザー モードに戻すことができます。
すべてのスワップ領域を閉じるコマンドを使用してスワップ パーティションを閉じます:
swapoff -a
次に、ハード ドライブ上の既存のパーティションを表示します。
fdisk -l
これにより、各ドライブのパーティション テーブルが表示されます。現在のスワップ パーティションを番号で識別します。
次のコマンドを使用して、対話モードで fdisk
を起動します:
fdisk /dev/<device name>
例:
fdisk /dev/sda
此时,fdisk
是交互方式的,只在指定的磁盘驱动器上进行操作。
使用 fdisk
的 p
子命令验证磁盘上是否有足够的可用空间来创建新的交换分区。硬盘上的空间以 512 字节的块以及起始和结束柱面编号的形式显示,因此您可能需要做一些计算来确定分配分区之间和末尾的可用空间。
使用 n
子命令创建新的交换分区。fdisk
会问你开始柱面。默认情况下,它选择编号最低的可用柱面。如果你想改变这一点,输入开始柱面的编号。
fdisk
命令允许你以多种格式输入分区的大小,包括最后一个柱面号或字节、KB 或 MB 的大小。例如,键入 4000M ,这将在新分区上提供大约 4GB 的空间,然后按回车键。
使用 p
子命令来验证分区是否按照指定的方式创建的。请注意,除非使用结束柱面编号,否则分区可能与你指定的不完全相同。fdisk
命令只能在整个柱面上增量的分配磁盘空间,因此你的分区可能比你指定的稍小或稍大。如果分区不是您想要的,你可以删除它并重新创建它。
现在指定新分区是交换分区了 。子命令 t
允许你指定定分区的类型。所以输入 t
,指定分区号,当它要求十六进制分区类型时,输入 82
,这是 Linux 交换分区类型,然后按回车键。
当你对创建的分区感到满意时,使用 w
子命令将新的分区表写入磁盘。fdisk
程序将退出,并在完成修改后的分区表的编写后返回命令提示符。当 fdisk
完成写入新分区表时,会收到以下消息:
The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
此时,你使用 partprobe
命令强制内核重新读取分区表,这样就不需要执行重新启动机器。
partprobe
使用命令 fdisk -l
列出分区,新交换分区应该在列出的分区中。确保新的分区类型是 “Linux swap”。
修改 /etc/fstab
文件以指向新的交换分区。如下所示:
LABEL=SWAP-sdaX swap swap defaults 0 0
其中 X
是分区号。根据新交换分区的位置,添加以下内容:
/dev/sdaY swap swap defaults 0 0
请确保使用正确的分区号。现在,可以执行创建交换分区的最后一步。使用 mkswap
命令将分区定义为交换分区。
mkswap /dev/sdaY
最后一步是使用以下命令启用交换空间:
swapon -a
你的新交换分区现在与以前存在的交换分区一起在线。您可以使用 free
或top
命令来验证这一点。
在 LVM 磁盘环境中添加交换空间
如果你的磁盘使用 LVM ,更改交换空间将相当容易。同样,假设当前交换卷所在的卷组中有可用空间。默认情况下,LVM 环境中的 Fedora Linux 在安装过程将交换分区创建为逻辑卷。您可以非常简单地增加交换卷的大小。
以下是在 LVM 环境中增加交换空间大小的步骤:
首先,让我们使用 lvs
命令(列出逻辑卷)来验证交换空间是否存在以及交换空间是否是逻辑卷。
[root@studentvm1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home fedora_studentvm1 -wi-ao---- 2.00g pool00 fedora_studentvm1 twi-aotz-- 2.00g 8.17 2.93 root fedora_studentvm1 Vwi-aotz-- 2.00g pool00 8.17 swap fedora_studentvm1 -wi-ao---- 8.00g tmp fedora_studentvm1 -wi-ao---- 5.00g usr fedora_studentvm1 -wi-ao---- 15.00g var fedora_studentvm1 -wi-ao---- 10.00g [root@studentvm1 ~]#
你可以看到当前的交换空间大小为 8GB。在这种情况下,我们希望将 2GB 添加到此交换卷中。首先,停止现有的交换空间。如果交换空间正在使用,终止正在运行的程序。
swapoff -a
现在增加逻辑卷的大小。
[root@studentvm1 ~]# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap Size of logical volume fedora_studentvm1/swap changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents). Logical volume fedora_studentvm1/swap successfully resized. [root@studentvm1 ~]#
运行 mkswap
命令将整个 10GB 分区变成交换空间。
[root@studentvm1 ~]# mkswap /dev/mapper/fedora_studentvm1-swap mkswap: /dev/mapper/fedora_studentvm1-swap: warning: wiping old swap signature. Setting up swapspace version 1, size = 10 GiB (10737414144 bytes) no label, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a [root@studentvm1 ~]#
重新启用交换空间。
[root@studentvm1 ~]# swapon -a [root@studentvm1 ~]#
现在,使用 lsblk
命令验证新交换空间是否存在。同样,不需要重新启动机器。
[root@studentvm1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk |-sda1 8:1 0 1G 0 part /boot `-sda2 8:2 0 59G 0 part |-fedora_studentvm1-pool00_tmeta 253:0 0 4M 0 lvm | `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm | |-fedora_studentvm1-root 253:3 0 2G 0 lvm / | `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm |-fedora_studentvm1-pool00_tdata 253:1 0 2G 0 lvm | `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm | |-fedora_studentvm1-root 253:3 0 2G 0 lvm / | `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm |-fedora_studentvm1-swap 253:4 0 10G 0 lvm [SWAP] |-fedora_studentvm1-usr 253:5 0 15G 0 lvm /usr |-fedora_studentvm1-home 253:7 0 2G 0 lvm /home |-fedora_studentvm1-var 253:8 0 10G 0 lvm /var `-fedora_studentvm1-tmp 253:9 0 5G 0 lvm /tmp sr0 11:0 1 1024M 0 rom [root@studentvm1 ~]#
您也可以使用 swapon -s
命令或 top
、free
或其他几个命令来验证这一点。
[root@studentvm1 ~]# free total used free shared buff/cache available Mem: 4038808 382404 2754072 4152 902332 3404184 Swap: 10485756 0 10485756 [root@studentvm1 ~]#
请注意,不同的命令以不同的形式显示或要求输入设备文件。在 /dev
目录中访问特定设备有多种方式。
推荐学习:《linux视频教程》
以上がLinuxのスワップスペースは何に使われますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。