Android 4.x用のRAMDisk / Ramdriveを作成することは可能ですか?


8

ルート化されたAndroid 4.xで自動拡張tmpfs ramdiskを作成することは可能ですか?はいの場合、どのように?


2
これは何のために必要ですか?
geffchang 2013

さまざまなドキュメントファイルの一時ストレージ
eadmaster '30 / 07/30

1
SDカードはスタットダウン時に自動クリーニングされません...
eadmaster 2014年

2
@geffchang彼がなぜこれを必要とするのか、それはどのような違いがあるのでしょうか?全く違う理由で、私もこれを必要としています。
マイケル

3
そして私の場合、理由はフラッシュに触れる必要なしに一時的なストレージのためです(Androidはほとんどいつでも警告なしにプロセスを終了できます)(消去サイクルの制限、電力使用量の増加、遅いなど)
Michael

回答:


6

実行すると、tmpfsにcat /proc/filesystems気付くはずです。したがって、コマンドにアクセスできる場合、次のことができるはずです。mount

  1. ディレクトリを作成(mkdir MYDIRECTORY
  2. そこにtmpfs-filesystemをマウントします(mount -t tmpfs tmpfs MYDIRECTROY

デフォルトでは、tmpfs-mountはシステムで使用可能なRAMのhalvを使用します。したがって、「自動拡張」ではなく、「自動圧縮」と考えることができます。つまり、使用するほど、使用可能なRAMは少なくなります。最悪の場合、システムがスワップを開始する可能性があります(これは望ましくありません)。オプションを使用して、そのマウントに異なるRAMサイズを使用できます。

2017-02-28更新:Androidによる制限のため、すべてのアプリに対して書き込み可能なものより下のマウントポイントを選択する必要があります。SDカードのように。


[OK]を、この方法は、すべてのアプリケーションによって書き込み可能である:mount -o size=16M -t tmpfs tmpfs /data/local/tmp
eadmaster

@eadmasterそれについて誰がそれを誰でも書き込み可能にするどの部分ですか?サイズまたはマウントポイント?(それは私のために働いていません...)
マイケル14

@Michaelにはどの属性が表示されますか。ls -Falマウントされたディレクトリ内で発行した場合?
Nils

ls -Falマウントされたディレクトリでの出力はありません。プロンプトが表示されるだけです。私は親からディレクトリの一覧を表示した場合、私が取得drwxrwxrwt root root 2014-04-06 20:18 tmp
マイケル・

@Michaelお使いのOSがルート権限を取得している場合は、それにアクセスできるはずです
eadmaster

3

OPが同封したリンキーから、重要な部分はそれを要約しました:

tmpfsは、バージョン2.4以降のLinuxカーネルでサポートされています。[3] tmpfs(以前はshmfsと呼ばれていました)は、起動時に使用されるramfsコードに基づいています

RAMDiskとは、私のものを強調してください!これにより、カーネルは一時的にルートファイルシステムをマウントし、起動時に必要なスクリプトの実行を継続できます。

このAndroidの場合にも同じことが当てはまります。Odin、fastboot、Kies、Sony Update Software、Heimdallなどによってboot.img/bootパーティションにフラッシュされるものすべてに、適切なコードを含むディレクトリ構造を持つ「ramfsコード」が含まれています。含まれています:

  • /dev デバイスファイル用
  • /sbin システムバイナリ用
  • /sysマウント のデバイスファイルとの対話の使用法/proc

起動スクリプトは、ramfsディレクトリ構造を読み取り、/system起動の非常に早い段階でを正常にマウントした後でマウントします。

質問のOPのキーワードに関連して:

自動成長を作成します...

それ自体は自動拡張せず、ramfs構造と使用可能なRAMの容量によって制限されます。さらに重要なことに、再起動時に表示されなくなります!

混乱は、「RAMDisk」と「RAMDrive」が交互に混在することから生じます。技術的には、RAMDriveは、ネイティブのスワップパーティションのスワップスペースであり、デスクトップLinux で一般的に見られます。RAMDriveが使用されていた古いDOS時代を考えている場合、メモリに常駐するディスクドライブ、およびそのディスクにコピーされ、プログラムが古いMFM / RLLディスクドライブからロードするのではなく、高速にロードされて実行をシミュレートする(これらのドライブでDOSディレクトリのリストが非常にゆっくりスクロールするのを見る) ?)これは、RAMDiskとも呼ばれていました。(さらに悪いことに、当時、さまざまなメーカーがRAMDRIVE.SYSまたはRAMDISK.SYSを作成していました!)

Linuxカーネル(デスクトップとAndroidの両方)の観点から見た場合、RAMDiskはtmpfsですが、カーネル自体による使用のみを目的としているため、通常のユーザーがデータやドキュメントなどを格納することはできません。

編集する

以下の@nilのコメントに注意して、はいをマウントできますが、それにはコストがかかり、tmpfsgetsに割り当てられたリソースは半分になり、残っているRAMの残りの半分を使い果たします。現実的に言えば、デバイス上で実行されているAndroidの観点から見ると、これは理想的な道ではありません。

それはここ/sdcardに、入って来ストア私は再びあなたができるという事実を省略し、なぜそれゆえ、その理由だけユーザーデータ/文書、なぜ

  • エンドユーザーがデータを適切な場所に保存するのを忘れた場合はどうなりますか?これは再起動時に失われるためです!

つまり、簡単に言えば、はい、できます。mount -t tmpfs
Nils

@ニルス私はイエスと言わなかった!これは、カーネルが起動し、ramfs(ベアボーンのinitスクリプトを含む)を読み取ったmount -t tmpfs 後に実行された時点から行われ、それがマウントされると、システムの残りの部分がAndroid環境であるポストブートのように起動します。また、後で実行することで、たとえばadb shell、メモリとリソースが限られているスマートフォンの場合は特に、システムリソースを削減できます。
t0mm13b 2013

1
いいえ、tmpfsをマウントしてもRAMは使用されません。ファイルをそこに入れると使用が始まります-少なくともこれは私のLinuxサーバーが行うことです。AndroidはLinux上で動作します...
Nils

@Nils非常に間違った印象。AndroidはLinuxでは動作しません!カーネルはlinuxですが、ユーザーランドスペースは、本格的なデスクトップ版のようにbashなどではありません。それは、バイオニックランタイムライブラリを使用します。glibcとdalvik / zygoteはありません
t0mm13b 2013

tmpfsはカーネルであり、ユーザー空間ではありません。ブート時にinitrdをマウントするために必要なため、これはカーネルモジュールでもないようです。
Nils
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.