I have tried to understand: https://topjohnwu.github.io/Magisk/details.html#magic-mount and I thought that what I did in the following section did what I think it should do. I hope that someone help me to find the right way of doing what I want to do. I can find my way around in a Linux system, but I am not a developer, so please bear with me.
Given OnePlus 5 Stock OxygenOS android 10 with up to date magisk and MagiskManager
https://topjohnwu.github.io/Magisk/details.html describes what I believe is a way to replace files in / with an overlay in tmpfs. Browsing through the root files system and checking mount points, I came across this:
Code:
1|OnePlus5:/ # mount|grep system_root
/sbin/.magisk/block/system_root on /sbin/.magisk/mirror/system_root type ext4 (ro,seclabel,relatime,discard)
/sbin/.magisk/block/system_root on /sbin/charger_log type ext4 (ro,seclabel,relatime,discard)
OnePlus5:/ #
The file in question is /etc/media_profiles.xml that defines media stuff such as audio bitrate in video recording. The good people at OnePlus think that 96000 Bps is acceptable - I do not, so I want to change that specific value. An app like cinema 4k allows you to change the value in the UI, but an actual recording is stuck at 96000Bps. So, my thinking was:
Code:
OnePlus5:/ # mount -o rw,remount /sbin/.magisk/mirror/system_root
That seemed to work, so I edited the file in question and replaced all occurrences of 96000 with 320000
Code:
File /sbin/.magisk/mirror/system_root/system/etc/media_profiles.xml saved
OnePlus5:/ # mount -o ro,remount /sbin/.magisk/mirror/system_root
mount: '/sbin/.magisk/block/system_root'->'/sbin/.magisk/mirror/system_root': I/O error
1|OnePlus5:/ # mount -o ro,remount /sbin/.magisk/mirror/system_root
OnePlus5:/ # grep 96000 /sbin/.magisk/mirror/system_root/system/etc/media_profiles.xml
As you can see, trying to remount the partition in ro mode resulted in an I/O error, repeating the command did not.
After a reboot, this is what happens:
Code:
OnePlus5:/ $ su
OnePlus5:/ # grep 96000 /sbin/.magisk/mirror/system_root/system/etc/media_profiles.xml
bitRate="96000"
bitRate="96000"
bitRate="96000"
minBitRate="8000" maxBitRate="96000"
OnePlus5:/ #
I have read https://forum.xda-developers.com/showthread.php?t=4048483 but didn't really find the answer helpful, because I am not a developer, so this is way over my head. I am actually willing to pay someone to create a "replace file module" that does what I have described, i.e. replace an existing file in /etc with a modified version.
It looks to me like you're making things much more complicated than they need to be.
If so you want to do is to edit that file you can make a simple Magisk module that replaces the original file with one you have edited to your liking. Magisk modules details:
https://topjohnwu.github.io/Magisk/guides.html
Simply put, you'll need a module.prop file with the details of your module and then your edited xml file in the /system directory of your module ($MODPATH/system/etc/media_profiles.xml). After a reboot the xml should be replaced with your file.
You don't even need to create a zip, just a directory for your module directly under /data/adb/modules with the above described files.
Didgeridoohan said:
It looks to me like you're making things much more complicated than they need to be.
[...]
Simply put, you'll need a module.prop file with the details of your module and then your edited xml file in the /system directory of your module ($MODPATH/system/etc/media_profiles.xml). After a reboot the xml should be replaced with your file.
You don't even need to create a zip, just a directory for your module directly under /data/adb/modules with the above described files.
Click to expand...
Click to collapse
Thanks a lot, man! That was exactly the missing hint I needed. So I actually created a module (yay!) by creating the respective directories and putting the modified media_profiles.xml there. After a reboot the module actually turned up in MagiskManager (yay!) and indeed, the modified file is seen as a regular file under /etc.
Caveat: Seems like OnePlus doesn't care and keeps its hardcoded audio bitrate in a different file under /vendor/etc/media_profiles.xml and adding /data/adb/modules/media_profiles-new/vendor/media_profiles.xml resulted in no change.
Do it mean that different from /system on a OnePlus 5 /vendor cannot be handled in the same way? Because I am still stuck at 96kBps audio... Neede to put /vendor under /system directory.
It works! Finally got 320kBps Audio. Will soon post a Video with some of my piano playing that finally doesn't sound like crap.
You have helped me a lot in understanding something fundamental, so thanks a lot!
Related
Found the solution, it's in the fifth post
Hey, first of all I'm Linux and Android newbie, so sorry if my question reveals it a bit
As my Internal Storage a.k.a. /mnt/sdcard is getting full and I hate to be reminded of it by notification I can't get rid of, I decided to put some effort into moving the largest files to the SD card. I have a 64GB SD an there still are several free gigs So after some googling I found out a way to link it. It works like this:
Code:
mount -o bind /origdir /newdir
where both /origdir and /newdir must exist, in my case as an example:
Code:
mount -o bind /mnt/sdcard-ext/sd/DictionariesNGHS /mnt/sdcard/DictionariesNGHS
where /mnt/sdcard-ext/sd/DictionariesNGHS is the data containing folder and /mnt/sdcard/sd/DictionariesNGHS is an empty folder for linking. It works like a charm, tried with several applications including some off-line navigations. The downside is that such links are forgotten after a reboot.
I didn't find out how to automatize that. I tried putting the line from second code to the end of /system/etc/init.goldfish.sh (I run Eclipse ICS 1.2) and it didn't get linked after a reboot (but works OK after mounting manually in terminal) - I suspect it runs before sdcard-ext is mounted. Any thoughts on how to make it run after reboot? Or maybe of an app that does this for me?
EDIT:
Put my links into /data/data/init.sh
Tried several not working apps:
ScriptMe by gilsken says Script run mount: No such file or directory
Script Manager - SManager by devworm says
Code:
exec sh '/data/data/init.sh'
[email protected]_maserati:/ # exec sh '/data/data/init.sh'
mount: No such file or directory
while interestingly when I write it by myself in its built-in console it works...
App that works: Tasker by Crafty Apps
I can have scripts run on boot and it works, but I can add only one line at time (or at least it's the only option I found) which is still kinda inconvenient plus it runs all the time consuming system resources. I'd like some less robust solution, preferably executed after boot and exiting after mounts proceed. Any ideas?
EDIT 2:
My "workaround" in Tasker: Profiles -> New -> Event -> System -> Device Boot -> OK -> New Task -> OK -> + -> Script -> Run Shell -> Command: /data/data/init.sh -> OK
Surprisingly enough it doesn't even need root permission...
In init.sh I have several lines with different mounts, it all works well. I'm still looking for less robust solution than Tasker is, or maybe a way to kill it after the init.sh is processed?
hey
can you please post the content of youre
Code:
/data/data/init.sh
---------- Post added at 04:35 PM ---------- Previous post was at 03:50 PM ----------
youre problem is, at the runtime form the mount command, the mount is not in youre path.
can you add to you script the command
Code:
env
and post the output?
I tried it with a file containing only this line:
Code:
mount -o bind /mnt/sdcard-ext/sd/DictionariesNGHS /mnt/sdcard/DictionariesNGHS
OK, after running it by SManager it looks like giving errors, but the folder gets mounted.
Also it seems apps get access to /mnt/sdcard faster after reboot then to /data/data (I wonder why...?) so I moved the script there.
Here you have the output with env at the end of init.sh, run by SManager as root (mounted OK):
Code:
exec sh '/mnt/sdcard/init.sh'
[email protected]_maserati:/ # exec sh '/mnt/sdcard/init.sh'
mount: No such file or directory
_=/system/xbin/env
ANDROID_BOOTLOGO=1
ANDROID_PROPERTY_WORKSPACE=8,69632
LOOP_MOUNTPOINT=/mnt/obb
SM_API=15
RANDOM=26725
ANDROID_ASSETS=/system/app
USER=root
EXTERNAL_STORAGE=/mnt/sdcard
ANDROID_DATA=/data
PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
SM_LAUNCHER=MANUAL
TERM=vt100
PS1=$(precmd)[email protected]$HOSTNAME:${PWD:-?} #
SM_VERSION=2.5.3.1
SM_GUIFD=3
LD_LIBRARY_PATH=/vendor/lib:/system/lib
SECONDARY_STORAGE=/mnt/sdcard-ext
SM_ALIAS=init.sh
ASEC_MOUNTPOINT=/mnt/asec
SM_HOME=/mnt/sdcard
HOSTNAME=cdma_maserati
HOME=/
SM_VERSIONCODE=77
BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework-ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar:/system/framework/com.motorola.android.frameworks.jar:/system/framework/com.motorola.android.widget.jar:/system/framework/com.motorola.frameworks.core.addon.jar:/system/framework/kafdex.jar:/system/framework/com.motorola.orange.simauth.jar
ANDROID_ROOT=/system
SHELL=/system/bin/sh
MKSH=/system/bin/sh
ANDROID_SOCKET_zygote=9
So it works after all with the SManager as I intended, I just don't understand why it gives that error when everything actually is OK...
Any ideas on how to make it run automatically after every mount of sdcard-ext instead of on reboot? Because when I connect it to the computer as Mass Storage, the directory mounts disappear and I have to run the script manually...
LuH said:
I tried it with a file containing only this line:
Code:
mount -o bind /mnt/sdcard-ext/sd/DictionariesNGHS /mnt/sdcard/DictionariesNGHS
...
Any ideas on how to make it run automatically after every mount of sdcard-ext instead of on reboot? Because when I connect it to the computer as Mass Storage, the directory mounts disappear and I have to run the script manually...
Click to expand...
Click to collapse
for the first, replace the mount with this:
Code:
/system/bin/mount -o bind /mnt/sdcard-ext/sd/DictionariesNGHS /mnt/sdcard/DictionariesNGHS
Found out that the "mount: No such file or directory" error was due to typo in folder path
So to wrap it up:
You need to be rooted first.
Create your init.sh script file, works fine when put to /mnt/sdcard/
Example file (also attached so you have a sample in UNIX formatting - don't open with Notepad under Windows, better edit it in your phone):
Code:
# mount -o bind /sourcedir /fakedir - both sourcedir and fakedir MUST exist!
mount -o bind /mnt/sdcard-ext/sd/DictionariesNGHS /mnt/sdcard/DictionariesNGHS
mount -o bind /mnt/sdcard-ext/sd/Android/obb /mnt/sdcard/Android/obb
Note: you should use a UNIX formatting of the file, not Windows (I'm not sure if it's necessary though).
As hinted in the beginning note, sourcedir and fakedir must exist and after successful mount the fakedir folder will appear to have the contents of the sourcedir folder. Any fakedir's contents are ignored ("disappear") after mount and reappear only after it gets unmounted.
It gets automatically unmounted after unmounting of either fakedir's or sourcedir's media (typically when connecting phone to a computer as mass storage) and I haven't found any workaround for running the script after remounting of media... Any suggestions?
Install SManager (free version here).
In SManager navigate to your script file, tap it and select Script/Executable and tap Su and Boot icons (see attached screenshot).
Done, your folders get mounted on reboot
Hi folks,
On my way trying to get 10 usefull posts to access the developers forums, I have writen this easy tutorial. xD
THIS IS FOR S5830i DEVICES. init.rc used belongs to S5830i ramdisk
Whats all about? Well, in this tutorial I will so you how to get root access directly from Kernel only modifing init.rc and adding su to tmp folder.
THIS IS NOT UNSECURING THE BOOT.IMG TUTORIAL
Question: Axyllum why are you posting this, if there are so many tutorials on how to do this for other devices?
Answer: Simple, as you all ready imagine, partition for boot.img is just 5MB Oh my god.
Then, if my boot image is all ready 4.28MB, how can I use a busybox thats 836KB (I compiled a busybox with mount, cp, mkdir, chmod and chown that is the minimum to get root: image = 836MB). Cant use this beacuse I exceed total mounting point size.
Kernel + ramdisk = 4.28MB if you pull stock boot.img from your device.
Minimum busybox explained before = 836KB
SU image 25KB to 86KB depending on the su image you use.
This makes a total of: 5.2MB. Try to flash it. It fails? Yes, you exceeded the mounting point size.
And the solution? Follow my tutorial.
Abilites you will need to follow the turotrial:
Know how to: Un pack & repack boot.img
Know how to: Decompress Ramdisk and compress it back. (to get the famous newramdisk in many many tutorials) newramdisk is just a name, you can compress back to any name, for example axyllumramdisk or yourramdisk or how ever you want to call it.
Asuming you know how to do the explained above and after my wierd chat, lets gooooo:
1. Open init.rc in your favourite text editor.
2. Go to this line in init.rc:
mount rfs /dev/stl9 /system check=no
You should see this:
mount rfs /dev/stl9 /system check=no
mount rfs /dev/stl9 /system ro remount
Got it? lets go to step 3.
3. Overwrite both lines with this:
mount rfs /dev/stl9 /system check=no
mkdir /system/xbin
copy /tmp/su /system/xbin/su
chown root root /system/xbin/su
chmod 06755 /system/xbin/su
mount rfs /dev/stl9 /system ro remount
Make sure you are not overwriting other lines or your ramdisk could not work.
4. Paste SU image file to tmp folder. Make sure SU image has execute permissions.
5. Compress back ramdisk (the famous newramdisk).
6. Repack boot.img
7. Flash it.
8. Restart device.
9. Download superuser.apk and busybox form market and.... there you go you made your kernel with root access and no need of a busybox.
Ok, this was simple, but i imagine more than one will like to know what we did.
I'll explain:
As we cant add a busybox, how the hell am i going to mount system rw, mkdir xbin, cp su from tmp to xbin, chmod / chown permissions?
I started reading the init.rc file (i was bored and my wife wanted to go shopping --> no way i have an init.rc file to mess up with), and I saw many mkdir, copy, chmod etc... commands. (Opened a beer)
So i thought, great, there is all ready a busybox with the least i need to make this. Then why dont i use this preinstalled commands?
And i did this:
mount rfs /dev/stl9 /system check=no --> first I checked this, this instruction is where init.rc mounts system. At this point system is mounted RW.
mkdir /system/xbin --> Then as system is rw, I will create xbin folder. how? with mkdir comand.
copy /tmp/su /system/xbin/su --> Great I did not find a cp command, but found a "copy" command someware in init.rc. Search for it, you will see its used. Then why dont I use it to copy SU in tmp folder to the just created xbin folder? It worked.
chown root root /system/xbin/su --> Owner of su in xbin is: yes, root.
chmod 06755 /system/xbin/su --> Set the right permission to su. You need to chmod with 06755. --> 09364, 66666, 83823 will not work looooolll just a joke i imagine you all ready know what setting permissions is all about.
mount rfs /dev/stl9 /system ro remount --> Remount system with ro (this is the read only remount command).
I dont know if there are any other tutorials doing this, this way, i just did it my self. I Found tutorials on doing the same, but busybox, and .sh script and su were needed. To much for our small boot.img partition.
Enjoy.
Tip, dont mess your init.rc if you do not understand it.
Hi,
It's nice you do not have to mod .prop files with Magisk module's system.prop .
But how do you mod .xml files ?
I'm struggling here...
Here is the bash I'd like to run, but it will need RW rights on /cust and /product
Code:
cp /cust/hw/eu/xml/hw_defaults.xml /cust/hw/eu/xml/hw_defaults.xml.BACKUP && cp /product/etc/xml/hw_launcher_default_config.xml /product/etc/xml/hw_launcher_default_config.xml.BACKUP && sed -ie 's/<integer settings.global.hw_4g_show="0" reset="true"/<integer settings.global.hw_4g_show="1" reset="true"/g; s/<string app_name_two_lines="false"/<string app_name_two_lines="true"/g; s/<string hw_add_4g_only="250"/<string hw_add_4g_only="208"/g; s/<string hw_data_roam_option="26006,27211"/<string hw_data_roam_option="ALL"/g' /cust/hw/eu/xml/hw_defaults.xml && sed -ie 's/<item name="config_desktopCellsOptionItems" reset="true">4x5,4x4,5x4,5x5</<item name="config_desktopCellsOptionItems" reset="true">4x6,4x5,4x4,5x4,5x5,5x6</g; s/<item name="config_IconTitleSize">12</<item name="config_IconTitleSize">9</g' /product/etc/xml/hw_launcher_default_config.xml
Any idea where to put this code into my magisk module ?
How should I'll be able to replace, via terminal cmds, files on /product & /cust (oreo huawei device)
oslo83 said:
Hi,
It's nice you do not have to mod .prop files with Magisk module's system.prop .
But how do you mod .xml files ?
I'm struggling here...
Here is the bash I'd like to run, but it will need RW rights on /cust and /product
Code:
cp /cust/hw/eu/xml/hw_defaults.xml /cust/hw/eu/xml/hw_defaults.xml.BACKUP && cp /product/etc/xml/hw_launcher_default_config.xml /product/etc/xml/hw_launcher_default_config.xml.BACKUP && sed -ie 's/<integer settings.global.hw_4g_show="0" reset="true"/<integer settings.global.hw_4g_show="1" reset="true"/g; s/<string app_name_two_lines="false"/<string app_name_two_lines="true"/g; s/<string hw_add_4g_only="250"/<string hw_add_4g_only="208"/g; s/<string hw_data_roam_option="26006,27211"/<string hw_data_roam_option="ALL"/g' /cust/hw/eu/xml/hw_defaults.xml && sed -ie 's/<item name="config_desktopCellsOptionItems" reset="true">4x5,4x4,5x4,5x5</<item name="config_desktopCellsOptionItems" reset="true">4x6,4x5,4x4,5x4,5x5,5x6</g; s/<item name="config_IconTitleSize">12</<item name="config_IconTitleSize">9</g' /product/etc/xml/hw_launcher_default_config.xml
Any idea where to put this code into my magisk module ?
How should I'll be able to replace, via terminal cmds, files on /product & /cust (oreo huawei device)
Click to expand...
Click to collapse
Hello,
If you are already aware that these modifications will be in the actual filesystems and not masked by Magisk, you can put that code into config.sh as a function and call that from update-binary.
Regards.
Thanks
JayminSuthar said:
If you are already aware that these modifications will be in the actual filesystems and not masked by Magisk
Click to expand...
Click to collapse
I am aware it will mod the actual files but i'm not sure how with magiskmodule I could mod some files AND THEN straighly use them to mask the originals.
JayminSuthar said:
, you can put that code into config.sh as a function and call that from update-binary.
Click to expand...
Click to collapse
You kind of lost me
I previously tried with post-fs-data.sh but i think my problem is i can't mod these file but i can make temporary copies somewhere (need to find where) then erase originals and then move temporary copies where originals where.
Instead of just should use something like:
Code:
sed -e 's/. /. /g' originalfile > /tmp/file.bak
rm originalfile
mv /tmp/file.bak originalfile
If I understand you correctly, /cust and /product are directly in the root of your device, not in /system? In that case you can't use Magisk to Magic Mount the files. That can only be done to /system or /vendor.
You should be able to edit the files in place though, you'll just have to mount the partitions as rw (and then back to ro when you're done). Something like this (but check the command syntax first, I don't know it fully from memory):
Code:
mount -o rw,remount /cust
<Do your thing here>
mount -o ro,remount /cust
Didgeridoohan said:
If I understand you correctly, /cust and /product are directly in the root of your device, not in /system? In that case you can't use Magisk to Magic Mount the files. That can only be done to /system or /vendor.
You should be able to edit the files in place though, you'll just have to mount the partitions as rw (and then back to ro when you're done). Something like this (but check the command syntax first, I don't know it fully from memory):
Code:
mount -o rw,remount /cust
<Do your thing here>
mount -o ro,remount /cust
Click to expand...
Click to collapse
You caught it up, I forgot about the rootfs being ro
I'll try and report.
It worked, thank you very much.
Now I'm facing some problem to make a module submission...
Code:
Bad Request:*https://github.com/oslo83/EMUI_Tap2wake*is not a valid Magisk Module!
Reason:*module.prop*does not exist on*masterbranch
....
How to make files in /system writable
In Android 12 and newer /system is mounted read-only can not be remounted read-write anymore.
Sometimes it's useful that one or more files in /system are writable (for example for develop tasks or for testing)
This can be implemented using Magisk (see How to change files in the directory /system for more details)
Example :
Make the file /system/etc/vimrc writable
Note:
In Android 12 /etc is a symbolic link to /system/etc.
Open a (adb) shell as user root and do
Bash:
# create a dummy Magisk module
#
mkdir -p /data/adb/modules/writable_system/system/etc
# copy the file that should be writable to the Magisk module directory
#
cp /system/etc/vimrc /data/adb/modules/writable_system/system/etc/
# make the file in the Magisk module directory writable
#
chmod +w /data/adb/modules/writable_system/system/etc/vimrc
Now reboot the phone.
After the reboot the file /system/etc/vimrc is writable by the user root, Example:
Code:
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # ls -l /system/etc/vimrc
-rw-r--r-- 0 root root 3350 2022-11-04 11:36 /system/etc/vimrc
ASUS_I006D:/ # tail -2 /system/etc/vimrc
\ | wincmd p | diffthis
endif
ASUS_I006D:/ #
ASUS_I006D:/ # echo '" Test Comment' >>/system/etc/vimrc
ASUS_I006D:/ #
ASUS_I006D:/ # tail -2 /system/etc/vimrc
endif
" Test Comment
ASUS_I006D:/ #
Only the user root can access the directory /data/adb. Therefor the files configured using this approach are only writable by the user root.
To make a file in /system writable for non-root users use this method:
Open a (adb) shell and execute as user shell:
Bash:
#
# create a directory that is writable for the user shell
#
mkdir /data/local/tmp/writable_system
mkdir /data/local/tmp/writable_system/etc
#
# copy the file that should be writable to that directory
#
cp /system/etc/vimrc /data/local/tmp/writable_system/etc
The next commands must be executed as user root:
Bash:
# create dummy Magisk module
#
mkdir -p /data/adb/modules/writable_system/system/etc
#
# create a symbolic link to the file in the writable directory in the directory with the dummy Magisk module
#
ln -s /data/local/tmp/writable_system/etc/vimrc /data/adb/modules/writable_system/system/etc
Now reboot the phone.
After the reboot the file /system/etc/vimrc is writable by the user shell, Example:
Code:
ASUS_I006D:/ $ id
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:shell:s0
ASUS_I006D:/ $
ASUS_I006D:/ $ tail -2 /system/etc/vimrc
\ | wincmd p | diffthis
endif
ASUS_I006D:/ $
ASUS_I006D:/ $ echo '" Test Comment' >>/system/etc/vimrc
ASUS_I006D:/ $
ASUS_I006D:/ $ tail -2 /system/etc/vimrc
endif
" Test Comment
ASUS_I006D:/ $
Important:
The writable directory can also be in a sub directory in /sdcard. But be aware that /sdcard is mounted late in the boot process so it might be that the overwritten file in /system will be used by the OS when the bind mount points to a non-existent file if using a sub directory in /sdcard.
The changes to the file done using these methods are "persistent" as long as Magisk is installed in the boot partition.
To restore the file with the original contents after each new reboot of the phone without removing the writable config open a (adb) shell as user root and execute:
Bash:
#
# restore the file /data/adb/modules/writable_system/system/etc/vimrc from the original file /system/etc/vimrc
#
# this must be done before Magisk creates the bind mounts
#
echo "cp /system/etc/vimrc /data/adb/modules/writable_system/system/etc/vimrc">/data/adb/post-fs-data.d/restore_vimrc.sh
chmod 755 /data/adb/post-fs-data.d/restore_vimrc.sh
Now the file in the dummy Magisk module will be restored with the contents of the original file from /system after each reboot
To temporary access the original file from /system just stop the Magisk daemon, Example:
Code:
ASUS_I006D:/ # echo '"Test Test' >>/etc/vimrc
ASUS_I006D:/ #
ASUS_I006D:/ # tail -1 /etc/vimrc
"Test Test
ASUS_I006D:/ #
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # magisk --stop
ASUS_I006D:/ #
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # tail -1 /etc/vimrc
endif
ASUS_I006D:/ #
Note
Stopping the Magisk daemon will disable all bind mounts done by Magisk.
Restarting the Magisk daemon will not re-create the bind mount - to re-activate the bind mount for the writable file after stopping the Magisk daemon the phone must be rebooted.
To make more then one file writable in a sub directory in /system you can also replace the complete folder using these commands as user root:
Bash:
#
# make all files in /system/etc writable by the user root
#
mkdir -p /data/adb/modules/writable_system/system/etc/
cd /system/etc
find . | cpio -pdum /data/adb/modules/writable_system/system/etc/
touch /data/adb/modules/writable_system/system/etc/.replace
Now Magisk will replace the directory /system/etc with the directory /data/adb/modules/writable_system/system/etc after the next reboot
Notes
You should test these commands with a not important file like /system/etc/vimrc before changing important files.
It is NOT recommended to use this approach on productive phones.
See How to change any file or directory using Magisk for another approach to change files on read-only mounted filesystems.
Trouble Shooting
As always: If something does not work like expected check the Magisk log file /cache/magisk.log and also check the infos in this post.
Does this method require root on device?
FormulaSea said:
Does this method require root on device?
Click to expand...
Click to collapse
yes
Is there any method don't require root?
This looks interesting. Are you using OverlayFS for this? Looks like you did quite the research on this
Read-only is boring even as root. It's time for some RW baby
FormulaSea said:
Does this method require root on device?
Click to expand...
Click to collapse
I don't know a method to do this without root access.
But you can disable the root access in Magisk after implementing the changes . You could even uninstall tne Magisk app afterwards (but not the Magisk part from the boot partition)
regards
Bernd
lebigmac said:
This looks interesting. Are you using OverlayFS for this? Looks like you did quite the research on this
Read-only is boring even as root. It's time for some RW baby
Click to expand...
Click to collapse
I don't know what exactly you mean by "OverlayFS" - I use MagiskModules to modify files in /system and as far as I know Magisk used bind mounts to implement it.
>>Read-only is boring even as root.
Correct, but if you made the changes directly in /system, they would not survive the next OS upgrade.
One of the great advantages of this feature of Magisk is that it survives an OS upgrade - so as long as the change is compatible with the installed OS version, it only needs to be done once.
regards
Bernd
Thanks it worked on the audio folders on my 7t pro but didn't work on the boot animation folder. Both folders appear in the adb though with there files. Let me know op if you figure out how to do the boot animation folder it's moved to /my_product/ instead of /system/ I see that the my product folder and boot animation appear in the adb modules like the audio folder does and I swapped files the same way as with my audio modding but the changes for boot didn't take effect.
cbomb1337 said:
Thanks it worked on the audio folders on my 7t pro but didn't work on the boot animation folder. Both folders appear in the adb though with there files. Let me know op if you figure out how to do the boot animation folder it's moved to /my_product/ instead of /system/ I see that the my product folder and boot animation appear in the adb modules like the audio folder does and I swapped files the same way as with my audio modding but the changes for boot didn't take effect.
Click to expand...
Click to collapse
/my_product is not in the list of folders supported by Magisk so that may not work
Please post the output of these commands (executed as root user):
df -h
mount
ls -ald /*
ls -lZd /my_product
and a
ls -ldZ $( find /data/adb/modules/ )
and
cat /cache/magisk.log
(or attach the log file to the post if too big)
regards
Bernd
Here is this the correct log file. Thank you for responding to me.
cbomb1337 said:
Here is this the correct log file. Thank you for responding to me.
Click to expand...
Click to collapse
can you also post the output of the OS commands listed?
I Don't know how.
It didn't let me add the log here. Sorry that's it's cut and paste I tried a few termux commands to save a log but the were blank. I don't understand how to do it right.
Edit here I managed to upload the log to drive
https://drive.google.com/uc?id=1uWurf_462b5uLC_D21SFcgLcBWiXQZOn&export=download
bnsmb said:
can you also post the output of the OS commands listed?
Click to expand...
Click to collapse
Linefeeds are missing in that file so it's very hard to interpret the file contents correct
Can you do in a adb shell on the phone:
Bash:
(
set -x
set -v
su -
echo
df -h
echo
mount
echo
ls -ald /*
echo
ls -lZd /my_product
echo
ls -ldZ $( find /data/adb/modules/ )
echo
) > /sdcard/Download/oscmds.log 2>&1
then
Bash:
gzip /sdcard/Download/oscmds.log
and post / upload the file
/sdcard/Download/oscmds.log.gz
regards
Bernd
and
Here is the gzip I wasn't sure what was going on after entering that first command the termux was frozen for a few minutes. Also With the folders in the module folder and them being a copy of the original folder is it ok to delete them as a whole folder to remove the rw and revert it of needed. I tried it and didn't see any issues doing it but wanted to know if it reverted it properly and does deleting the module folders make me lose anything original that was in it or is my stock stuff safe because it's through magisk.
cbomb1337 said:
Here is the gzip I wasn't sure what was going on after entering that first command the termux was frozen for a few minutes. Also With the folders in the module folder and them being a copy of the original folder is it ok to delete them as a whole folder to remove the rw and revert it of needed. I tried it and didn't see any issues doing it but wanted to know if it reverted it properly and does deleting the module folders make me lose anything original that was in it or is my stock stuff safe because it's through magisk.
Click to expand...
Click to collapse
Looks like /my_product is a directory in the root filesystem but on the other hand there is a mount point called /mnt/vendor/my_product so I'm not sure about that.
If /my_product is really only a separate directory in the root filesystem the only method to change it is to manipulate the ramdisk used for booting the phone (only if the phone is using a ramdisk, of course).
Can you check if there are other directories called my_product:
find / -type d -name my_product 2>/dev/null
And, if there are any, compare the files in that directory with the files in the directory /my_product?
regards
Bernd
The only folder that has the same boot animation files is the /dev/ ones and the mnt one like you said.
It's all good if it can't be done i just found a magisk module before which works for flashing my boot animation
cbomb1337 said:
The only folder that has the same boot animation files is the /dev/ ones and the mnt one like you said.
Click to expand...
Click to collapse
Then it can't be done using the standard Magisk feature for making r/o mounted filesystems read-write.
cbomb1337 said:
It's all good if it can't be done i just found a magisk module before which works for flashing my boot animation
Click to expand...
Click to collapse
OK, do you have the URL?
And you could just check the contents of the zip file with the Magisk Module on how it's implemented
regards
Bernd
bnsmb said:
Then it can't be done using the standard Magisk feature for making r/o mounted filesystems read-write.
OK, do you have the URL?
And you could just check the contents of the zip file with the Magisk Module on how it's implemented
regards
Bernd
Click to expand...
Click to collapse
I read the module it mentions binding. I don't understand none of it :/ I upload the module here and removed the boot animation to make it small.
cbomb1337 said:
I read the module it mentions binding. I don't understand none of it :/ I upload the module here and removed the boot animation to make it small.
Click to expand...
Click to collapse
Cool -- that's the solution I also found in the meantime (and successfully tested it on my Zenfone 8)
In principle the module does for the bootanimation file what Magisk does if you replace some directories or files in /system
I will write a general HowTo how that works today or in the next days
regards
Bernd
I have a rooted Pixel 7 and It was suggested that I rename a system file to prevent the system from updating itself (despite my having turned off all such options). My first attempt was to merely try renaming the file, but that didn’t work because the file systems in mounted RO.
I did some looking around, and the common approach to dealing with this issue is to remount the file system. Following is a ‘screen grab’ of my abd session:
Code:
cheetah:/ $ su
cheetah:/ $ ls /product
app etc fonts framework lib lib64 lost+found media overlay priv-app tts usr wallpaper
(this has the directory I want, so this file system)
cheetah:/ $ mount | grep product
/dev/block/dm-15 on /product type ext4 (ro,seclabel,relatime)
(this is a mounted file system)
cheetah:/ # mount -o rw,remount /product
'/dev/block/dm-15' is read-only
cheetah:/ # mount -o rw,remount -t ext4 /product
'/dev/block/dm-15' is read-only
cheetah:/ # mount -o rw,remount /dev/block/dm-15 /product
'/dev/block/dm-15' is read-only
(three attempts to remount – all failed)
So, now what should I try?
groston said:
I have a rooted Pixel 7 and It was suggested that I rename a system file to prevent the system from updating itself (despite my having turned off all such options). My first attempt was to merely try renaming the file, but that didn’t work because the file systems in mounted RO.
I did some looking around, and the common approach to dealing with this issue is to remount the file system. Following is a ‘screen grab’ of my abd session:
Code:
cheetah:/ $ su
cheetah:/ $ ls /product
app etc fonts framework lib lib64 lost+found media overlay priv-app tts usr wallpaper
(this has the directory I want, so this file system)
cheetah:/ $ mount | grep product
/dev/block/dm-15 on /product type ext4 (ro,seclabel,relatime)
(this is a mounted file system)
cheetah:/ # mount -o rw,remount /product
'/dev/block/dm-15' is read-only
cheetah:/ # mount -o rw,remount -t ext4 /product
'/dev/block/dm-15' is read-only
cheetah:/ # mount -o rw,remount /dev/block/dm-15 /product
'/dev/block/dm-15' is read-only
(three attempts to remount – all failed)
So, now what should I try?
Click to expand...
Click to collapse
I haven't used this, but maybe it can help you.
Lughnasadh said:
I haven't used this, but maybe it can help you.
Click to expand...
Click to collapse
Thank you. Seems like this might work, but after reading several pages, I am not sure how to install/use overlayfs. I have a Windows system - any chance you could point me to something that provides some guidance?
groston said:
Thank you. Seems like this might work, but after reading several pages, I am not sure how to install/use overlayfs. I have a Windows system - any chance you could point me to something that provides some guidance?
Click to expand...
Click to collapse
I've never used this before but I believe once you flash the module it makes the /system RW so you can start making modifications. There's a README that provides some information. I don't know of any other guides besides the information on that Github page.
Checking out the thread below might reveal a solution and/or give a clue or hint...
Pixel 7 Pro Stuck in read only mode (rooted with magisk 26.1) Am I missing something? HELP
Everything ive tried in FX Explorer fails. No matter what I try, for example editing build.prop or anything else, it constantly says read only. i cannot use any method to allow write access. Did i miss something when i rooted with Magisk? I dont...
forum.xda-developers.com
simplepinoi177 said:
Checking out the thread below might reveal a solution and/or give a clue or hint...
Pixel 7 Pro Stuck in read only mode (rooted with magisk 26.1) Am I missing something? HELP
Everything ive tried in FX Explorer fails. No matter what I try, for example editing build.prop or anything else, it constantly says read only. i cannot use any method to allow write access. Did i miss something when i rooted with Magisk? I dont...
forum.xda-developers.com
Click to expand...
Click to collapse
Good suggestion. I installed FX File Explorer, gave it the appropriate permissions, but was unable to change the /product filesystem to read/write.
groston said:
Good suggestion. I installed FX File Explorer, gave it the appropriate permissions, but was unable to change the /product filesystem to read/write.
Click to expand...
Click to collapse
When you say "gave it the appropriate permissions", just to confirm -- that doesn't mean that you changed the security permissions on the folder & files, correct? I hope it means you did not do what the OP in that thread had done and actually did enable root access particularly (hoping that's what you meant on "gave it appropriate permissions").
Because, in certain cases, I've changed permissions on files/folders vs. simply enabling root access mode....
Apologies in advanced if my inquiry seems fairly obvious (to the point of insulting maybe; it is not meant to be), but you never know and many foolish things has been done/assumed on this site that missed many (obvious) things because it wasn't confirmed....