NixOS でのスワップ、ZRAM、Zswap、およびハイバネーションについて

2026/09/24 3:07

NixOS でのスワップ、ZRAM、Zswap、およびハイバネーションについて

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

概要:本ガイドは、NixCon 2026 で発表されたデスクトップおよびノートパソコン向けの簡素化された NixOS のサスペンド構成を示しています。中心的な戦略としては、バッテリー持続時間とデータ保存のバランスを取るために、ACPI S3 スリープを優先し、后备として S4 のハイバネーションを行うことを採用しています。ハイバネーションには initramfs に可視化されるスワップ領域が必要であり(UEFI 上で EFI 変数を通じて)、構成ではデスクトップ向けに単純なスワップパーティションまたはノートパソコン向けに LUKS で暗号化された btrfs および 32GB のスワップファイルを使用しています。両方のアプローチとも現在 zswap を有効にし(

boot.zswap.enable = true
)、SSD 上では Chris Down が推奨する通り
vm.swappiness = 100
を設定しています。本ガイドの主要な改善点は、zswap の圧縮アルゴリズムを lz4 から zstd に切り替えることであり、これは ArchWiki および NixOS のデフォルトにも一致しており、圧縮比率を向上させプールのメモリページ数を増やすことを可能にします。また、ガイドは
zramSwap.enable
の誤った利用を是正し、それを
boot.zswap
に置き換えることで、
boot.initrd.systemd.enable
の新しいデフォルトを活用して initrd 構成を簡素化しています。

本文

NixOS におけるスワップと ZSwap の実践的設定

注記: 私は NixCon 2026 に参加予定です!同様に出席される方がいれば、お会いできることを楽しみにしています。

本記事では、デスクトップ環境におけるスワップ(swap)、zram、zswap の有効活用について、私の経験と設定をまとめました。

スワップの有効化:なぜ必要か?

ネット上の議論は古くからありますが、サーバー用とワークステーション(デスクトップ)用の推奨事項が混同されがちです。ここではデスクトップ・ラップトップに焦点を当てて解説します。

私は スワップを使用しています。その主な理由は以下の通りです。

  • KDE の「Standby, then hibernate」動作の活用
    • まず ACPI S3(RAM スリープ)に入り、一定時間後に S4(休止状態/Hibernate)へ移行する設定を採用。
    • 良いバランス: 少し離れる場合は再起動不要で、完全に電源を落とすことを忘れた場合でもシステムが安全にシャットダウンできる。
    • 休止状態を実現するには、システムの状態をディスクに保存する必要があり、スワップ領域の確保は必須。

スワップファイルかパーティションか?

スワップ実装には「ファイル」と「パーティション」の対立があります。休止状態(hibernate)を正しく動作させる場合、以下の注意点があります。

  • スワップファイルの難点:
    • 休止状態から復元する際、ファイルシステムがマウントされる前に
      initramfs
      がスワップ領域の場所を特定する必要があるため設定が複雑化しやすいためです。
    • UEFI システムでは詳細情報を EFI 変数に保存する必要があります。

私の構成案

デスクトップ:単純なスワップパーティション

swapDevices = [
  {device = "/dev/disk/by-uuid/f2fc399a-9703-450b-88df-5671b776fc71";}
];

ラップトップ:LUKS 暗号化 + スワップファイル(Btrfs サブボリューム)

disko
の
luks-btrfs-subvolumes
テンプレートに基づいています。NixOS はスワップファイルを使用した休止状態を正しくサポートしており、オフセットの特定も自動的に行えます。

fileSystems."/.swapvol" = {
  device = "/dev/disk/by-uuid/33682d1d-87c4-4166-8d3b-66d900387e42";
  fsType = "btrfs";
  options = ["subvol=swap"];
};

swapDevices = [
  {
    device = "/.swapvol/swapfile";
    size = 32 * 1024;
  }
];

推奨設定:zswap を採用する

Chris Down の記事(「スワップ擁護」と「zswap と zram の神話を解き明かす」)を起点に、ディスクベースのスワップに対して zswap を使用するのが最適です。

私の現在の最小構成

設定が簡素であっても重要性は変わりません。以下の 2〜3 行のみで済みます。

boot.zswap.enable = true;
boot.kernel.sysctl."vm.swappiness" = 100;

swappiness
の値について

  • 役割: スワップとファイルシステムページの移動コストのバランスを制御します。
  • 推奨値: Chris Down はSSD 搭載システムでは
    100
    を推奨しています。
  • 注意点: 異なる値を実際にテストして最適な値を見つける必要があります。
  • 現状: 私の SSD では
    swappiness = 100
    が良好に機能しています(ワークステーションでのテスト手順は未確認)。

過去の教訓:zram と zswap の混乱

以前、Chris の記事を誤って解釈し、

zramSwap.enable
を使用していました。これはディスクベースのスワップが必要な休止状態の実現において不適切でした。

修正プロセス

  • 発見: 2024 年 4 月まで誤った設定(
    zramSwap
    )を維持していたが、
    boot.zswap
    の導入を機に見直した。
  • 対応:
    zramSwap.enable
    を削除し、正しく
    boot.zswap
    に切り替えた。

圧縮アルゴリズムの選択 (
compressor
)

アルゴリズムデフォルト (Linux) / NixOSメリット・判断理由
lzoLinux カーネルデフォルト速度と圧縮率の良いバランス。
zstdNixOS デフォルト最も優れた圧縮比率。ディスクアクセス頻度を大幅に低減できるため最適。
lz4ArchWiki の傾向速度は早いも圧縮率は劣る。ボトルネックになりにくい場合でも、zstd が優位。

最終的な構成(簡素化後)

当初は

boot.initrd.systemd.enable = true
が必要でしたが、現在はデフォルトで有効のため削除可能です。これにより構成は以下の通りになりました。

boot.zswap = {
  enable = true;
  compressor = "lz4"; # または zstd
};
boot.kernel.sysctl."vm.swappiness" = 100;

現在推奨: NixOS のデフォルトである

zstd
を使用することが最も効果的です。

まとめ

何か新しいことを学び、それを共有する姿勢こそが重要です。スパムや第三者への共有は一切行わず、二人三脚で知識を深めていこうと思います。

同じ日のほかのニュース

一覧に戻る →

2026/09/24 3:06

クローデが CRISPR 様反復構造を持つ新たな酵素系を発見した

## Japanese Translation: Anthropic は、基礎生物学に特化した新たな Life Sciences 研究グループを立ち上げ、Claude エージェントを使用して DNA データセットを探査し、人間の科学者とともに物理実験室で仮説を検証する取り組みを開始しました。2026 年春、チームはベイエリアに自社工場を建設し、BSL-1/BSL-2 の安全制限下で低リスクの実験のみを行い、すべての実験作業は人間が行う体制を整えました。約 21 時間にわたって約 2 億 1,000 万トークンを処理する約 950 台の自律型 Claude エージェントが、大規模な遺伝子データベースを走査して興味深い逆転写酵素の例を探しました。1 つのエージェントは、RT ゼーン近傍にあるタンデムリピートアレイを発見し、CRISPR 技術に類似していることに着目することで、「配列関連型逆転写酵素(ART)」システムを特定しました。ART システムは 3 つの部分で構成されており、巨大なファージ由来の逆転写酵素、隣接するパートナー遺伝子、ならびに短い RNA として発現する非コード DNA のリピート配列が均等間隔で並ぶ長アレイからなります。CRISPR 先駆者である Feng Zhang 氏による見解を得たうえ、Anthropic の異種タンパク質に関する専門知識を背景に、プロジェクトは一般公開用のプレプリント技術報告書を発行し、物理実験における本質的な人間の監督下で実行されるスケーラブルな AI 主導の仮説検証において新たな先例を確立しました。

2026/09/24 6:01

VSCode の SSH アгентは素晴らしいです

## Japanese Translation: セキュリティ研究者のトーマス・プタチェクは、Visual Studio Code の SSH 遠隔編集機能はシステム整合性に対して深刻な脅威をもたらすと警告しており、Emacs Tramp といった代替手段の安全限界をはるかに超えていると指摘している。Tramp がリモート接続上でローカルに動作する一方、VSCode は Bash スニペット的なステーガーを実行し、エージェントをダウンロードして Node.js バイナリをインストールすることで、「フルスケールの侵入」を行う点で異なる。このダウンロードされたエージェントは、ローカルの VSCode フロントエンドとの間で永続的な WebSocket 接続を維持し、ファイルシステムを探索したり、任意のファイルを編集したり、独自のシェル PTY プロセスを開始したり、リモートシステム上にて自身を持続化したりする能力を有している。プタチェクは、LLM の「幻覚」はエージェントを通じて LLM と実行環境の間でループを閉じることで軽減できると認めつつも、そのようなプロセスは開発用ラップトップにおいては境界上の問題により実施すべきではないと指摘する。理想的には、LLM エージェントを用いた反復開発は、ホストシステム構成を変更できず瞬時に起動されるクリーンスレート Linux インスタンス上で行われるべきである。プタチェクは、この機能を開発サーバーで使用する際に懸念を覚えるだろうし、本番システムでのインシデント中に発生すれば怒り狂うだろうと警告している。また、Fly Machine のカスタム接続はこの懸念を回避可能だが、彼のブログの主な目的はこのセキュリティ洞察を読者に共有することにあることを明記している。

2026/09/24 6:31

クレードの荷重支持継ぎ目

## Japanese Translation: 核心的な論点とは、荷重支持接合部(load-bearing seams)が偶発的な詳細ではなく、重要な構造的要素であるというものであり、状況の理解方法を本質的に変えるものである。表面的な問題と深層的な構造的な問題の間に違いが存在し、元の結論は提示された質問に答えつつも、その証拠が実際に接合部について問いかけていたことを扱わなかった。状況を単一のバイナリ(二値)に還元することはニュアンスを失わせ、代わりに複数の真理を生産的な緊張関係の中で保持すべきである。重要な過ちの一つは、単に記述する証拠と実際の構造的作業を行う証拠の区別を行わなかった点にある。不確実性はノイズを排除すべきものではなく、複数の解釈を可能にするモデルの限界を示しており、分析は複雑性を増しつつ、外観・支持された主張・整合性にとって必要な真理の間の関係を明確化している。今後には、初期の仮見直しを行い、証拠を荷重支持接合部に直接的に対置して再評価することが必要であり、新しい結論に急ぐこと 대신 収束(convergence)を目指すべきである。最も高いレバレッジを持つ行動は、記述的な外観から構造的現実がどの点で乖離しているかを特定し、特に接合部を中心に例外、パターン、カテゴリーエラーを把握することにある。この転換により証明責任の枠組みが再定義され、元の結論が接合部を回避するのではなくそれを考慮するようになり、結果的に組織が表面の詳細と本質的な構造的制約との関係をどのように変革するかを示す。

NixOS でのスワップ、ZRAM、Zswap、およびハイバネーションについて | そっか~ニュース