Editing Changing the eMMC filesystem
Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
Each filesystem got its own pros and cons. There is no 'one size fits all' type of filesystem; only filesystems each with their own use-cases. Therefore: do some extensive research before deciding to change your filesystem! | Each filesystem got its own pros and cons. There is no 'one size fits all' type of filesystem; only filesystems each with their own use-cases. Therefore: do some extensive research before deciding to change your filesystem! | ||
- | |||
- | |||
Prerequisites: | Prerequisites: | ||
- | *The kernel you're running should support the filesystem you want to use. Either use | + | *The kernel you're running should support the filesystem you want to use. Either use kernel-power or compile a kernel yourself. |
*Willingness to mess with Maemo's boot process (reflash risk!) | *Willingness to mess with Maemo's boot process (reflash risk!) | ||
== How to do it == | == How to do it == | ||
- | Basically, you need to move | + | Basically, you need to move /home to a temporary location, reformat its original partition with the filesystem of your choice, copy /home back and finally edit /etc/event.d/rcS-late. This can be a challenge as Maemo gets into a reboot loop when /home can't be mounted. Back up all your data! |
=== Solution #1: Do everything on-device === | === Solution #1: Do everything on-device === | ||
- | This solution is based on Solution # | + | This solution is based on Solution #7 in [[Repartitioning_the_flash]]. |
- | + | 1. Move /home as described in Solution #7 in [[Repartitioning_the_flash]]. Follow the described steps strictly until you reach the command which would actually repartition the flash (the sfdisk command). You don't need to follow any other steps from the mentioned solution from now onwards. | |
- | + | ||
- | Move | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | 2. Assuming you've successfully moved /home (e.g. you got a fully booted phone with /home on a different partition), format /home its original partition to your filesystem of choice and mount it. For example: | |
- | + | ||
- | + | ||
- | + | ||
- | + | mkfs.ext4 /dev/mmcblk0p2 | |
- | to | + | mount -t ext4 -o rw,noatime,commit=1,data=writeback /dev/mmcblk0p2 /mnt |
+ | |||
+ | 3. Copy your /home back to (now its reformatted) original partition: | ||
+ | |||
+ | cp -a /home/* /mnt | ||
+ | Don't forget to unmount /home/user/MyDocs prior to copying! | ||
+ | |||
+ | 4. Now you should edit /etc/rcS-late to make Maemo use /home its original partition again and accept its new filesystem type. | ||
+ | |||
+ | 4.1. ''Making Maemo use /home its original partition again'' | ||
+ | |||
+ | In step 1, you've added the line: | ||
+ | echo "/dev/mmcblk1p1 /home ext3 rw,noatime,errors=continue,commit=1,data=writeback 0 0" >> $tmp_fstab | ||
+ | to /etc/event.d/rcS-late. Modify this line to represent the fstab entry of your new filesystem on /home its original partition. Examples include: | ||
+ | |||
+ | #ext4 example | ||
+ | echo "/dev/mmcblk0p2 /home ext4 rw,noatime,errors=continue,commit=1,data=writeback 0 0" >> $tmp_fstab | ||
+ | |||
+ | #Reiser4 example | ||
+ | echo "/dev/mmcblk0p2 /home reiser4 rw,noatime 0 0" >> $tmp_fstab | ||
- | |||
- | |||
- | |||
- | |||
- | |||
Make sure you add no invalid mount options! Mount failure results in a reboot-loop. You can test the mount options by trying to mount the partition manually prior to making it permanent. | Make sure you add no invalid mount options! Mount failure results in a reboot-loop. You can test the mount options by trying to mount the partition manually prior to making it permanent. | ||
- | |||
- | |||
- | |||
- | Line no. | + | 4.2. ''Making Maemo accept the new filesystem type'' |
+ | |||
+ | Line no. 13, 18, 23, 24 and 26 of rcS-late got "ext3" hard-coded in it. We need to edit these lines to represent our new filesystem. | ||
Ext4 example: | Ext4 example: | ||
- | + | ##Begin of snippet | |
- | ##Begin of snippet | + | script |
- | script | + | #mount /home; fix ext4 and retry mounting if 1st attempt fails |
- | + | mount_home () | |
- | + | { | |
- | + | /bin/mount /home && grep -q "/home ext4 rw" /proc/mounts | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
if [ $? -eq 0 ] | if [ $? -eq 0 ] | ||
then | then | ||
- | umount /home | + | return 0 |
+ | else | ||
+ | grep -q "/home ext4 ro" /proc/mounts | ||
+ | if [ $? -eq 0 ] | ||
+ | then | ||
+ | umount /home | ||
+ | fi | ||
+ | HOME_DEV=`grep "/home ext4" /etc/fstab | cut -d' ' -f1` | ||
+ | fsck.ext4 -y $HOME_DEV >> /var/lib/fsck_ext4_home.log 2>&1 | ||
+ | sync | ||
+ | /bin/mount /home && grep -q "/home ext4 rw" /proc/mounts | ||
+ | return $? | ||
fi | fi | ||
- | + | } | |
- | + | ##End of snippet | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ##End of snippet | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | Make sure line 24 contains a valid fsck.X command. Try running the command with all its parameters manually before making it permanent. | |
- | + | 5. Reboot your phone. You're done now. | |
== Some initial benchmarks == | == Some initial benchmarks == | ||
Line 112: | Line 79: | ||
How the benchmarks were performed: Reflashed & repartitioned phone in offline mode, SSH over usb. Used script (first round out of five dismissed in the averaged result): | How the benchmarks were performed: Reflashed & repartitioned phone in offline mode, SSH over usb. Used script (first round out of five dismissed in the averaged result): | ||
- | + | #!/bin/sh | |
- | #!/bin/sh | + | for run in `seq 1 5` |
- | for run in `seq 1 5` | + | do |
- | do | + | sync |
- | sync | + | echo 3 > /proc/sys/vm/drop_caches |
- | echo 3 > /proc/sys/vm/drop_caches | + | sleep 1 |
- | sleep 1 | + | time sh -c "cp [FILE/DIRECTORY] /mnt && sync" |
- | time sh -c "cp [FILE/DIRECTORY] /mnt && sync" | + | done |
- | done | + | |
+ | df | grep /mnt | ||
- | + | The files were copied from /dev/mmcblk0p1 (FS: reiser4, LZO compression) to /dev/mmcblk0p2 (FS: depends on test) | |
- | + | ||
- | + | ||
- | The files were copied from | + | |
Used ext3 options: | Used ext3 options: | ||
- | + | mkfs.ext3 /dev/mmcblk0p2 | |
- | + | mount -t ext3 -o rw,noatime,errors=continue,commit=1,data=writeback /dev/mmcblk0p2 /mnt | |
Used ext4 options: | Used ext4 options: | ||
- | + | mkfs.ext4 /dev/mmcblk0p2 | |
- | + | mount -t ext4 -o rw,noatime,errors=continue,commit=1,data=writeback /dev/mmcblk0p2 /mnt | |
Used reiser4 options: | Used reiser4 options: | ||
- | + | mkfs.reiser4 -o create=ccreg40,compress=lzo1,cluster=8K,formatting=smart /dev/mmcblk0p2 | |
- | + | mount -t reiser4 -o noatime /dev/mmcblk0p2 /mnt | |
Averaged values of the "real time" as reported by time | Averaged values of the "real time" as reported by time | ||
{| class="wikitable" | {| class="wikitable" | ||
- | ! Filesystem | + | ! width="90" | Filesystem |
- | ! linux-2.6.28.tar.bz2 @ 50.2MiB | + | ! width="200" | linux-2.6.28.tar.bz2 @ 50.2MiB |
- | ! 500 (mostly text) files @ 4MiB | + | ! width="200" | 500 (mostly text) files @ 4MiB |
- | ! 83 (mostly text) files @ 14.6MiB | + | ! width="200" | 83 (mostly text) files @ 14.6MiB |
|- | |- | ||
|Ext3|| 14.3725s || 7.205s || 7.1025s | |Ext3|| 14.3725s || 7.205s || 7.1025s | ||
Line 155: | Line 120: | ||
Space reported by df after each benchmark (in total 747264 1K blocks available) | Space reported by df after each benchmark (in total 747264 1K blocks available) | ||
{| class="wikitable" | {| class="wikitable" | ||
- | ! Filesystem | + | ! width="90" | Filesystem |
- | ! linux-2.6.28.tar.bz2 @ 50.2MiB | + | ! width="200" | linux-2.6.28.tar.bz2 @ 50.2MiB |
- | ! 500 (mostly text) files @ 4MiB | + | ! width="200" | 500 (mostly text) files @ 4MiB |
- | ! 83 (mostly text) files @ 14.6MiB | + | ! width="200" | 83 (mostly text) files @ 14.6MiB |
|- | |- | ||
|Ext3|| 68668 (9%) || 22748 (3%) || 32368 (4%) | |Ext3|| 68668 (9%) || 22748 (3%) || 32368 (4%) | ||
Line 167: | Line 132: | ||
|} | |} | ||
- | Do note that both | + | Do note that both Maemo and kernel-power lack Reiser4 support; you'll have to compile a kernel with Reiser4 support and reiser4progs yourself. |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
== Different filesystem in action == | == Different filesystem in action == | ||
[[Image:screenshot_reiser4.png|Reiser4 in action]] | [[Image:screenshot_reiser4.png|Reiser4 in action]] | ||
- | |||
- | |||
- |
Learn more about Contributing to the wiki.