手機 - Nokia N900 - Maemo - 解決Root空間不足問題



參考資訊:
http://talk.maemo.org/showthread.php?t=59374

命令如下:

$ sudo ./M32GBboot.sh
$ sudo ./M32GBinit.sh
$ sudo reboot

M32GBboot.sh

#!/bin/sh

# Script to prepare Maemo 5 root FS on /home (/dev/mmcblk0p2 = eMMC partition 2)
# Author: Leonid Yegoshin

# remove old Maemo5 from /home first

echo "Remove old Maemo5 root files from /home before copying..."

(cd /home; rm -fr bin boot cdrom dev etc floppy initrd lib proc \
           root sbin srv sys syspart usr var mnt tmp media home)

# copy vital files

echo "Unmount /opt bindings (one error on /opt is expected)..."

MOUNTS=`mount | grep /opt | cut -d " " -f 1`
for MOUNT in $MOUNTS ;
do
	umount $MOUNT
done

echo "Start copying Maemo5 root file system to /home..."
echo "(device can be unresponsible around 10 minutes)"

cp -a /bin /boot /cdrom /dev /etc /floppy /initrd /lib \
    /root /sbin /srv /usr /var       /home

echo "Copying done."
echo "Remount /opt back (error about / is expected)..."
start pymaemo-optify

# create dirs and links

echo "Create dirs..."

mkdir /home/proc
mkdir /home/sys
mkdir /home/syspart
mkdir -p /home/sys/kernel/debug
mkdir -p /home/mnt/initfs
mkdir /home/tmp
ln -s / /home/home
if [ ! -d /mnt/new_root ]; then
	mkdir /mnt/new_root
fi

echo "Edit a vital scripts on new root file system in /home partition..."

rm -f /home/etc/event.d/hildon-startup-progress
sed -i '/send_interface=/a\\        <allow send_type="method_call"/>' /home/etc/dbus-1/system.d/mce.conf

if [ -f /home/usr/sbin/maemo-optify-lib.sh ]; then
    sed -i -e "/test_home_mount\(\)/{n;a\\   return 0" -e "}" /home/usr/sbin/maemo-optify-lib.sh
    sed -i -e "/test_opt_mount\(\)/{n;a\\   return 0" -e "}" /home/usr/sbin/maemo-optify-lib.sh
fi

sed -i "/mount_home \&\& /s///" /home/etc/event.d/rcS-late

sed -i "/__home {/,/}/s/^/#/" /home/usr/lib/genfstab.awk

cat <<EOF >/home/etc/event.d/restart-mce
description "Restart mce to avoid a bug for loosing GPS in M32GB"
author "Leonid Yegoshin"

console output

start on started rcS-late

script
    sleep 20
    stop mce
    sleep 2
    start mce
end script
EOF

if [ -f /home/user/.config/tracker/tracker.cfg ]; then
    if ! grep -q '/mnt/initfs/' /home/user/.config/tracker/tracker.cfg; then
        sed -i '/NoWatchDirectory=/s?=?=/mnt/initfs/;?' /home/user/.config/tracker/tracker.cfg
	chown user:users /home/user/.config/tracker/tracker.cfg
    fi
fi

echo "Done: Maemo5 has been prepared in /home partition"

M32GBinit.sh

#!/bin/sh

# Script to prepare Maemo 5 boot from /home (/dev/mmcblk0p2) partition
# Author: Leonid Yegoshin

chksum=`/usr/bin/md5sum /sbin/preinit`
if [ "x$chksum" != "x10926aa4e68958c387bc08aacc39b4fa  /sbin/preinit" ]; then
    if [ "x$chksum" != "x8b030c7e22f4b58a644d2282144339a5  /sbin/preinit" ]; then
        echo "/sbin/preinit is a modified (non PR1.2 or PR1.2 + kernel-power) version. Stop"
        exit 1
    fi
fi

# fix bugs in /sbin/preinit

echo "Modifing /sbin/preinit..."

if [ -f /sbin/preinit.M32GBPR12-orig ]; then
    mv /sbin/preinit.M32GBPR12-orig /sbin/preinit
fi
mv /sbin/preinit /sbin/preinit.M32GBPR12-orig
cp /sbin/preinit.M32GBPR12-orig /sbin/preinit
sed -i '/attempting to use bootmenu/a\\     default_root="mmc"'  /sbin/preinit
sed -i '/if search_root_onmmc; then/a\\     root_mounted=0' /sbin/preinit


if [ ! -f /bootmenu.sh.M32GBPR12-orig ]; then
    mv /bootmenu.sh /bootmenu.sh.M32GBPR12-orig
fi

echo "Creating /bootmenu.sh..."

cat <<EOF >/bootmenu.sh
rm -rf /bootmenu.log
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/bootmenu.log 2>&1

echo "start+++"
cd /dev; /sbin/MAKEDEV input; cd /
modprobe omap_hsmmc
rm -f /dev/mmcblk*
sleep 2
for p in /sys/block/mmcblk*/ /sys/block/mmcblk*/mmcblk*p*/; do
  n=`basename $p`
  rm -f /dev/$n
  mknod /dev/$n b `cat $p/dev | sed "s/:/ /g"`
done

modprobe mmc_block
modprobe mmc_core

modprobe mbcache
modprobe jbd
modprobe ext3
sleep 1
chmod 660 /dev/mmcblk*
mount -t ext3 -o noatime,nodiratime,commit=1,data=writeback /dev/mmcblk0p2 /mnt/new_root
ls /dev/mmcblk*
echo "end---"
EOF

echo "Done. Booting with open keyboard will use root FS on eMMC partition 2."

M32GBrm.sh

#!/bin/sh

# Script to remove Maemo 5 root FS from /home (/dev/mmcblk0p2) partition
# Author: Leonid Yegoshin

# remove old Maemo5 from /home first

echo "Remove old Maemo5 root files from /home..."

(cd /home; rm -fr bin boot cdrom dev etc floppy initrd lib proc \
           root sbin srv sys syspart usr var mnt tmp media home)

# restore bootmenu and preinit

if [ -f /sbin/preinit.M32GBPR12-orig ]; then

    echo "Restore /bootmenu.sh and /sbin/preinit..."

    mv /sbin/preinit.M32GBPR12-orig /sbin/preinit
    if [ -f /bootmenu.sh.M32GBPR12-orig ]; then
        mv /bootmenu.sh.M32GBPR12-orig /bootmenu.sh
    else
        rm /bootmenu.sh
    fi
fi

echo "Done."

完成