Swap (日本語)

From ArchWiki
Revision as of 08:18, 24 January 2013 by Kusakata (Talk | contribs) (Created page with "Category:File systems (日本語) en:Swap es:Swap fr:Swap it:Swap pt:Swap zh-CN:Swap {{Article summary start|概要}} {{Article summary text|GNU/Li...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary end

All about Linux swap space より:

Linux は物理 RAM (random access memory) をページと呼ばれるメモリのチャックに分割します。スワッピングとは、メモリを開放するために、ページがスワップ領域という名の事前設定領域にコピーされることを言います。物理メモリとスワップ領域の合計が利用できる仮想メモリのサイズになります。

スワップ領域

スワップ領域は普通ディスクパーティションとして作られますが、ファイルにすることもできます。Arch Linux のインストール中にユーザーはスワップ領域を作成することができ、場合によっては後でそれが必要になるでしょう。スワップ領域は一般的に RAM が 1GB より少ないユーザーに推奨されます、PC に物理メモリが余分にあるならスワップ領域を作るかは好みの問題になります (ただ suspend-to-disk をするには必要になります)。

スワップの状態を確認するには、次を実行:

$ swapon -s

もしくは:

$ free -m
Note: スワップファイルとパーティションにパフォーマンスの違いはありません、どちらも同じように扱われます。

スワップパーティション

ほとんどの GNU/Linux パーティションツール (例: fdisk, cfdisk) でスワップパーティションの作成ができます。スワップパーティションはタイプ 82 と指定されています。

Linux のスワップ領域をセットアップする時には、mkswap コマンドが使われます。例えば:

# mkswap /dev/sda2
Warning: 指定したパーティションに保存されている全てのデータが消失します。

ページングのためにデバイスを有効にするには:

# swapon /dev/sda2

起動時にスワップパーティションを有効にするには、エントリを fstab に追加します:

/dev/sda2 none swap defaults 0 0
Note: TRIM をサポートした SSD を使っている場合、スワップのための正しいマウントオプションは discard です。手動でスワップを作成するとき、-d や --discard を使うことで同じことができます。discard などのマウントオプションの詳しい情報は、swapon の man ページを見て下さい。

スワップファイル

パーティションを作るかわりに、オンザフライでサイズを変えたり簡単に削除できるものとしてスワップファイルが選択肢になりえます。特にディスク容量が貴重な場合 (例: 小容量の SSD) はこちらが理想的でしょう。

Note: 今のところ BTRFS ファイルシステムはスワップファイルをサポートしていません。このことに気をつけておかないとファイルシステムの破壊をもたらす可能性があります。

スワップファイルの作成

root 権限で fallocate を使ってあなたが決めたサイズでスワップファイルを作成します (M = メガバイト, G = ギガバイト) (dd を使うこともできますが作成時間は長くなります)。例えば、512 MB のスワップファイルを作成するなら:

# fallocate -l 512M /swapfile
または
# dd if=/dev/zero of=/swapfile bs=1M count=512

正しいパーミッションを設定します (スワップファイルを全てのユーザーが読めるようにすると深刻な脆弱性になります)

# chmod 600 /swapfile

正確なサイズのファイルを作成した後、ファイルをスワップにフォーマット:

# mkswap /swapfile

スワップファイルを有効に:

# swapon /swapfile

/etc/fstab を編集してスワップファイルのエントリを加えて下さい:

/swapfile none swap defaults 0 0

スワップファイルの削除

スワップファイルを削除するには、現在使っているスワップファイルを無効にしなければなりません。

root 権限で:

# swapoff -a

スワップファイルの削除:

# rm -rf /swapfile

スワップファイルレジューム

スワップパーティションからのレジュームと対照的に、ハイバネーション後のスワップファイルからのシステムのレジュームにはカーネルパラメータを追加することが必要です。追加するパラメータは resume_offset=<Swap File Offset> です。

<Swap File Offset> の値は filefrag -v の出力から求めることができます; 出力はテーブル形式でなされます; 必要な値は physical 列の最初の行にあります。例:

# filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 4290772992 (1047552 blocks, blocksize 4096)
ext logical  physical  expected  length flags
  0       0     7546880                6144 
  1    6144  7557120  7553023   2048 
  2    8192  7567360  7559167   2048 
...

この例では <Swap FIle Offset>7546880 です。

Note: resume カーネルパラメータはパーティションへのパス (例: resume=/dev/sda1) を入力するパラメータであり、スワップファイルへのパスを入力するものではないことに注意してください!システムにスワップファイルのハードディスク上の位置を知らせるパラメータは resume_offset です (例: resume_offset=7546880)。

USB デバイスとスワップ

Linux によるモジュール性のおかげで、私達は他のデバイスにわたる複数のスワップパーティションを使うことができます。あなたがひとつの完全なハードディスクを持っている場合、USB デバイスを一時パーティションとして使うことができます。ただしこのメソッドにはいくつか欠点も存在します:

  • USB デバイスはハードディスクより低速です。
  • フラッシュメモリには書き込み回数の上限があります。スワップパーティションとして使うと急速に書き込み可能回数を消費します。
  • 他のデバイスをコンピュータに接続したときに、スワップが使われません。

USB デバイスをスワップに加えるには、まず USB フラッシュをスワップパーティションとしてパーティショニングします。Gparted などのグラフィカルツールや fdisk などのコンソールツールが使えます。パーティションテーブルを書き込む前にパーティションをスワップとしてラベル付けすることを忘れないで下さい。

パーティションの書き込み先のディスクが正しいか確認しましょう!

次に fstab を編集します

# nano /etc/fstab

今のスワップエントリの下に、新しいエントリを加え、現在のスワップパーティションに新しい USB のパーティションを接収させます

UUID=... none swap defaults,pri=10 0 0

UUID は次のコマンドの出力から決めて下さい

ls -l /dev/disk/by-uuid/ | grep /dev/sdc1

sdc1 をあなたの新しい USB スワップパーティションに置き換えます。 sdb1

We use UUID because when you attach other devices to the computer it could modify the device order

最後に、元のスワップエントリに

pri=0

を加え、fstab に USB がいっぱいの時はハードディスクのスワップのみ使うように知らせます。

このガイドは SD カードなどの他のメモリでも使うことができます。

パフォーマンスチューニング

スワップ値を変えることでパフォーマンスを向上できるかもしれません。

Swappiness

The swappiness sysctl parameter represents the kernel's preference (or avoidance) of swap space. Swappiness can have a value between 0 and 100. Setting this parameter to a low value will reduce swapping from RAM, and is known to improve responsiveness on many systems.

/etc/sysctl.conf
vm.swappiness=1
vm.vfs_cache_pressure=50

Priority

If you have more than one swap file or swap partition you should consider assigning a priority value (0 to 32767) for each swap area. The system will use swap areas of higher priority before using swap areas of lower priority. For example, if you have a faster disk (/dev/sda) and a slower disk (/dev/sdb), assign a higher priority to the swap area located on the faster device. Priorities can be assigned in fstab via the pri parameter:

/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10  0 0

Or via the −p (or −−priority) parameter of swapon:

# swapon -p 100 /dev/sda1

If two or more areas have the same priority, and it is the highest priority available, pages are allocated on a round-robin basis between them.