web-dev-qa-db-ja.com

再起動後にファイルシステムを変更しないLinux上のRAMディスク)を作成します

次のコマンドを使用して、Ubuntu 16.10(VM内で実行)にRAMディスク)を作成します。

 Sudo mkdir -p/media/RAMDisk 
 Sudo mount -t tmpfs -o size = 2048M tmpfs/media/RAMDisk 

この後、RAMDiskに移動してこれを実行すると

 df。

私は次のようになります

 tmpfs 2097152 0 2097152 0%/ media/RAMDisk 

ここまでは順調ですね。

次に、Ubuntuを再起動します(Workstation Pro経由で実行されているVM)を再起動します)。

再起動後、/media/RAMDiskフォルダーがまったく存在しないか、内容のないtmpfsファイルシステムとして存在することを期待しています。

/media/RAMDiskフォルダーはコンテンツなしで存在しますが、驚くべきことに/dev/sda1ファイルシステムとして存在します。 df ./media/RAMDiskで実行すると、次のように表示されます。

/dev/sda1 17413904 9577448 6928836 59%/ 

これで、コマンドを.bashrc内に簡単に配置して、コマンドを実行し、毎回正しいことを実行できるようになりましたが、何が起こっているのかを知る必要があります。

また、私の仮想マシンマネージャーであるWorkstation Proは何かをしている可能性がありますか?

1
treecoder

何が起こっている?

異常なことは何もありません。

df /media/RAMDiskは、/dev/sda1を参照する場合、現在ディレクトリが/dev/sda1にマウントされている/のファイルシステムに属していることを示します。

これは、mountコマンドの効果が永続的ではなく、再起動後も存続しないためです。一方、mkdirコマンドは/dev/sda1のファイルシステム内にディレクトリを作成し、このファイルシステムは再起動のたびにマウントされるため、ディレクトリ自体は存続しますが、/dev/sda1ファイルシステムの一部として存続します。

何らかの方法で、すべての起動後(または起動時)にRAMDiskをマウントする必要があります。


マウント方法は?

.bashrc内からmountを実行することは、1回のセッション中に このファイルは複数回ソースされる可能性がある であるため、お勧めできません。とにかくSudoが必要なので、OSの起動時に1回実行される/etc/rc.localを使用することをお勧めします。

ただし、さらに良い方法は、/etc/fstabに次の行を追加することです。

tmpfs /media/RAMDisk tmpfs defaults,nosuid,nodev,size=2048M 0 0

userおよびnoautoオプション(man 5 fstabを参照)を調査し、それらを使用してmount /media/RAMDiskをオンデマンドでのみ呼び出すことをお勧めします。


systemd

このサイト 特定のユーザーが初めてログインしたときにsystemdユニットを実行し、そのユーザーの最後のセッションが閉じられるとすぐに終了できると私は信じています。私はsystemdにあまり詳しくないので、.mountユニットでそれを行う方法(if)を説明できません。

ただし、systemdを使用する場合は、個人のtmpfs/run/user/<UID>にマウントされているはずです。システム全体のものは/dev/shmにある必要があります。


/media/について

また、/media/はUbuntuがマウントポイントを作成するために使用することに注意してください。外付けUSBドライブ用(udisks2が責任があると思います)。それらは/media/<username>/<label>のように見えるかもしれないので、/media/RAMDiskは何とも衝突しないと思います。一般的に、私はこの場所の使用を避けます。私のシステム(Debian、Kubuntu、Raspbian、OpenWRT)では、/mnt/<something>を使用していますが、問題は発生していません。

1