Linux RAMディスク(/ dev / ram0-/ dev / ram15)の量とサイズを変更するにはどうすればよいですか?


27

Linuxを使用すると、ブート時に16 MBのRAMディスクが自動的に16個ありますが、いくつかのソフトウェアをテストするために1つの本当に大きなRAMディスクを作成したいと思います。

カーネルブートパラメーターを使用して、システムに既にあるRAMディスクのサイズを調整できることがわかりましたramdisk_sizeが、これにより16のRAMディスク(/ dev / ram0-/ dev / ram15)すべてが指定されたサイズになります。したがって、1GBのRAMディスクを作成するには、16GBのメモリが必要です。

基本的に、/ dev / ram0となる10GBのRAMディスクを1つ作成します。それをどうやってやるの?カーネルブートパラメーターがあると思いますが、それが見つかりません。

回答:


18

カーネルのコンパイル時間

.configファイルに設定できる2つのカーネル構成オプションがあります。

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

これにより、ブート時に10GのRAMディスクが1つ作成されるようにカーネルが構成されました。

ノート:

  • CONFIG_BLK_DEV_RAM_SIZE KB単位です。
  • 実際にコンピュータにRAMを搭載している以上のメモリを指定しないでください。
  • ではmenuconfigデバイスDrivers->ブロックデバイスの下に見て。

起動時間

カーネルブートパラメータを使用して、作成するRAMディスクのサイズを指定できますramdisk_size。例えば:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

これで、マシンを起動してファイルシステムを作成し、マウントして、ブロックデバイスのように使用できます。

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

ソース:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [dead]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

代わりにtmpfsを使用する必要があります。

mount -t tmpfs -o size=10g none /mnt/point

tmpfs上にファイルシステムを作成できますか?ファイルシステムを作成できるメモリに常駐するブロックデバイスが必要です。tmpfsでこれを実行できますか?
ケビンS.

tmpfs ファイルシステムです。たまたまメモリに常駐しています。
イグナシオバスケス-エイブラムス

3
私は答えに感謝し、通常はtmpfsがそのトリックを行いますが、書き込み先のメモリの一部にxfsファイルシステムを作成する必要があります。
ケビンS.

tmpfsの問題は、スワップによってバックアップされていることです。スワップの使用を開始すると、純粋なRAMに存在する利点が失われます。また、一部の人々は、暗号アプリケーションのために支援されていない領域を持つことを好む。
drudru

関連の答えと詳細はここにある:unix.stackexchange.com/questions/66329/...
jocull

7

ブート後にカーネルパラメータをいじらずに大きなRAMディスクを作成する。tmpfsを使用し、ファイルを作成し、ループ経由でマウントし、ファイルシステム経由でマウントします。

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

おそらく、複数の異なるレイヤーを通過するパフォーマンスのペナルティのビット...しかし、少なくともそれは動作します。


6

別のオプションは、ループデバイスを使用することです(前述のマウントのloobpack機能とは異なります)。

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

これで、/ dev / loopは正当なブロックデバイスになり、ファイルがバックアップされることを除き、アプリは物理デバイスまたはRAMディスクのように動作します。どこかにマウントするか、標準のブロックioctlを実装するデバイスノードでアプリを動作させることができます。システムRAMを節約し、テストケースなどを保持するのに役立ちます。

(fdisk myfs.imgでパーティションを作成し、losetupで--offsetおよび--sizelimitを使用して、各/ dev / loopXがイメージ内の特定のパーティションを指すようにすることもできます。したがって、loop0、loop1はsdc1、sdc2などになります。 )


カーネルを再コンパイルする必要がないため、+ 1
m-ric 14年

3

代わりにループファイルを使用できます。必要なサイズのループファイルを作成し(tmpfs ramdiskに配置する場合は問題ありません)、ループファイルをフォーマットしてマウントします。

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint

質問を投稿する前に実際にこれを試しました。これは素晴らしいソリューションですが、テストしているソフトウェアは、ブロックデバイスではなくファイルを処理する場合とは異なる動作をするため、ramdiskオプションを検討していました。ありがとう。
ケビンS.

2
ループバックデバイスはブロックデバイスなので、どのようにそれが可能かはわかりませんか?
pjc50

2

ramdriveの目的は速度です。Tmpfsはドライブではありません。ループデバイスはドライブではありませんが、ドライブイメージをループデバイスに配置できます。RAMディスクは「ドライブ」であり、非常に高速なドライブです。実行してみてください:

hdparm -t /dev/sda 

その後:

hdparm -t /dev/ram0

意味がわかります!しかし、hdparmはRAMドライブを破壊することがあります。それで、あなたは再びそれを作らなければなりません。

/ dev / ramデバイスがない場合があります。作成するには:

mknod -m 0777 /dev/ram0 b 1 0 

ただし、サイズはありません。サイズを指定するには:

dd if=/dev/zero of=/dev/ram0

ドライブがいっぱいになると停止します。最大サイズは、カーネル構成parm:によって決定されますCONFIG_BLK_DEV_RAM_SIZE

次に、フォーマットします。つまり、

mke2fs /dev/ram0

そしてそれをマウントします:

mount /dev/ram0 /mnt/ramdrive

私のお気に入りは、ramdriveに保存されているコードのデバッグです。コンパイルは、ハードドライブに保存されたコードの少なくとも10倍の速度です。ramdriveに保存されているデータベーステーブルも飛行しますが、定期的にハードディスクに書き込むスクリプトが必要です。ほとんどの管理者には、RAMディスクにデータを書き込むための勇気がありません。また、一部のテーブルが大きすぎます。


1

lighthouse 64(slackwareベースのpuupy linux)でこれを行いました。

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

そこで、ramdiskをディレクトリとしてマウントし、/mnt/dvdram以外のhdディレクトリで行うのと同じように、貼り付けてすべてを保存することができます。シャットダウンする前に、必ずファイルをhdに保存してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.