blog

Technology|Linuxで従来のスワップ領域をzramに置き換える

zram は、特にスワップ領域として使用できるメモリ圧縮キャッシュを作成するためのツールです。...

Oct 21, 2025 · 7 min. read
シェア

zramは、特にスワップ領域として使用できるメモリ圧縮キャッシュを作成するためのツールです。

  1. # lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
  3. sda 8:0 0 disk
  4. ├─sda1 8:1 0 600M 0 part
  5. zram0 G 0 disk [SWAP]

でもなぜ?

zramについて調べ始めたとき、zramをスワップスペースに使うという基本的な記事をいくつか見つけただけでした。最初は、これは少し直感に反するように思えました。結局のところ、メモリが不足している場合、メモリ内の仮想ドライブにページをスワップすることに何のメリットがあるのでしょうか?

そして Fedora Project の wiki ページを見つけました。zramは圧縮を使うメモリドライブです。ブート時にzramスワップスペースを作成し、デフォルトのスワップパーティションを使用しないようにします。"

このページの残りの部分は、その詳細、効果、副作用、およびフィードバックについてです。

Linuxのスワップ領域用zram

zramをスワップ領域として使用すると、通常のパーティションベースやファイルベースのスワップ領域と同じことができます。メモリに負荷がかかると、最近使用されたデータの一部がスワップ領域に移動します。平均して、元のサイズの約50%に圧縮され、メモリ内のzramスペースに置かれます。これは、これらのメモリページをハードドライブに保存するよりもはるかに高速で、他の目的に使用するメモリを解放します。

交換スペースの節約

スワップ・スペースやzramスワップ・スペースの設定について、推奨される要約を見つけようとしていました。そのため、スワップスペースのセットアップを再検討することになり、私の記事「最新のLinuxシステムにとって正しいスワップスペースとは?.私の知る限り、推奨されるスワップ領域の量はRHELとFedoraの最新のドキュメントから変わっていません。しかし、そのドキュメントはzramの使用を無視しています。

しかし、zramを使用しない、あるいはzramが無効になっている古いバージョンのLinuxの場合、この記事の表はスワップ領域割り当ての良い出発点となります。

私が見つけたzramの機能に関するドキュメントは、メモリサイズに基づいてzramがどのようにスペースを割り当てるか、またzramに割り当てられるスワップスペースの量について一貫していません。

権威ある文書がないため、私はいくつかの実験を行い、zramスワップ領域の割り当てに使用されるアルゴリズムを経験的に決定しました。この目的のために、私自身の物理システムと仮想システムを使用しました。結果は興味深いもので、これまで私が見つけたどのドキュメントとも矛盾していました。

8GB以上のRAMを搭載している物理ホストと仮想ホストはすべて8GBのzramを正確に表示します。これには64GBのRAMを搭載したメインワークステーションと16GBまたは32GBのRAMを搭載した他のホストが含まれます。

これらのデータから、現在のデフォルト設定は8GBまでのzramで、8GB以下のホストではzramがメモリの95%を占めていると結論づけられます。

zramのスワップ領域について、他のサイズや100%メモリまで言及している記事を読んだことがありますが、現実的ではなく理論的なもののようです。

ディストリビューションは異なるかもしれませんが、Fedoraと同様のディストリビューションで実際のzramスワップスペースがどのように割り当てられるかを示します:

  • メモリ ⇐ 8GB:0.95×メモリ
  • NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

zramのスワップ領域サイズ決定アルゴリズムは、任意の実世界のシステムやアプリケーションに「最適な」スワップサイズを推奨するものではないことに注意してください。このzramスワップ領域の割り当ては、幅広いLinuxホストでうまく機能するはずの、かなり確率的なアプローチです。しかし、zramスワップスペースの最大サイズは8GBに設定されており、私は常に従来のスワップスペースの最大サイズとして8GBを推奨してきたため、zramスワップスペースの最適サイズを反映していると言えると思います。

zramスワップ領域の管理

  1. # cat /usr/lib/systemd/zram-generator.conf
  2. # This config file enables a /dev/zram0 device with the default settings:
  3. # - size - same as available RAM or 8GB, whichever is less
  4. # - compression - most likely lzo-rle
  5. # To disable, uninstall zram-generator-defaults or create empty
  6. # /etc/systemd/zram-generator.conf file.
  7. [zram0]zram-size= min(ram, 8192)

zram-generator.conf設定ファイルの最終行でデフォルトのzramスワップ・スペース・サイズを変更することができます。しかし、そうする理由を明確に述べ、変更後に結果をテストしない限り、そうしないことをお勧めします。Linuxの他の多くの設定デフォルトのように、zramのデフォルトは、ほとんどの使用例に対して十分にテストされています。

zram の監視

ツールは、zramの現在のステータスを表示するために使用できます zramctl

  1. # zramctl
  2. NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
  3. /dev/zram0 lzo-rle       4.8G   4K   80B   12K       4[SWAP]

従来のswaponコマンドも、スワップとして使用されるzramを含むスワップを表示するために使用することができます:

  1. # swapon --show
  2. NAME       TYPE      SIZE USED PRIO
  3. /dev/zram0 partition 4.8G   0B  001

zramctlはzramがデータを含んでいないときは報告しないので、結果には空の出力が含まれることに注意してください。一方、lsblk、swapon、top、free、htopなどのツールは、データが含まれていなくてもzramを表示します。

zram を無効化

swapoff -aコマンドは、zramスワップスペースと、スワッピングに使用されているレガシーHDDまたはSSDストレージをシャットダウンします。 swapon -aコマンドは、zramが空の場合は表示しません。

  1. # swapon --show# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
  3. sda             8:00  120G  0 disk
  4. ├─sda1          8:10    1G  0 part /boot/efi
  5. ├─sda2          8:20    1G  0 part /boot
  6. └─sda3          8:30  118G  0 part
  7.   vg01-root 253:00   10G  0 lvm  /
  8.   ├─vg01-swap 253:10    3G  0 lvm  [SWAP]
  9.   ├─vg01-usr  253:10   30G  0 lvm  /usr
  10.   vg01-home 253:20   10G  0 lvm  /home
  11.   ├─vg01-var  253:30   30G  0 lvm  /var
  12.   └─vg01-tmp  253:40   10G  0 lvm  /tmp
  13. sr0            4M  0 rom
  14. zram0         252:00    0B  0 disk
  15. # zramctl## zramctl /dev/zram0
  16. NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
  17. /dev/zram0 lzo-rle         0B   0B    0B    0B       4

zramスワップスペースの作成

zram自体は20年ほど前から存在していますが、一部のディストリビューションでスワップ領域として使われるようになったのはここ1、2年のことです。現在のLinux環境の一部またはすべてのホストに、zramで作成されたスワップ領域がない可能性があります。もしそうであれば、簡単に改善できます。

zram スワップスペースをデフォルトで使用する最後のバージョンである Fedora 32 では、3つの簡単なコマンドだけが必要です。

まず、zram RPMパッケージの一部としてインストールされる zram-swap.service ファイルの存在を確認します:

  1. # systemctl status zram-swap
  2. zram-swap.service - Enable compressed swap in memory using zram
  3.      Loaded: loaded (/usr/lib/systemd/system/zram-swap.service; disabled; vendor preset: disabled)
  4.      Active: inactive (dead)

次に、 zram-generator-defaults zram-generator パッケージをインストールします:

  1. # dnf install zram-generator-defaults zram-generator

zram-swap 有効にして開始します:

  1. # systemctl enable zram-swap.service# systemctl start zram-swap.service

次に、 zram0 存在し、スワップ領域として使用されていることを確認します:

  1. # lsblk
  2. NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
  3. sda             8:00  120G  0 disk
  4. ├─sda1          8:10    2G  0 part /boot
  5. └─sda2          8:20  118G  0 part
  6.   vg01-root 253:00   10G  0 lvm  /
  7.   ├─vg01-swap 253:10    3G  0 lvm  [SWAP]
  8.   ├─vg01-usr  253:20   35G  0 lvm  /usr
  9.   ├─vg01-tmp  253:30   15G  0 lvm  /tmp
  10.   ├─vg01-var  253:40   35G  0 lvm  /var
  11.   vg01-ホーム 253:50   20G  0 lvm  /home
  12. sr0            4M  0 rom
  13. zram0         252:00  7.5G  0 disk [SWAP]

zramによるスワップスペースの改善

Read next