Related
OK, I spent a couple of hours figuring out how loop mounting works. The problem is that the mount command in both toolbox and busybox supports only one loop device. I modified the toolbox version to allow the specification of a new loop device.
Here is how to make a 500mb loop-mounted ext2 system at /mnt/myloop , with the system being stored in /storage/sdcard/myext2system.img
Step 1. Make sure you have root. Download bettermount*.zip to your PC from here. Copy the "bettermount" file from the zip file to /data/local/ (or some other location). One way of doing that is with:
Code:
adb push bettermount /data/local
on the PC. Or you can mount your device to USB, copy bettermount to storage, and then in a root shell copy it to /data/local. Or if you have RW root, you can install bettermount in /bin or some other convenient location.
Start a shell on the device, either via adb or an on-device terminal (not recommended unless you have an external keyboard). Switch to root:
Code:
su
Then make bettermount executable:
Code:
chmod 755 /data/local/bettermount
The following steps assume you're still in your root shell.
Step 2. Create ext2 file system in a file. (Skip this if you already have one.)
Code:
dd if=/dev/zero of=/storage/sdcard/myext2system.img bs=1M count=500
mke2fs /storage/sdcard/myext2system.img
mke2fs will give you a warning that this isn't a block special device, but just press "y" and "enter".
Step 3. Create a loop device node for the ext2 file system. The problem here is that the OS uses loop device nodes for apps moved to external storage and one for the system squashfs, and it only has enough loop device nodes for those purposes--any loop device nodes in /dev/block are already in use. On the assumption that you aren't going to have more than 253 apps moved to storage, we're going to create a loop device node numbered 255. If you like, you can check that there isn't already one with that number with
Code:
ls /dev/block/loop*
So, let's create the loop device node:
Code:
mknod -m640 /dev/block/loop255 b 7 255
Step 4. Create a mount point:
Code:
mkdir /mnt/myloop
Step 5. Mount myext2filesystem.img:
Code:
/data/local/bettermount -t ext2 -orw,exec,noatime,nodiratime,sync,loop=/dev/block/loop255 /storage/sdcard/myext2system.img /mnt/myloop
Enjoy your new file system at /mnt/myloop !
You will have to repeat Steps 3-5 after every boot, or else you can make a script that runs every time you boot. You could simply put the commands for 3-5 into a Script Manager script set to run on boot, or there may be some better, more unixy way (but I haven't had any luck editing startup scripts).
What to do with your shiny new filesystem? Well, you could move not just apps but also their libraries to external storage (you can also do that by remounting your external storage in exec mode).
arpruss said:
OK, I spent a couple of hours figuring out how loop mounting works. The problem is that the mount command in both toolbox and busybox supports only one loop device. I modified the toolbox version to allow the specification of a new loop device.
Here is how to make a 500mb loop-mounted ext2 system at /mnt/myloop , with the system being stored in /storage/sdcard/myext2system.img
Step 1. Make sure you have root. Download bettermount*.zip to your PC from here. Copy the "bettermount" file from the zip file to /data/local/ (or some other location). One way of doing that is with:
Code:
adb push bettermount /data/local
on the PC. Or you can mount your device to USB, copy bettermount to storage, and then in a root shell copy it to /data/local. Or if you have RW root, you can install bettermount in /bin or some other convenient location.
Start a shell on the device, either via adb or an on-device terminal (not recommended unless you have an external keyboard). Switch to root:
Code:
su
Then make bettermount executable:
Code:
chmod 755 /data/local/bettermount
The following steps assume you're still in your root shell.
Step 2. Create ext2 file system in a file. (Skip this if you already have one.)
Code:
dd if=/dev/zero of=/storage/sdcard/myext2system.img bs=1M count=500
mke2fs /storage/sdcard/myext2system.img
mke2fs will give you a warning that this isn't a block special device, but just press "y" and "enter".
Step 3. Create a loop device node for the ext2 file system. The problem here is that the OS uses loop device nodes for apps moved to external storage and one for the system squashfs, and it only has enough loop device nodes for those purposes--any loop device nodes in /dev/block are already in use. On the assumption that you aren't going to have more than 253 apps moved to storage, we're going to create a loop device node numbered 255. If you like, you can check that there isn't already one with that number with
Code:
ls /dev/block/loop*
So, let's create the loop device node:
Code:
mknod -m640 /dev/block/loop255 b 7 255
Step 4. Create a mount point:
Code:
mkdir /mnt/myloop
Step 5. Mount myext2filesystem.img:
Code:
/data/local/bettermount -t ext2 -orw,exec,noatime,nodiratime,sync,loop=/dev/block/loop255 /storage/sdcard/myext2filesystem.img /mnt/myloop
Enjoy your new file system at /mnt/myloop !
You will have to repeat Steps 3-5 after every boot, or else you can make a script that runs every time you boot. You could simply put the commands for 3-5 into a Script Manager script set to run on boot, or there may be some better, more unixy way (but I haven't had any luck editing startup scripts).
What to do with your shiny new filesystem? Well, you could move not just apps but also their libraries to external storage (you can also do that by remounting your external storage in exec mode).
Click to expand...
Click to collapse
Which version of busybox were you testing with? I haven't had a problem with multiple loop devices...
I've been using the stock busybox: 1.7.2.
Do you use -oloop=/dev/block/loopNN to specify the device?
I just tried 1.16.0 from the Titanium Backup website. No luck. I created /dev/block/loop222. Then:
Code:
# /tmp/busybox mount -t ext2 -oloop=/dev/block/loop222 /storage/10.img /mnt/myloop
mount: can't setup loop device: No such file or directory
# bettermount -t ext2 -oloop=/dev/block/loop222 /storage/10.img /mnt/myloop
# (works!)
I also tried just plain -oloop, without the =/dev/block/loop222, and it didn't work.
arpruss said:
I've been using the stock busybox: 1.7.2.
Do you use -oloop=/dev/block/loopNN to specify the device?
I just tried 1.16.0 from the Titanium Backup website. No luck. I created /dev/block/loop222. Then:
Code:
# /tmp/busybox mount -t ext2 -oloop=/dev/block/loop222 /storage/10.img /mnt/myloop
mount: can't setup loop device: No such file or directory
# bettermount -t ext2 -oloop=/dev/block/loop222 /storage/10.img /mnt/myloop
# (works!)
I also tried just plain -oloop, without the =/dev/block/loop222, and it didn't work.
Click to expand...
Click to collapse
I can't remember if mount was symlinked to busybox at the time, but I just used the standard "mount -o loop disk1.img /mnt/disk". I may have even been on a custom kernel and had a crosscompiled mount, so good work, this is probably going to be a common problem for people.
The problem with busybox seems to be that it thinks /dev/block/loop0 is free, but it's not. Doing losetup -f returns /dev/block/loop0.
If you could mount the loopdevice in init.rc this would be the easiest way to expand the 300MB /data problem with archos.
Also it might be the best way in CM7 until its stable for the persistent Data between revisions.
fzelle said:
If you could mount the loopdevice in init.rc this would be the easiest way to expand the 300MB /data problem with archos.
Also it might be the best way in CM7 until its stable for the persistent Data between revisions.
Click to expand...
Click to collapse
I have had no luck adding anything to init.rc with the rw root.
Moreover, /storage and /storage/sdcard get mounted quite late in the boot process--late enough that I think one can't just move the /data directory there. I suppose one might be able to mount them earlier in the process, but I haven't been able to figure out how to run anything in an init script. If anybody knows how to do it, please speak up!
What one could do, however, is mount the loop from an app's on-boot notification, and then symlink individual app files.
It looks like with a better busybox than the one included with the device, one can also use losetup to specify the loop device--see here.
I built a full 1.18.5 version of Busybox, and it does loop mounting just right. You can replace Step 1 of my HOWTO with fetching my modified busybox and putting it in /data/local, from http://code.google.com/p/busybox-for-android/downloads/list
Then step 3 is not needed.
Step 4 should be replaceable with the very simple:
Code:
/data/local/busybox mount -orw,exec,noatime,nodiratime,sync,loop /storage/sdcard/myext2system.img /mnt/myloop
Or if you're pressed for time, and want to use default mount options:
Code:
/data/local/busybox mount -oloop /storage/sdcard/myext2system.img /mnt/myloop
But if you want to implement this is inside an app, depending on your license needs, you may want to use the longer method, since busybox is GPL while bettermount is Apache 2.
I installed 2.3 to my phone.
The cust.img contain a lot of unneeded apks. (The cust.img is a disk image file.)
How to extract cust.img and delete a file in that?
The cust.img mounted to /cust folder as "read only" by init.rc (init.rc automatically generated on boot)
ufukyayla said:
i installed 2.3 to my phone.
The cust.img contain a lot of unneeded apk.
How to extract cust.img and delete a file in that?
The cust.img mounted to /cust folder as as read only by init.rc (init.rc automatically generated on boot)
Click to expand...
Click to collapse
Is cust.img or cust_data.img? See on /cust_backup/image/cust...
This is cust.img in image folder. (When pink screen mode)
ufukyayla said:
This is cust.img in image folder. (When pink screen mode)
Click to expand...
Click to collapse
I never change or delete anything on that place (when pink screen mode). I make all on /cust_backup/image/recovery.img or /cust... don't remember all.
Is from here that at each restarting or rebooting is loaded the bootloader (pink screen).
I deleted in this place all Carrier data /cust_backup/image/cust... something.
But take care, that /image/ is backed also on ROM Backups. If you delete the /cust... like I made, and if one day you made a ROM Restore made before, the /cust... return to same place. You must delete this after each ROM Restore.
For all restores I have, I made: Rom Restore-> delete /cust... (carrier data) -> new Rom backup.
..................................
EDIT: I made all this because I'm rooted and whit Root Explorer.
I dont want to delete cust.img.
The cust.img is a disk image file.
I want to delete a file in disk image that contained in cust.img.
The cust.img mounted to /cust folder as read only on boot.
i delete all boot files.
I delete all of boot files in this folder.When i open phone i faced blue screen. can someone zip all files in this folder and upload for me. Otherwise i have to send my phone to technical service.
I fixed it.
I deleted all unneeded apks (stock apps) that stored in cust.img
My method;
1. On Slitaz Linux 3.0
2. Open terminal
3. Copy cust.img from phone to /home folder
4. mkdir tmp
5. mount cust.img /home/tmp
6. cd /home/tmp/hw/default/app
7. Delete apk files what you don't want
8. umount tmp
9. Copy cust.img from /home folder to phone
It is for who don't have linux;
http://www.multiupload.com/EKPGJ7EUGO
This is "cleared" cust.img. That contains only these apks;
BeyondTheSkyTheme.apk
Calendar.apk
CalendarProvider.apk
DeskClock.apk
ToolBox.apk
modify init.rc
Code:
mount vfat /dev/block/mmcblk0p1 /.cust_backup ro wait
mount ext3 [email protected]_backup/image/cust.img /cust ro
to
Code:
mount vfat /dev/block/mmcblk0p1 /.cust_backup rw wait
mount ext3 [email protected]_backup/image/cust.img /cust rw
then you could delete any files in cust.img..(/cust in phone)
genokolar said:
modify init.rc
Code:
mount vfat /dev/block/mmcblk0p1 /.cust_backup ro wait
mount ext3 [email protected]_backup/image/cust.img /cust ro
to
Code:
mount vfat /dev/block/mmcblk0p1 /.cust_backup rw wait
mount ext3 [email protected]_backup/image/cust.img /cust rw
then you could delete any files in cust.img..(/cust in phone)
Click to expand...
Click to collapse
The init.rc automatically generating on boot.
Changes lost when you reboot your phone.
The init.rc is in your boot.img, which you could edit with a tool like abootimg, but you'd need Linux to modify that, anyway.
qwerty12 said:
The init.rc is in your boot.img, which you could edit with a tool like abootimg, but you'd need Linux to modify that, anyway.
Click to expand...
Click to collapse
But, it is very hard to do.
abootimg -x boot.img
rename initrd.img to initrd.gz
gunzip initrd.gz
extract initrc using cpio
edit init.rc
recompess
regzip
update bootimg
...
...
etc. etc.
do you know easy way?
ufukyayla said:
But, it is very hard to do.
abootimg -x boot.img
rename initrd.img to initrd.gz
gunzip initrd.gz
extract initrc using cpio
edit init.rc
recompess
regzip
update bootimg
...
...
etc. etc.
do you know easy way?
Click to expand...
Click to collapse
Combine the commands together; create scripts or add aliases to your .bashrc
Do "abootimg -x boot.img && mkdir newramdisk && cd newramdisk && zcat ../initrd.img | cpio -i --no-absolute-filenames" and you're in the folder with the extracted initrd.
When you're done editing, run "find . -print | cpio -o -H newc | gzip -n -9 > ../initrd.img" followed by "cd .. ; abootimg -u boot.img -r initrd.img" and you're done
thanks a lot. i'll try this.
Is there any other way without Linux to remove a .apk from cust.img?
Yes, look at the page 1
I deleted app, but size boot.img has not changed. How to reduce size boot.img?
Moved To General
As the OP contains no development, as such this does not belong here
You can find some thread for you to move data partition to sd-ext. But there is a easier way to do that: Modify the mount point of sd-ext and data in ramdisk.
The basic step is:
0. Make a nandroid backup
1. Make an ext4 partition on your sdcard (I used gparted in ubuntu, very fast and not lost data)
2. Download your kernel as boot.img
3. Unpack you boot.img (you can find many thread said how to do, and I think the most completly tool you can get from http://forum.xda-developers.com/showthread.php?t=1241005. You can find the example to unpack boot.img, extract ramdisk, repack ramdisk, repack boot.img from the README.txt file of this tool)
4. Extract ramdisk:
Code:
gzip -dc ../unpack/boot.img-ramdisk.gz | cpio -i
If you find ramdisk.cpio file, you need to extract it by
Code:
cpio -i -F ramdisk.cpio
5. Modify the mount point of data and sd-ext
- File fstab:
+ Find the line
Code:
/data yaffs2 userdata
, and change to
Code:
/data ext4 /dev/block/mmcblk0p2
- File init.semc.rc
+ Find the line
Code:
mount yaffs2 [email protected] /data nosuid nodev
and change to
Code:
mount ext4 /dev/block/mmcblk0p2 /data nosuid nodev
- File recovery.fstab:
+ Find the line
Code:
/data yaffs2 userdata
and change to
Code:
/data ext4 /dev/block/mmcblk0p2
6. Repack the ramdisk
If you extracted from ramdisk.cpio file, you need to pack to ramdisk.cpio first
Code:
find . | cpio -o -H newc -O <target path>/ramdisk.cpio
Then repack you ramdisk: At the ramdisk folder:
Code:
mkbootfs <ramdisk folder> | gzip > <target path>/boot.img-ramdisk-new.gz
7. Repack boot.img
Code:
mkbootimg --kernel <path to>/boot.img-zImage --ramdisk <path to>/boot.img-ramdisk-new.gz -o <path to>/boot_new.img --base `cat <path to>/boot.img-base`
8. Flash boot_new.img
9. Enter CWM, wipe phone and restore from your backup
--> Done
Thanks for the info. Or you can go on cmw and create sd-ext from there.
Will it Work with an ext3 partition too?
Gesendet von meinem LT15i
lol
i dont understand at all...
ARip Kenpachi said:
i dont understand at all...
Click to expand...
Click to collapse
It's because the title is wrong.. it's not the "easy way" .. it's a little bit more 'medium - adv user' way..
If it's so hard for you, I think it's better u to search 'script/app' for doing this.
There's a lot available like link2sd, cronmod script, etc
Excellent, it worked on Vengeance Kernel, actually that was the only kernel that I was able to extract the ramdisk.
Lupus kernel has is ramdisk in another format (not gzip), and KTG is in a elf file.
The boot took a little bit longer, but i think is more stable than using init.d scripts.
EDIT: Make the backup from an old CWM (like the one on the recoveryARC.img file), newer versions will check for the correct filesystem, and as we are changing it, It will not work. For restore, use any version of CWM (the one included on Vengeance works great).
Also, if you have an LT15i, backup your /system/vendor folder, otherwise, it will be not longer available (and a lot of apps will crash), I copied it into the data folder and made a symlink into /system/vendor (and as your data folder will be bigger, thats no issue).
I can't manage to do the trick on my Arc S with DoomKernel_v22. When I flash the modified .img the phone doesn't start and i can't go into CWM.
I have two partitions on SD, the second one is the ext4 i want to use.
These are the files extracted from Doomkernel:
fstab:
Code:
/data yaffs2 userdata
/cache yaffs2 cache
init.semc.rc:
Code:
on fs
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 [email protected] /system
mount yaffs2 [email protected] /system rw remount
mount yaffs2 [email protected] /data nosuid nodev
mount yaffs2 [email protected] /cache nosuid nodev
recovery.fstab:
Code:
/cache yaffs2 cache
/data yaffs2 userdata
/system yaffs2 system
/sdcard vfat /dev/block/mmcblk0p1
/sd-ext auto /dev/block/mmcblk0p2
Can anyone help me please?
All partitions in Nook are RW, except /system, which is Read-only.
Is it possibly ?
gsms said:
All partitions in Nook are RW, except /system, which is Read-only.
Is it possibly ?
Click to expand...
Click to collapse
I think that's unwise for a number of reasons. In fact, I don't think it will let you do it. From what I remember that last time I forgot to change it back to RO after working on something I ended up in a boot loop.
nmyshkin said:
I think that's unwise for a number of reasons. In fact, I don't think it will let you do it.
...
Click to expand...
Click to collapse
It is indeed very unwise -- but nevertheless possible to have /system always mounted as rw by editing the boot-up initialization script file /init.rc and commenting out the second line of the two lines # 58-59:
Code:
mount ext2 /dev/block/mmcblk0p5 /system
# mount ext2 /dev/block/mmcblk0p5 /system ro remount
digixmax said:
It is indeed very unwise -- but nevertheless possible to have /system always mounted as rw by editing the boot-up initialization script file /init.rc and commenting out the second line of the two lines # 58-59:
Code:
mount ext2 /dev/block/mmcblk0p5 /system
# mount ext2 /dev/block/mmcblk0p5 /system ro remount
Click to expand...
Click to collapse
Please, could you tell me where to find the file "init.rc" ?
So in fact i only have to edit 1st row to 2nd row, right ?
gsms said:
Please, could you tell me where to find the file "init.rc" ?
Click to expand...
Click to collapse
The init.rc file is located at the root directory ("/").
So in fact i only have to edit 1st row to 2nd row, right ?
Click to expand...
Click to collapse
You'd need to comment out line #59
Code:
mount ext2 /dev/block/mmcblk0p5 /system ro remount
by inserting "#" at the beginning of that line
Code:
# mount ext2 /dev/block/mmcblk0p5 /system ro remount
to keep the device from remounting /system as ro.
Be warned: if you corrupt this init.rc file your NST will not boot or function properly.
It doesn't work at all.
I've changed that line, saved the file and restarted.
Afterthat the /system is read-only again and the file init.rc is the original one!
digixmax said:
The init.rc file is located at the root directory ("/").
Click to expand...
Click to collapse
Not really. The extracted copy of init.rc is in the root directory.
The actual init.rc is packed in the ramdisk.
Depending on which device you have, the ramdisk could be a file or packed in an image with the kernel.
Renate NST said:
Not really. The extracted copy of init.rc is in the root directory.
The actual init.rc is packed in the ramdisk.
Depending on which device you have, the ramdisk could be a file or packed in an image with the kernel.
Click to expand...
Click to collapse
How exactly to modify init.rc inside ramdisk, using bootutil.exe ?
Iam with (rooted) NST firmware 1.2.1
Hello XDA, I was attempting to do some experimentation with what I could do on the device via modifying init.rc files and the like. Rather than building and flashing a custom ROM for each run which is time consuming I thought I could just mess with the existing system images.
What I was hoping would work:
1. Download the October 007 (patch) stock binaries from Google
2. Extract the flame_xxxxx.zip image file
3. Convert the sparse system image file to a raw image file
- $ simg2img system.img system.raw
4. Mount the ext2 filesystem to a loopback device
- $ mount -o loop -t ext2 system.raw temp_dir
5. Edit the init file (e.g. init.rc) and save it
6. Unmount the ext2 filesystem
7. Create sparse system image
- Still don't quite know how to do this
8. Flash the sparse image from fastboot
- $ fastboot flash system system.img
So my question to the community at large is, is this track of work even logically correct. If so, how does one do it?
I have been trying to run these steps against image-flame-qd1a.190821.007.zip
My machine is running Ubuntu 19.10
For example Step 4 (mounting the ext2 system is failing for me)
Code:
$ losetup --list
....
/dev/loop8 0 0 1 1 /path/system.raw 0 512
....
$ sudo mount /dev/loop8 sys_mount
mount: /pathsys_mount: wrong fs type, bad option, bad superblock on /dev/loop8, missing codepage or helper program, or other error.
Also not working for Step 4
Code:
$ file system.raw
system.raw: Linux rev 1.0 ext2 filesystem data, UUID=4729639d-b5f2-5cc1-a120-9ac5f788683c (extents) (large files) (huge files)
$ sudo mount -o loop -t ext2 system.raw sys_mount
mount: /pathsys_mount: wrong fs type, bad option, bad superblock on /dev/loop8, missing codepage or helper program, or other error.
Thanks for the help.
I have since built my own AOSP build and have the same issue in that I can't mount the resulting system.img file from the AOSP build either.
Not sure if that matters or not, but I found it odd.