Wubi is a cool alternative to VMPlayer and VirtualBox to run Ubuntu “almost” natively on your Windows system. It gives you a dual boot machine without partitioning your filesystem.
How to do it
• Install Wubi
• Plave your Ubuntu ISO in the _same_ place where your Wubi binaries are
• Install Ubuntu from Wubi installer
Now, after Ubuntu installation, and reboot, you will see a dual boot option of Windows and Ubuntu. Ubuntu runs on bare hardware except the disk accesses.
How it works
Wubi is based on loopback devices in Linux. A looback device exports a file as a device. You can mount this “file” and craete a file-system on it.
Wubi creates a file in your Windows NTFS file system (“root.disk”) which is exported as a loopback device in Ubuntu. This file is formatted to a file-system and used by Ubuntu.
In my Ubuntu system:
kanaujia@ubuntu:/tmp$ sudo mount [sudo] password for kanaujia: /dev/loop0 on / type ext4 (rw,errors=remount-ro) kanaujia@ubuntu:/tmp$ sudo losetup -a /dev/loop0: [0801]:115068 (/host/ubuntu/disks/root.disk) kanaujia@ubuntu:/tmp$ cat !$ cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 /host/ubuntu/disks/root.disk / ext4 loop,errors=remount-ro 0 1 /host/ubuntu/disks/swap.disk none swap loop,sw 0 0
That’s it! it is a simple concept used beautifully. I think if this setup has negative performance impact? I will find that out too later.
Anyway for fun, I experimented creating my own file-system with loop-back device:
Create a file with random data ============================== kanaujia@ubuntu:/tmp$ dd if=/dev/urandom of=/home/kanaujia/Desktop/myfs bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 1.16245 s, 9.0 MB/s Create a mount point ==================== kanaujia@ubuntu:/tmp$ sudo mkdir /mnt/myfs Update /etc/fstab ================= kanaujia@ubuntu:/tmp$ sudo vi /etc/fstab Setup the loopback device ========================= kanaujia@ubuntu:/tmp$ sudo losetup /dev/loop1 /home/kanaujia/Desktop/myfs Format the device as a file-system ================================== kanaujia@ubuntu:/tmp$ mkfs.ext3 -c /dev/loop1 mke2fs 1.42 (29-Nov-2011) mkfs.ext3: Permission denied while trying to determine filesystem size kanaujia@ubuntu:/tmp$ sudo mkfs.ext3 -c /dev/loop1 mke2fs 1.42 (29-Nov-2011) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 2560 inodes, 10240 blocks 512 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=10485760 2 block groups 8192 blocks per group, 8192 fragments per group 1280 inodes per group Superblock backups stored on blocks: 8193 Checking for bad blocks (read-only test): done Allocating group tables: done Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done kanaujia@ubuntu:/tmp$ sudo mount /dev/loop1 kanaujia@ubuntu:/tmp$ mount /dev/loop0 on / type ext4 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda1 on /host type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096) gvfs-fuse-daemon on /home/kanaujia/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=kanaujia) /dev/loop1 on /mnt/myfs type ext3 (rw,noexec,nosuid,nodev) kanaujia@ubuntu:/tmp$ cd /mnt/ kanaujia@ubuntu:/mnt$ ls myfs kanaujia@ubuntu:/mnt$ cd myfs/ kanaujia@ubuntu:/mnt/myfs$ ls lost+found kanaujia@ubuntu:/mnt/myfs$ ll total 17 drwxr-xr-x 3 root root 1024 Jul 11 13:32 ./ drwxr-xr-x 3 root root 4096 Jul 11 13:30 ../ drwx------ 2 root root 12288 Jul 11 13:32 lost+found/ kanaujia@ubuntu:/mnt/myfs$ sudo touch hh kanaujia@ubuntu:/mnt/myfs$ ls hh lost+found kanaujia@ubuntu:/mnt/myfs$ ll total 17 drwxr-xr-x 3 root root 1024 Jul 11 13:34 ./ drwxr-xr-x 3 root root 4096 Jul 11 13:30 ../ -rw-r--r-- 1 root root 0 Jul 11 13:34 hh drwx------ 2 root root 12288 Jul 11 13:32 lost+found/
References:
Loopback Devices in Linux
http://csulb.pnguyen.net/loopbackDev.html