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を作成したいと思います。どうすればいいですか?カーネルブートパラメータがあると思いますが、まだ見つかりません。
.config
ファイルで設定できるカーネル構成オプションは2つあります。
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760
これにより、ブート時に10GのRAMディスクを1つ作成するようにカーネルが構成されました。
ノート:
CONFIG_BLK_DEV_RAM_SIZE
はKBです。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
出典:
代わりに 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/
おそらく、複数の異なる層を通過するパフォーマンスのペナルティが少しありますが、少なくともそれは機能します。
別のオプションは、(前述のマウントの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などのようになります。 )
代わりにループファイルを使用できます。必要なサイズのループファイルを作成し(tmpfs ramdiskに入れたい場合)、ループファイルをフォーマットしてマウントします。
dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
ラムドライブの目的は速度です。 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ディスクにデータを置くための勇気がありません。そして、いくつかのテーブルは大きすぎます。
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に保存してください。