LiveUsbPendrivePersistent
Introduction
It is possible to have Ubuntu or Kubuntu on a USB pendrive or USB hard disk drive with persistent mode. This means that you can boot from a USB pendrive and keep customisations such as keyboard layout, numlock, preferences, additional packages saved on the pendrive. This can be done using linux or windows. You will need a USB pendrive of 1 GB or more. This page is written after having tested the instructions on a Peak III 1 GB pendrive. The preparation of the pendrive is explained using 'fdisk' because I had errors with 'gparted' and i could not give the partitions a volume name. I used Ubuntu to make the pendrive. In Kubuntu it is more or less the same. Where you see 'ubuntu' replace it by 'kubuntu'. I will mark the other differences.
If you are looking for help in putting the 'alternate' cd on a pen drive, then try the instructions here: https://help.ubuntu.com/community/Installation/FromUSBStick . They're for feisty, but more or less work for gutsy too. Note that you may need to add "vesa vga=771" to the append= line in syslinux.cfg in order to get the installer to display properly.
Installing Ubuntu on USB pendrive using Linux
Preparing the USB pendrive
Making partitions
The preparation of the pendrive is explained using 'fdisk'. You could use 'gparted' or 'qtparted' as well. However I had errors with 'gparted' and I could not give the partitions a volume name. I tested 'qtparted' as well and it worked fine. You can install 'qtparted' under Ubuntu through synaptic although it is native to Kubuntu. Another issue in my case was that 'fdisk' recognised a fat32 filesystem as linux. So I checked it with gparted and it was OK.
Plug in the pendrive and check its device name:
mount
Assuming you have your Ubuntu set up to automatically mount your USB stick, this should show you what /media/pendrive or whatever it's called corresponds to on the device level.
Alternatively, you could run
sudo fdisk -l
but if you have multiple devices on your system, it will print a fair amount of fairly technical information.
We are going to suppose that its name is /dev/sdX where X is the disk device such as /dev/sda or /dev/sdc. Please be sure to use the correct number for X which matches the name you find for your pen drive. Double check it! [Note: on newer computers, which use serial ATA disks, /dev/sda is typically the main hard drive; do not overwrite this!]
Note: on some usb-sticks fdisk says "Note: sector size is 2048 (not 512)", in which case you may very well be out of luck trying to boot from it, see mailing list thread: [http://syslinux.zytor.com/archives/2007-March/008284.html Problem with 2GB USB Pendrive]
Now we are going to create 2 partitions: 1 partition of 750 MB with a fat32 filesystem and 1 partition with the rest of the pendrive space with volume name "casper-rw" and ext2 filesystem. The first partition will be made active.
Go in terminal and unmount the drive:
sudo umount /dev/sdX1
Fire up fdisk for the pendrive:
sudo fdisk /dev/sdX
This will give you the fdisk prompt. Look to what you have on the pendrive. Check if you have to backup the data you have on it. 'p' will print the content of /dev/sdX. If you have partitions on it remove them ('d', 'partition number'). Make partition 1: 'n' for new partition, 'p' to make it a primary partition, '1' to call it partition number 1, then just press enter to accept the proposed starting cylinder, '+750M' to make its size 750 MB. Then 'a' to make it the active partition. Set the file system of partition 1 to FAT: 't', then '1', then '6'. ( I already had partition 1 selected so for me it was just 't' then '6' -Jordan_U) Make partition 2: 'n' for new partition, 'p' to make it a primary partition, '2' to call it partition 2, then just press enter to accept the proposed starting cylinder, then press enter to accept the proposed ending cylinder. Save and quit fdisk with 'w' to write the new settings.
I had an issue with this that every time I saved my partition setup using 'w', I'd get an:
WARNING: Re-reading the partition table failed with error22: Invalid argument. The kernel still uses old table. The new table will be available at the next reboot.
If this happens, and then checking with 'sudo fdisk -l' doesn't show the new partitions - here's a fix if you have a Windows OS, though I don't know why it works:
Do nothing else with the pendrive. Insert into Windows (mine was XP) and format with Disk Management and use FAT32. Now, 'sudo fdisk -l' should see the two partitions under the pendrive. -neverard
I had the same error, using gparted instead of fdisk worked for me -Jordan_U
Check the result:
sudo fdisk -l
You should see the 2 partitions with the first marked with a * because it is active.
If ubuntu mounted the partitions again you should unmount them:
sudo umount /dev/sdX1 sudo umount /dev/sdX2
We will now format the partitions by putting a filesystem on and giving them the name 'ubuntu' (or any other name you want) and 'casper-rw' (this name is MANDATORY, do not change other names and do not use capital letters): Mount the partitions on the pendrive. Take out the pendrive and put it back. Ubuntu Dapper or Edgy will mount the pendrive automatically if you have checked this option under System -->Preferences--> Removable media. Otherwise use 'mount': On recent Ubuntu versions, the USB stick's partitions should simply appear under /media/ubuntu and /media/casper-rw if you have followed the proposed naming convention.
Download the Ubuntu image (for example, ubuntu-7.10-desktop-i386.iso) or put in the install CD if you have it. If you use the downloaded image you can access it as follows (supposing that the image is in the cuurent directory): You should now see the CD's icon on your desktop. Open the CD's top-level folder and make sure that you see the hidden files too. (verify if View-->Show Hidden Files is checked). Copy the following folders and files to the 1st partition of your USB pendrive: Folders: 'casper', 'disctree', 'dists', 'install', 'pics', 'pool', 'preseed', '.disk' Files: all files from the folder 'isolinux', 'md5sum.txt', 'README.diskdefines', 'ubuntu.ico' So you do not copy the folder 'isolinux' to the pendrive but only its contents directly to the root of the first partition of the pendrive. Copy 'casper/vmlinuz', 'casper/initrd.gz', 'install/mt86plus'. So you will have these files double on the pendrive: once in the root '/' of the partition and once in the folder 'casper' or 'install'. Rename the file 'isolinux.cfg' to 'syslinux.cfg' either by right clicking on it and selecting 'rename'. You can also run the following commands in the terminal. If you copy/paste, take care to make your browser window large enough to not have accidental line breaks inserted. And remember to replace /media/ubuntu with /media/whatmountpointyouhave1 if you used a different name for the mount point. Add the -v option to cp to get some progress indication. The casper/filesystem.squashfs file in particular is large, and takes a long time to copy. The FAT32 file system will not allow symbolic links to be copied over. You will get a warning about this, but it is harmless.
We are going to install the linux bootloader 'syslinux'. This bootloader needs a configuration file which is 'syslinux.cfg'. This is the file we just made by renaming 'isolinux.cfg' from the installCD. However we have to modify this file. Open the file 'syslinux.cfg' from the pendrive with your favorite texteditor. For instance: The following edits need to be made: Search and replace /casper/ with nothing Search and replace /install/ with nothing Change the DEFAULT to something unique. Here, we use persistent, but it could be anything. Copy the first LABEL section, paste it in after itself, and make the following edits to the original: The LABEL argument should be changed to what you put in DEFAULT above The menu label should be changed to describe the option; Start Ubuntu in persistent mode would seem suitable The word persistent should be added into the append line (this is the crucial point!) The following is an example of what you might end up with, and should be current as of Gutsy. The menu choice called 'Persistent' was made the default so that when booting up you can just hit Enter to start your customized session. You can also copy and paste this text as making a new file 'syslinux.cfg'. Edgy difference: replace file=preseed/ubuntu.seed with preseed/file=preseed/ubuntu.seed Dapper difference: replace file=preseed/ubuntu.seed with preseed/file=preseed.lstp.seed The last thing to do is installing the bootloader. Make sure you have the 'syslinux' and 'mtools' packages installed. The following command should be harmless if they are already installed. (Or 'sudo synaptic' and select from the package list, or use 'apt-get'). First you need to unmount your usb stick: This command will install the bootloader on your pendrive: If you get the error: then you will need to install the mtools package. Eject the pendrive: Reboot on the pendrive, change some settings, reboot again and check if the changes are kept (persistence check). So that is it. Do not forget to check if the computer you are going to use the pendrive on boots USB devices first (look in BIOS settings). Enjoy (k)ubuntu whereever you go.
TODO This is not updated for Gutsy
Download a copy of the [http://h18000.www1.hp.com/support/files/serveroptions/us/download/23839.html HP format utility] for USB drives, this utility makes it as easy to format USB pen drives as it is to format floppies. Plug in your USB pen drive and use the HP format utility to format it with a FAT32 filesystem. Using a partitioning tool, create two partitions. The first is formatted with a FAT32 filesystem and needs to be 750 MB. The second should occupy the remaining free space and should be formatted with the ext2 filesystem and is given the name "casper-rw". Note! Most DOS partitioning tools will create the partition name in uppercase (CASPER-RW). Since Linux is case-sensitive you need to do the formatting of the second partition in Linux. The persistent feature will not work if the partition name is in uppercase. See the Wiki for details. https://help.ubuntu.com/community/LiveCDPersistence
This is the same as described in the Linux section except for accessing the downloaded image. The way to do this is to mount the iso image file and copy the files that way. You can do this with NERO or [http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe Windows VirtualCD]. You might want to do it this way if you don't want to burn a CD.
Go to http://syslinux.zytor.com/iso.php and download a copy of syslinux-3.11.zip for Windows. Extract the zip file contents and move the extracted folder to your favorite location on your hard drive. Open WordPad and edit the file syslinux.cfg as described in the Linux section. Open a command prompt and change directory to the location of the syslinux folder. For example, if you placed the folder on your desktop then: cd C:\Documents and Settings\(your user name)\Desktop\syslinux-3.11\win32 (by the way you DO know that command prompt has command completion just like in Linux (start entering characters and then press the TAB key to complete the entry)). Next write the bootsectors to the flash drive by entering the following command: syslinux -f X: --> where X: is replaced by the drive letter of your USB key. Be careful to pick the correct drive letter!
http://www.pendrivelinux.com/2007/09/28/usb-ubuntu-710-gutsy-gibbon-install/ has instructions which look very similar to this page, albeit perhaps simpler and more condensed. (They have a page for Feisty, too.) However, they require you to install a somewhat mysterious initrd from a tar file they provide on that site, without any explanation. Does anybody know anything more about that site? Feisty will not be persistent on a USB pendrive due to a version mismatch between Unionfs and the kernel. [https://bugs.launchpad.net/ubuntu/+source/casper/+bug/84591 Here's the launchpad entry] and [http://ubuntuforums.org/showthread.php?p=2687688#post2687688 a forum thread] describing the problem. Apparently there should be a [http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg327694.html workaround involving a Feisty/Herd3 hybrid installation]. You could probably also download the source to a new Unionfs, compile it and merge to the pendrive, but I have no idea how - HelgeDK If you want to install the test releases of Edgy Eft, you might want to look at CustomizedInitrd. As syslinux does not support the "GFXBOOT" command the boot menu will lack some features, e.g. you cannot change the language before booting. You can specify a language and keyboard layout via kernel parameters, though. To boot into a German LiveCD environment, you would add the following to your "APPEND" lines in syslinux.cfg: Some USB keys don't have a master boot record. In these cases, the problem can usually be fixed by running Alternatively, if you haven't got lilo installed, use the 'install-mbr' command from the 'mbr' package: This may be my fault, but I created a Persistent pen drive from Ubuntu using these instructions and it worked perfectly, but I had installed an Edgy Beta, when I decided to update it to the final only a windows machine was available, follwing the windows instructions ( minus partitioning as that was still there from the previous install ) I do not get the normall Ubuntu prompt with a "custom" option at the top like before, instead I get a prompt with "Boot:" and I have to enter vmlinuz to boot, if I just hit return Ubuntu boots but something fails and it drops into a recovery console. Could somebody confirm that the windows directions are correct ( my suspicion is that it is because in Ubuntu you are using Ubuntu's custom version of syslinux while in windows you are using the "vanilla" version ) Also, the direction on where to find syslinux could be clearer, I found them at http://www.kernel.org/pub/linux/utils/boot/syslinux/ with no indication that the .zip file was indeed for windows, I tried the newest version at that time: http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.31.zip and the exact version mentioned in the instructions http://www.kernel.org/pub/linux/utils/boot/syslinux/Old/syslinux-3.11.zip both gave the same result -Jordan U I successfully installed Edgy (final) to an USB drive, following the linux instructions but using syslinux-3.20 for Windows. Afterwards I installed GRUB in the MBR which also works fine. -JanSchlüter In my installation I can still use GRUB to load syslinux. Syslinux displays the ubuntu logo and a command prompt. I can enter memtest to boot Memtest86+ or press return to boot the ubuntu live environment. I didn't use the windows version of syslinux only, though - I tried ubuntu's version first which failed to create LDLINUX.SYS, then I tried the windows version. I (successfully) made a USB boot drive using these instruction and later saved the working partitions because I needed the drive for another purpose - on restoring the partitions and running syslinux again I couldn't get my drive to boot - after many hours of head-scratching and re-installing I found that the boot flag wasn't set! Just be aware that sometimes simple things can trip you up.. David C. Someone known as mjcpa has made a patched version of Feisty that supports persistence. You can find it at http://88.191.31.14/ubuntuFeistyPatched/ Some problems have been reported with Feisty and early Gutsy releases. This is just to confirm that I could successfully make a liveUSB with Gutsy tribe 5. More details here[http://reachbeyondgrasp.blogspot.com/2007/09/carry-gibbon-in-your-pocket-how-to-make.html] I've installed a liveUSB persistence for Gutsy release, however I get segfaults on shutdown (turn off quiet and splash in the boot options). This leads to some invalid/unwritten files. Reference https://bugs.launchpad.net/bugs/147117 and https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/125702 for possible details. No ideas on fixes yet. This may be related to the .ICEauthority bug and others. Ext3 may help the data corruption (but I still get the segfaults), but probably decreases the life of the flash drive. - WaXHeLL
make sure (via fdisk -l) you created a w95/fat and not a linux partition, otherwise i was unable to boot from it!! (i had to use gparted to achieve this) - bernstein
fdisk worked for me however - booted off CD - krishnan there seems to be an incongruity: when you change the filesystem to FAT using option "t" the filesystem option "6" is FAT16. w95/fat32 is option "b". Which file system needs to be used? -rebelcat1 Formatting the partitions
sudo mkfs.vfat -F 32 -n ubuntu /dev/sdX1
sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sdX2
sudo mount /dev/sdX1 /media/mountpointyouhave1
sudo mount /dev/sdX2 /media/mountpointyouhave2
Installing Ubuntu on the USB pendrive
mkdir ubuntuCD
sudo mount ubuntu-7.10-desktop-i386.iso ubuntuCD -o loop
cd ubuntuCD
cp -rf casper disctree dists install pics pool preseed .disk /media/ubuntu
cp isolinux/* md5sum.txt README.diskdefines ubuntu.ico /media/ubuntu
cp casper/vmlinuz casper/initrd.gz install/mt86plus /media/ubuntu
cd /media/ubuntu
mv isolinux.cfg syslinux.cfg
Making the pendrive bootable
gedit syslinux.cfg
DEFAULT persistent
GFXBOOT bootlogo
GFXBOOT-BACKGROUND 0xB6875A
APPEND file=preseed/ubuntu.seed boot=casper initrd=initrd.gz quiet splash --
LABEL persistent
menu persistent ^Start Ubuntu 7.10 in persistent mode
kernel vmlinuz
append file=preseed/ubuntu.seed boot=casper persistent initrd=initrd.gz quiet splash --
LABEL live
menu label ^Start or install Ubuntu
kernel vmlinuz
append file=preseed/ubuntu.seed boot=casper initrd=initrd.gz quiet splash --
LABEL xforcevesa
menu label Start Ubuntu in safe ^graphics mode
kernel vmlinuz
append file=preseed/ubuntu.seed boot=casper xforcevesa initrd=initrd.gz quiet splash --
LABEL driverupdates
menu label Install with driver ^update CD
kernel vmlinuz
append file=preseed/ubuntu.seed boot=casper debian-installer/driver-update=true initrd=initrd.gz quiet splash --
LABEL oem
menu label ^OEM install (for manufacturers)
kernel vmlinuz
append file=preseed/ubuntu.seed boot=casper oem-config/enable=true initrd=initrd.gz quiet splash --
LABEL check
menu label ^Check CD for defects
kernel vmlinuz
append boot=casper integrity-check initrd=initrd.gz quiet splash --
LABEL memtest
menu label ^Memory test
kernel mt86plus
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
DISPLAY isolinux.txt
TIMEOUT 300
PROMPT 1
F1 f1.txt
F2 f2.txt
F3 f3.txt
F4 f4.txt
F5 f5.txt
F6 f6.txt
F7 f7.txt
F8 f8.txt
F9 f9.txt
F0 f10.txt
sudo aptitude install syslinux mtools
cd ~
sudo umount /dev/sdX1
syslinux /dev/sdX1
don't know why, but i had to use the -f switch (syslinux -f /dev/sda1) - bernstein
same here - I had to use the -f switch - krishnan syslinux complained it couldn't create LDLINUX.SYS, but it worked in the Windows version (see below) - JanSchlüter According to this page[http://www.damnsmalllinux.org/wiki/index.php/Installing_to_a_USB_Flash_Drive 1] syslinux 3.35 should be used to get support for fat32, maybe that is the problem since edgy ships with 3.11. According to the changelog 3.35 only seems to introduce support for subdirectories. sh: mcopy: command not found
syslinux: failed to create ldlinux.sys
eject /dev/sdX
Installing Ubuntu on USB pendrive using Windows
Preparing the USB pendrive
Installing Dapper or Edgy on the USB pendrive
Making the pendrive bootable
Comments
I had to do this to get it to boot - Krishnan locale=de_DE bootkbd=de console-setup/layoutcode=de console-setup/variantcode=nodeadkeys
lilo -M /dev/sdX
sudo apt-get install mbr
sudo install-mbr /dev/sdX