Làm cách nào tôi có thể gắn thẻ SD có định dạng ext4 với quyền chính xác (có quyền root)?


9

Tôi thấy một số đề cập ở đây về việc tạo thẻ SD có định dạng ext4, nhưng không có hướng dẫn. Câu hỏi liên quan chặt chẽ này cho thấy không có cách nào để làm điều đó, nhưng câu hỏi của tôi khác ở chỗ điện thoại của tôi được bắt nguồn cụ thể.

Tôi định dạng thẻ của mình là ext4 (bảng phân vùng GUID); điện thoại Cyanogenmod của tôi gắn nó tại /mnt/fuse/sdcard1. Tôi đã làm theo hướng dẫn ở đây để gắn thẻ tại /storage/sdcard1, bằng cách tạo tập lệnh sau tại/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 &

Tôi đã khởi động lại và cố gắng sao chép một tệp (sử dụng ES File Explorer) và dán nó vào thư mục mẹ của nó, nhưng không thành công:

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

Tôi thực sự có thể chơi các tập tin tốt, vì vậy tôi có thể mở nó. FWIW, khi tôi thử sao chép từ điểm gắn kết ban đầu ( /mnt/fuse/sdcard1), tôi gặp một lỗi hơi khác:

Failed to copy the file bar.mp3

Tôi đang sử dụng Samsung Galaxy S3 với Cyanogenmod 10.2.0-i9300.

== CHỈNH SỬA ==

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

Đó là tất cả. Không có sdcard1_realtrong thư mục này, vì vậy tôi cho rằng kịch bản bị lỗi?

== EDIT2 ==

Tôi đã cố gắng sửa đổi tập lệnh để khắc phục sự cố. Kịch bản bắt đầu tốt, nhưng sau đó không thành công mkdir "$REALMNT"với lỗi /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Tôi biết rằng kịch bản không hoạt động, vì vậy việc sửa nó có thể giải quyết câu hỏi của tôi, nhưng tôi nghĩ những điều sau đây thật thú vị. Tôi định dạng thẻ SD của mình trong máy tính Linux và chuyển một số tệp vào nó. Thật kỳ lạ, lỗi cấp phép chỉ xảy ra trong các thư mục con mà tôi đã tạo. Trong thư mục gốc của phân vùng (thông qua /storage/sdcard1), tôi đã có quyền ghi.


1
Là root, xin vui lòng thực thi ls -l /mnt/fuse/ls -l /mnt/fuse/sdcard1_real. Sau đó chỉnh sửa câu hỏi của bạn để bao gồm các kết quả. Tôi đoán là "quyền truy cập tập tin sai" - cho gắn kết hoặc cho foo/thư mục trên thẻ. Hãy nhớ rằng, ext4 hỗ trợ quyền truy cập tệp * nix đầy đủ, bao gồm. người dùng và các nhóm.
Izzy

Bạn gõ suvào terminal để lấy root. Bạn có thể cần xác nhận cấp quyền trên điện thoại, nếu bạn thực hiện lần đầu tiên.
Chahk

Kịch bản bị lỗi hoặc hoàn toàn không được thực thi. Bạn có thể muốn thêm một số đầu ra gỡ lỗi, ví dụ echo Script executed > /mnt/fuse/sdcard1/test.log, và kiểm tra xem nó có đang chạy không. Nếu vậy, hãy tạo dòng từ trước đến cuối mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logvà kiểm tra thông báo lỗi. Hoặc thực thi tập lệnh bằng tay để xem : su /data/local/userinit.sh.
Izzy

@Izzy touchcho thấy tập lệnh đang chạy. Tôi đã thử thực hiện kịch bản thủ công với su /data/local/userinit.sh, nhưng điều này không thành công. Tôi cũng đã thử su echo foovà nhận được một lỗi tương tự : Unknown id: echo.
Sparhawk

Đối với EDIT3 của bạn, hãy xem nhận xét đầu tiên của tôi: ext4 hỗ trợ quyền truy cập tệp * nix đầy đủ, bao gồm. người dùng và các nhóm . Bạn đã tạo các thư mục đó với một người dùng không tồn tại trên thiết bị Android của bạn, vì vậy chúng thuộc về "nhóm người dùng / nhóm không xác định". Nếu bạn không cấp quyền truy cập ghi vào "thế giới", chỉ root mới có thể viết ở đó. Bạn nên làm quen với những điều cơ bản * nix đó khi sử dụng hệ thống tệp như vậy trên phương tiện di động;) Đối với tập lệnh, tôi lại đề nghị thêm một số thông tin gỡ lỗi, ví dụ: sử dụng echođể xuất từng lệnh trước khi thực thi và chuyển hướng đầu ra lỗi với 2>>.
Izzy

Câu trả lời:


6

Điều này được cho là đã được sửa chữa vài tháng trước, nhưng mọi người vẫn báo cáo vấn đề. Tôi có thể đọc các mục trên thẻ, nhưng không có quyền viết. Để khắc phục, tôi đã kết hợp các chiến lược từ một vài nguồn .

  1. Thẻ phân vùng với bảng phân vùng MS-DOS và hệ thống tập tin ext4. Tôi đã sử dụng GParted trên máy tính để bàn (Linux).
  2. Chèn thẻ vào điện thoại của bạn. (Bạn có thể sẽ không có quyền ghi ngay bây giờ.)
  3. Mở trình giả lập thiết bị đầu cuối , được cài đặt theo mặc định trong Cyanogenmod.
  4. Nhập vào phần sau (Tôi khuyên dùng Bàn phím WiFi cho các khối văn bản lớn). Cung cấp cho các đặc quyền gốc giả lập khi nó yêu cầu chúng.

Các dấu nhắc $#chỉ ra, vì vậy đừng gõ chúng vào.

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

Điều này thay đổi quyền của thẻ SD. Chủ sở hữu và nhóm thay đổi từ systemsang media_rw, và nó cũng cung cấp cho nhóm quyền truy cập ghi.


cần -R cho recursif chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi

1

Không chắc chắn nếu nó là bất kỳ trợ giúp, nhưng có thể vấn đề là bạn đang cố gắn sai vị trí? Đây là kịch bản làm việc của tôi hoạt động trên S3 mini với CM11:

#!/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 

Vị trí REALMNT đã tồn tại, vì vậy tất nhiên mkdir không bao giờ được gọi. Và media_rw / sdcard1 đã được sở hữu bởi media_rw

Tôi cũng đã phải cập nhật / etc / permissions / pl platform.xml để bao gồm: <group id="media_rw"/> in: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">


Cảm ơn. Tôi đã phần nào từ bỏ việc này, vì tôi cũng sử dụng pin cao với kịch bản của mình. Vì nó được cố định trong thân cây, tôi sẽ không bận tâm đến cách giải quyết nữa. Cảm ơn, và +1.
Sparhawk

@Sparhawk: Không chắc chắn bạn sử dụng phiên bản CYM nào, nhưng thẻ SD của tôi không được gắn tự động.
Luis A. Florit

@ LuisA.Florit Tôi không chắc bạn có ý trả lời câu trả lời này không . Dù sao, tôi đang sử dụng 11-20140804-SNAPSHOT-M9-i9300. Tôi đã đăng thêm thông tin trong một câu trả lời khác .
Sparhawk

@Sparhawk: Thẻ của tôi thậm chí không được gắn kết và quy trình gắn kết trong Cài đặt không thành công. Có lẽ câu hỏi có liên quan đến câu hỏi của tôi ở đây ( sukhông thể cài đặt ): android.stackexchange.com/questions/82089/iêu `Tôi sử dụng cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit

@ LuisA.Florit Không thực sự chắc chắn. Có lẽ hỏi một câu hỏi mới?
Sparhawk

0

Có một câu trả lời được đăng lên bởi adasdadasd mà tôi muốn chấp nhận, nhưng đã bị xóa. Tôi sẽ sao chép nó bên dưới và chấp nhận câu trả lời của tôi, nhưng nếu adasdadasd xuất hiện trở lại, vui lòng đăng lại và tôi sẽ xóa cái này và chấp nhận câu trả lời của bạn.

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

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

Đã sửa lỗi mặc định? Thay đổi mới trong github.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.