ウェブサイト検索

LinuxでRAMドライブを作成する方法


もしあなたが気になっているなら、RAMドライブとtmpfsインスタンスは同じではありません。この記事では、その違いを説明し、コマンドラインを使用してLinuxでRAMドライブを作成する方法を示します。数分で高速なRAMドライブを設定しましょう!

RAMドライブとは何ですか?

あなたのコンピュータのRAMチップは、仮想ドライブを保持するために使用できます。このドライブはハードディスクには保存されず、RAM内に保存されます。この仮想ディスクの速度は通常のディスクよりも大幅に速く(特に古いタイプの回転ディスクと比較した場合、回転ディスク内部の部品の物理的な動きが追加の遅延を引き起こすため)、RAMチップはディスクほど早く劣化することはなく、特に古いタイプの物理ドライブに比べてさらにそうです。

あまりにも良すぎるように聞こえますか?実際に注意点があります。もし誤ってコンピューターを再起動するか、コンピューターがクラッシュした場合、あなたのデータはすべて失われてしまいます。RAM(ランダムアクセスメモリ)、つまりあなたのコンピューターのメモリチップは、情報を保持するために常に電力が必要です。RAMストレージは揮発性と見なされます。

言い換えれば、RAMドライブは一時的なアプリケーションや特定の最適化に適しています。例えば、ソフトウェアのテストを行うためにテストサーバーを使用する際、複数の同時テストを迅速に行うためにRAMドライブを設定します。また、サーバーの電源が切れても、あまりデータは失われません;単に別のテストを再開するだけです。

別のアプリケーションは、よくアクセスされるデータをRAMディスクに事前ロードすることです。例えば、特定の読み取り専用データベース(データを保持する必要がある場合、読み書きはより複雑になるかもしれません)に常にアクセスするサーバーがある場合、通常はディスクに配置されているその読み取り専用データベースを自動的にRAMにコピーすることができます(例えば、サーバー起動時の自動化スクリプトやcronジョブを使用して)、そしてデータベースサーバーがそのデータを使用できるようにします。

言い換えれば、主に2つの利用ケースを要約できます。一つはキャッシュ(私たちのR/Oデータベースの例のように)、もう一つは「非常に価値のある」データストレージ(私たちのテストの例のように)です。それから、さらに一歩進んで、特定の間隔でデータをディスクに同期させる(いわゆる3つ目の利用ケース)ことができます。たとえば、テストの例では、RAMストレージへの書き込みも含まれているため、テストの完了時にサマリーおよび/またはテストデータをディスク(永続ストレージ)に書き戻すことができます。

RAMドライブに関する別の注意点は、システム内のメモリのサイズに制限されており、オペレーティングシステムやその他のソフトウェアを実行するために他のメモリが必要なため、それよりも小さい可能性が高いことです。

RAMドライブのサイズをシステムメモリの80-85%以上に設定することは、問題を引き起こす可能性があると言えます。もちろん、サーバーに256GBのRAMがある場合、RAMドライブに90%を割り当てても、オペレーティングシステムやアプリケーション用に25GB以上残ります。しかし、4GBしかない場合、RAMに90%を割り当てると0.4GB(400MB)しか残らず、これは問題を引き起こす可能性が非常に高いです。したがって、全体のメモリ量と他のソフトウェアに必要なメモリ量によって、ある程度依存します。

RAMディスクは、tmpfsの割り当て/インスタンスとは同じようには機能しません。

RAMドライブ vs tmpfsインスタンス

tmpfsはコンピュータのRAMチップに保存されることもありますが、必ずしもそうする必要はありません。一般的に

/dev/shm

ほとんどすべてのLinuxオペレーティングシステムのインストール時に自動的に設定されるtmpfsマッピングは便利ですが、RAMドライブとは同じようには機能しません。

両者の違いは、RAMドライブ(剛性という用語が思い浮かびます)は実際のRAMチップに100%保存されるのに対し、tmpfsはLinuxカーネルのメモリプールに保存されるということです。これはスワップスペースのようなものを含む可能性があり、通常はディスクにあります。カーネルはプールへのすべてのアクセスを最適化する可能性がありますが、物理RAMまたは物理DISKのいずれかにデータが書き込まれる可能性があります。そして、ディスクに書き込まれる場合は、遅くなります。

RAMドライブの作成

RAMドライブを作成するのは比較的簡単です。"という小さなスクリプトを作成できます。

ramdrive.sh

次のコードを使用して:

#!/bin/bash

if [ "$(mount | grep -o "/mnt/ram")" != "/mnt/ram" ]; then

sudo mkdir -p /mnt/ram

sudo mount -t ramfs -o size=1g ramfs /mnt/ram

sudo chown -R $(whoami):$(whoami) /mnt/ram

fi

mount | grep ram

もう一つのスクリプトumount_ram.shは、次のコードを含んでいます:

#!/bin/bash

sudo umount /mnt/ram

最初のスクリプトを見てみましょう。まず、シェバン記号(#!)を使って、Bashをコマンドインタプリタとして使用したいことを示します。シェバンについてもっと学びたい場合は、Bashの自動化とスクリプトに関する3部作の記事『Bash Automation & Scripting Basics』を見てください。

その後、/mnt/ram(私たちがRAMドライブをマウントするために使用するディレクトリ)の下にすでにマウントがあるかどうかを確認します。これは、mount コマンドによって表示される「現在マウントされている」リスト全体から /mnt/ram を grep-only (grep -o) で調べることで行います。同じものが見つからない場合は、3つのsudoコマンドを実行します。すべてのコマンドは sudo を必要としますが、その理由はさまざまです。

最初のコマンドは、rootのディレクトリを作成する可能性があるため、また少なくとも/mnt内であるため、sudoが必要です。次のコマンド、私たちの実際のRAMディスクのマウントおよび作成には、マウントが特権操作であるため、sudoが必要です。サイズを1GBに設定するためにsize=1gを使用します。また、ramfsデバイスから来るramfsタイプのドライブ(-t ramfs)を希望していることを示し、最後にマウントポイントを/mnt/ramとしてリストします。

三番目のsudoが有効なコマンドでは、/mnt/ramディレクトリ(現在のRAMドライブ、ramfsマウントポイント)の所有者を現在のユーザーとそのユーザーの所属グループに変更します。そのためにwhoamiコマンドを2回使用します。この設定を、ramdriveを使用する特定のユーザーまたは特定のグループ、あるいはより多くのユーザーが使用する場合には広いグループに変更することをお勧めします。

これを終えた後、条件付きif .. fiコマンドを確定し、最後にmountを呼び出します。ramのgrepを用いて、スクリプトが既にマウントしているRAMに関する情報や、スクリプトが実行された際に新たにマウントされたものを報告することを確認します。これは、スクリプトが実行された際に成功したかどうかを素早く確認する便利な手段です。

私たちの二次スクリプトであるumount_ram.shは、マウントポイント/mnt/ramのRAMベースのドライブをアンマウントします。つまり、私たちが今作成したramfsドライブです。警告:これを実行すると、一時的なメモリに保存されたすべてのデータが直ちに削除され、RAMFSドライブを再マウントしても元に戻すことはできません;それは単に新しいが空のRAMドライブを作成するだけです。あらかじめ警告しておきます!

まとめる

この記事では、RAM/ramfs(同じもの)ドライブとtmpfsインスタンス/割り当てについて説明しました。その後、RAMドライブをマウントするための小さなスクリプトを使用して、/mnt/ramの下に1GBのramfsドライブを作成しました。

Linuxについての読み続けたい場合は、SimpleScreenRecorderを使ったLinuxでの画面録画や、ビット、バイト、バイナリ、または0からFまでの16進数の記事をぜひご覧ください!

楽しんで!

関連記事: