web-dev-qa-db-ja.com

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

Linuxを使用して起動すると、16MBのRAMディスクが16個自動的に作成されますが、いくつかのソフトウェアをテストするために非常に大きなRAMディスクを1つ作成したいと考えています。

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

基本的に、私は/ dev/ram0になる1つの10GB ramdiskを作成したいと思います。どうすればいいですか?カーネルブートパラメータがあると思いますが、まだ見つかりません。

29
Kevin S.

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

.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で、[デバイスドライバー]> [ブロックデバイス]を確認します。

起動時間

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

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 [デッド]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
20
Kevin S.

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

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

カーネルパラメータをいじり回すことなく、起動後に大きな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/

おそらく、複数の異なる層を通過するパフォーマンスのペナルティが少しありますが、少なくともそれは機能します。

8
user39725

別のオプションは、(前述のマウントの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などのようになります。 )

6
David Mirabito

代わりにループファイルを使用できます。必要なサイズのループファイルを作成し(tmpfs ramdiskに入れたい場合)、ループファイルをフォーマットしてマウントします。

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

ラムドライブの目的は速度です。 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

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

次に、フォーマットするだけです。

mke2fs /dev/ram0

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

mount /dev/ram0 /mnt/ramdrive

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

2
Swansword

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/dvdコピー、ペースト、保存ができる場所では、ramを除いて、hdディレクトリと同じようにすべてを実行します。シャットダウンする前に、ファイルを必ずhdに保存してください。

1
Marcos