正しい権限で(ルートを使用して)ext4フォーマットのSDカードをマウントするにはどうすればよいですか?


9

ここでは、ext4フォーマットのSDカードの作成についていくつか言及されていますが、ガイドはありません。この密接に関連する質問はそれを行う方法がないことを示唆していますが、私の質問は私の電話が特に根付いているという点で異なります。

カードをext4(GUIDパーティションテーブル)としてフォーマットしました。私のCyanogenmod電話がそれをマウントしました/mnt/fuse/sdcard1。次のスクリプトを作成して、ここで指示に従ってカードをマウントし/storage/sdcard1ました。/data/local/userinit.sh

#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
  mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &

再起動してファイルをコピーし(ESファイルエクスプローラーを使用)、親ディレクトリに貼り付けようとしましたが、失敗しました。

/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).

実際にファイルを再生できるので、開くことができます。FWIW、元のマウントポイント(/mnt/fuse/sdcard1)からコピーしようとすると、少し異なるエラーが発生します。

Failed to copy the file bar.mp3

Samsung Galaxy S3とCyanogenmod 10.2.0-i9300を使用しています。

==編集==

su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw   2014-03-04 22:08 sdcard1

それだけでした。sdcard1_realこのディレクトリにはないので、スクリプトが失敗していると思いますか?

==編集2 ==

トラブルシューティングのためにスクリプトを変更してみました。スクリプトは正常に開始されますmkdir "$REALMNT"が、エラーで失敗します/data/local/userinit.sh[6]: : not found

==編集3 ==

スクリプトが機能しないことはわかっているので、修正することで問題が解決する可能性がありますが、次の点は興味深いと思いました。LinuxコンピューターでSDカードをフォーマットし、いくつかのファイルを転送しました。奇妙なことに、権限エラーは私が作成したサブディレクトリでのみ発生します。パーティションのルート(を介して/storage/sdcard1)には、すでに書き込み権限があります。


1
ルートとして、とを実行ls -l /mnt/fuse/してくださいls -l /mnt/fuse/sdcard1_real。次に、質問を編集して結果を含めます。私の推測では、「ファイルのアクセス権が間違っています」-マウントまたはfoo/カード上のディレクトリのどちらかです。ext4は、* nixファイルの権限を含め、完全にサポートしていることを忘れないでください。ユーザーとグループ。
イジー

su端末を入力してルートを取得します。初めて許可する場合は、電話で許可の付与を確認する必要がある場合があります。
Chahk

スクリプトが失敗しているか、まったく実行されていません。たとえばecho Script executed > /mnt/fuse/sdcard1/test.log、デバッグ出力を追加して、それが実行されているかどうかを確認することができます。その場合は、前から最後の行mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logを作成し、エラーメッセージを確認してください。または、スクリプトを手動で実行して以下を確認しますsu /data/local/userinit.sh
イジー

@Izzy touchは、スクリプトが実行中であることを示しています。で手動でスクリプトを実行しようとしましたsu /data/local/userinit.shが、失敗しました。私も試しましたsu echo fooが、同様のエラーが発生しました:Unknown id: echo
スパーホーク2014年

EDIT3については、私の最初のコメントを参照してください。ext4は、完全な* nixファイル権限をサポートします。ユーザーとグループ。Androidデバイスに存在しないユーザーを使用してこれらのディレクトリを作成したため、「不明なユーザー/不明なグループ」に属しています。「world」への書き込みアクセスを許可しなかった場合、そこに書き込むことができるのはrootだけです。ポータブルメディアでこのようなファイルシステムを使用するときは、* nixの基本をよく理解しておく必要があります;)スクリプトについては、デバッグ情報を追加することをお勧めします。たとえば、echo各コマンドを実行する前に出力して、エラー出力をリダイレクトする2>>
イジー

回答:


6

これはおそらく数か月前に修正されたと思われますが、人々はまだ問題を報告しています。カードのアイテムを読み取ることはできますが、書き込み権限がありません。それを修正するために、いくつかの ソースからの戦略を組み合わせました。

  1. MS-DOSパーティションテーブルとext4ファイルシステムを含むパーティションカード。(Linux)デスクトップコンピューターでGPartedを使用しました。
  2. カードを携帯電話に挿入します。(おそらく、今は書き込みアクセス権はありません。)
  3. Cyanogenmodにデフォルトでインストールされているターミナルエミュレータを開きます。
  4. 次のように入力します(テキストの大きなブロックにはWiFiキーボードをお勧めします)。エミュレータが要求したときに、ルート権限を与えます。

$そして#そうでそれらを入力しない、プロンプトを示しています。

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

これにより、SDカードの権限が変更されます。所有者とグループがからsystemに変わりmedia_rw、グループに書き込みアクセス権も付与されます。


recursif chown -R media_rw:media_rw / mnt / media_rw / sdcard1
m3asmi

1

それが何か助けになるかどうかはわかりませんが、おそらく問題は、間違った場所にマウントしようとしていることですか?これは、CM11を搭載したS3 miniで動作する私の作業スクリプトです。

#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 

REALMNTの場所はすでに存在しているため、もちろんmkdirが呼び出されることはありません。そして、media_rw / sdcard1はすでにmedia_rwが所有しています

/etc/permissions/platform.xmlを更新して、以下を含める必要もあります <group id="media_rw"/><permission name="android.permission.WRITE_EXTERNAL_STORAGE">


ありがとう。スクリプトのバッテリー使用量も多かったため、これはやや諦めました。トランクに固定されているので、これ以上の回避策は必要ありません。ありがとう、そして+1。
スパーホーク2014年

@Sparhawk:使用しているCYMバージョンがわからないが、SDカードが自動的にマウントされない。
Luis A. Florit 14

@ LuisA.Florit この回答に返信するつもりかどうかはわかりません。とにかく、私は11-20140804-SNAPSHOT-M9-i9300を使用しています。詳細は別の回答で投稿しました。
スパーホーク2014

@Sparhawk:カードがマウントされておらず、設定のマウント手順が失敗します。たぶんproblmeはここに私の質問に関連している(suマウントに失敗し): android.stackexchange.com/questions/82089/...。私はcm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip使う`
ルイス・A. Florit

@ LuisA.Floritわかりません。おそらく新しい質問をしますか?
スパーホーク2014

0

adasdadasdが投稿した回答を受け入れたいと回答しましたが、その後削除されました。以下で再現して私の回答を受け入れますが、adasdadasdが再表示された場合は、再投稿してください。これを削除して、あなたの回答を受け入れます。

https://jira.cyanogenmod.org/browse/CYAN-332

https://github.com/CyanogenMod/android_packages_providers_MediaProvider/commit/faf3f77b9222554227740aed8127714ea9e3f407

デフォルトで修正されましたか?githubの新しい変更。

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