Here's some info on my planning process for setting up these sticks, and some instructions.<br>Have Fun<br>Ken<br><br>Bootable USB Stick Setup<br><br>Of course, the Ubuntu "System/Administration/USB Startup Disk Creator" menu<br>
item will create a "Live USB" stick which will (eventually) boot Linux, but a<br>much quicker booting Linux system may be created by installing directly to a<br>4G stick.  A little initial preparation of the stick should allow for<br>
increased life and snappier performance.  <br><br>Assumptions<br><br> 1) The USB stick will be set up from a running Linux system, and standard<br>Linux/Hurd tools are available (fdisk, cfdisk, mke2fs, cp, df, dmesg, free,<br>
mount, tail, vi, ... )<br> 2)The USB stick will be the target of a live media install.<br> 3) The install system can access a usb drive, but does not have to be able<br>to boot from one.<br> 4) Explicit instructions below assume a Gnome desktop -- use the equivalent<br>
actions for your system.<br> 5) Not all usb sticks/cards have equal performance.  I have used Kingston<br>Datatraveler sticks, Kingston SD4 cards, and HP sticks with good success. <br>Check the packaging or vendor web site for any indication of the media speed.<br>
The cards usually indicate class 4 (4MB/sec) or class 6 (6MB/sec). I seldom<br>see any speed indications on the usb sticks.  Kingston's web site indicated<br>the Datatraveler stick reads at 10MB/sec and writes at 5 MB/sec (just over<br>
class 5).   <a href="http://en.wikipedia.org/wiki/Secure_Digital#Speeds">http://en.wikipedia.org/wiki/Secure_Digital#Speeds</a> has the table<br>mapping the speed to class.  Notice that read speeds are faster than<br>write speeds, and ideally, the vendor will report both.<br>
 6) The flash memory erase block size is 128k.  This may actually be 256k, but<br>I don't know how to tell.  The larger (8G+) sticks may have the larger size.<br><br>Planning<br><br>Flash media has a limited number of writes, and blocks are grouped -- a<br>
write of one block forces all the blocks in the group to be rewritten. Some<br>thought is needed to position partitions and filesystem parts to minimize<br>unnecessary group rewrites.  Space is a critical resource on these USB sticks,<br>
so consider forgoing the standard /boot and swap partitions.  A standard<br>Ubuntu installation will fit nicely on a 4G card or stick.  <br><br>Historically, a /boot partition allowed positioning the kernel within the<br>
first 1024 cylinders of a disk for BIOSes whose address space was limited. <br>Some older machines may still need this.  If the 1024 limit is not a factor<br>on your machine, then doing away with a boot partition will not waste the<br>
unused space in such a partition.  If you are setting up a generic stick which<br>will boot in the maximum number of (older) machines, maybe you do want a boot<br>partition for the first partition.  The below assumes no separate boot<br>
partition is needed.<br><br>Swap space simulates having more, slow, memory on your computer.<br>It may not even be needed, but if it is, may be added later as a<br>file or as a separate USB stick. If you are on a Linux/HURD machine<br>
with similar memory to the one on which you will be running the USB<br>stick, check swap usage with "free", "swapon -s", or "cat /proc/swap".<br>Newer machines probably have memory to spare, so seeing no<br>
swap activity is typical.  If swap activity is seen, then decide if<br>the  convenience of having swap on the usb boot stick is worth the space and<br>possibly shortened lifespan of the stick (assuming the writes to the swap<br>
device wear the stick out before anything else).  The alternative solution<br>is to use a second small (cheap) 0.5-2G stick for swap.  This may<br>extend the life of the larger (more expensive) boot stick.<br><br>The stick partition start (and end) will be selected to be aligned with<br>
the 128k flash block groups. I use a non-journaling filesystem, ext2,<br>the with block size set to 4096 (default) and the groupsize set to 32768<br>(also the default).  <br><br> <br>Partitioning the USB stick<br><br>Insert the USB stick drive (or memory card). If the media is automounted,<br>
an icon will appear on the desktop, and a window may open.  Use df, mount,<br>or dmesg to determine the device:<br><br>  df<br>  Filesystem           1K-blocks      Used Available Use% Mounted on<br>  /dev/sdb7             14112620   6632504   6763220  50% /<br>
  ...<br>  /dev/sdc1              3969024        32   3968992   1% /media/disk<br><br>or<br><br>  mount<br>  ...<br>  /dev/sdc1 on /media/disk type vfat (rw,nosuid,nodev,uhelper=hal,shortname=mixed,uid=1000,utf8,umask=077,flush)<br>
<br>See below for the dmesg information.<br><br>close the window if one opened at the mount, and unmount the media (the icon<br>should disappear).<br> -- right click on the drive desktop icon, then select  "safely remove" if present, or<br>
"Unmount volume" if not.<br><br>If the automount does not run (it is a configuration item), get the device<br>from the system messages.<br> Run dmesg to see what device your drive was (in the below example it was sdc).<br>
 -- dmesg |tail -23<br>...dmesg output for a USB stick:<br>[ 5524.328108] usb 1-3: new high speed USB device using ehci_hcd and address 5<br>[ 5524.463443] usb 1-3: configuration #1 chosen from 1 choice<br>[ 5524.464185] scsi6 : SCSI emulation for USB Mass Storage devices<br>
[ 5524.464674] usb-storage: device found at 5<br>[ 5524.464679] usb-storage: waiting for device to settle before scanning<br>[ 5529.464419] usb-storage: device scan complete<br>[ 5529.466864] scsi 6:0:0:0: Direct-Access     Multi    Flash Reader     1.00 PQ: 0 ANSI: 0<br>
[ 5529.797821] sd 6:0:0:0: [sdc] 7954432 512-byte hardware sectors: (4.07 GB/3.79 GiB)<br>[ 5529.799666] sd 6:0:0:0: [sdc] Write Protect is off<br>[ 5529.799672] sd 6:0:0:0: [sdc] Mode Sense: 03 00 00 00<br>[ 5529.799678] sd 6:0:0:0: [sdc] Assuming drive cache: write through<br>
[ 5529.804687] sd 6:0:0:0: [sdc] 7954432 512-byte hardware sectors: (4.07 GB/3.79 GiB)<br>[ 5529.808673] sd 6:0:0:0: [sdc] Write Protect is off<br>[ 5529.808679] sd 6:0:0:0: [sdc] Mode Sense: 03 00 00 00<br>[ 5529.808685] sd 6:0:0:0: [sdc] Assuming drive cache: write through<br>
[ 5529.808698]  sdc: sdc1<br>[ 5529.810505] sd 6:0:0:0: [sdc] Attached SCSI removable disk<br>[ 5529.810662] sd 6:0:0:0: Attached scsi generic sg3 type 0<br><br>...dmesg output for a directly inserted memory card (automounts :<br>
[ 4833.619838] mmc0: new SD card at address e624<br>[ 4833.646052] mmcblk0: mmc0:e624 SD02G 1.89 GiB <br>[ 4833.646179]  mmcblk0: p1<br><br><br>(The below assumes sdc for the device -- make sure you have the correct<br>device for your system.)<br>
<br>The information from the below link Jim mentioned:<br><a href="http://wiki.laptop.org/go/How_to_Damage_a_FLASH_Storage_Device">http://wiki.laptop.org/go/How_to_Damage_a_FLASH_Storage_Device</a><br>resulted in the selection of the partition parameters.  I guessed my<br>
4G devices were of the 128k write block instead of the 256k block variety,<br>but I haven't figured out how to tell.<br><br>Examine the device to determine the default parameters and partitioning. a 4G<br>Kingston stick had h=5 s=32 and the partition start at 81920 sectors of 512<br>
bytes -- about a 40 meg offset, and not even a power of 2.  I choose to use<br>h=4, s=16 and partition start at 8192, so I zeroed the existing partition<br>table and reset the heads and sectors/track. This may be done within fdisk<br>
when the partition is made, or on the command line:<br> cfdisk -z -h 4 -s 16 /dev/your_drive_here<br><br>Note, the above command performed as I expected on a 4G sd card inserted in<br>mmcblk0, but several 4G usb sticks failed to get the expected h and s.  This<br>
unexpected resetting of h and s has also occurred when using fdisk. Reset<br>them in fdisk when setting up the partition if necessary.  See the below<br>output. There appears to be some buffering which does not get flushed as<br>
expected, as I have seen this sort of problem frequently.  Try removing the<br>media right after exiting fdisk, and reinserting. Check with fdisk to ensure<br>the proper number of heads and sectors/track is present, and quit without<br>
saving.  Resolve this before making the filesystem, because it may be the<br>wrong size, and may be too small to hold the installation.  <br><br>If you decide to make a swap area on the usb stick, figure out its size in<br>
sectors so you can make the root (first partition) smaller by that amount.<br>With fdisk, the m command is for help, which lists all the commands.<br>Ensure that the heads and sectors are still set, or set them now, in the <br>
x=advanced section of commands (h for heads, s for sectors, r to return to <br>main menu).<br>   $ sudo fdisk /dev/sdc<br>   [sudo] password for user: <br>If not done with cfdsk, set the heads and sectors/track<br>   x (advanced commands)<br>
   h (set the heads to 4)<br>   s (set the sectors/track to 16)<br>   r (return to main menu)<br><br>Set the units to sectors (which start at 0) with the u command,<br>then make a root partition:<br>   u (toggle units to sectors from cylinders)<br>
<br>Delete the old partition if not already done with cfdisk<br>   d (delete the existing partition)<br><br>Create a new partition<br>   n ( new partition),<br>   p (primary partition),<br>   1 (first primary),<br>    8192 (start sector, 4M and a power of 2),<br>
    XXXX (end sector at end of the available sectors as one less than a<br>          multiple of 8192) (which may be the last available sector, <br>          or a few sectors back, depending on the stick, or back by the<br>
          swap size in sectors.<br><br>The type of the partition should default to linux type -- check with p to print<br>out the partition information.<br>Set it explicitly with the t command with type = 83.<br>Make it bootable:<br>
   a (select first partition)<br><br>If you want a swap partition, make it now as the next primary.<br>   n (new partition)<br>   p (primary)<br>   2 (number 2)<br>   XXXX+1 (starting on the next free sector beyond the end of the first, which<br>
           should be a multiple of 8192.<br>   YYYY (end of the swap partition, (as one less than a multiple of 8192),<br><br>Set its type to 82, with the t command.<br>   t (Set the type)<br>   2 (partition 2)<br>   82 (swap type)<br>
<br>Exit fdisk saving the new configuration:<br>   w (write out the new info, and exit)<br><br>Example, checking with fdisk after setting everything:<br>$ sudo fdisk /dev/sdc<br>[sudo] password for user: <br><br>The number of cylinders for this disk is set to 122496.<br>
There is nothing wrong with that, but this is larger than 1024,<br>and could in certain setups cause problems with:<br>1) software that runs at boot time (e.g., old versions of LILO)<br>2) booting and partitioning software from other OSs<br>
   (e.g., DOS FDISK, OS/2 FDISK)<br><br>Command (m for help): p<br><br>Disk /dev/sdc: 4013 MB, 4013948928 bytes<br>4 heads, 16 sectors/track, 122496 cylinders<br>Units = cylinders of 64 * 512 = 32768 bytes<br>Disk identifier: 0x00000000<br>
<br>   Device Boot      Start         End      Blocks   Id  System<br>/dev/sdc1             129      122496     3915776   83  Linux<br><br>Command (m for help): u<br>Changing display/entry units to sectors<br><br>Command (m for help): p<br>
<br>Disk /dev/sdc: 4013 MB, 4013948928 bytes<br>4 heads, 16 sectors/track, 122496 cylinders, total 7839744 sectors<br>Units = sectors of 1 * 512 = 512 bytes<br>Disk identifier: 0x00000000<br><br>   Device Boot      Start         End      Blocks   Id  System<br>
/dev/sdc1            8192     7839743     3915776   83  Linux<br><br>Command (m for help): q<br><br>Make the filesystem now:<br>sudo mkfs.ext2 -b 4096 -g 32768 /dev/sdc1<br>  mke2fs 1.41.4 (27-Jan-2009)<br>  Filesystem label=<br>
  OS type: Linux<br>  Block size=4096 (log=2)<br>  Fragment size=4096 (log=2)<br>  244800 inodes, 978944 blocks<br>  48947 blocks (5.00%) reserved for the super user<br>  First data block=0<br>  Maximum filesystem blocks=1002438656<br>
  30 block groups<br>  32768 blocks per group, 32768 fragments per group<br>  8160 inodes per group<br>  Superblock backups stored on blocks: <br>    32768, 98304, 163840, 229376, 294912, 819200, 884736<br><br>  Writing inode tables: done                            <br>
  Writing superblocks and filesystem accounting information: done<br><br>  This filesystem will be automatically checked every 25 mounts or<br>  180 days, whichever comes first.  Use tune2fs -c or -i to override.<br><br>The usb stick or card is now ready for a standard installation from<br>
a live media.  Reject all offers to repartition or format the card,<br>so what was set up above will be used.  Continue through all warnings<br>about missing swap, or illegal attributes on the filesystem.  <br><br>Installation<br>
<br>Boot your install media, and perform an install to the stick which you set<br>up.  If your install media is also a USB stick, and you have problems booting<br>with two USB sticks present, you might need to insert the target stick after<br>
the boot starts.  There will be several warnings of problems with no swap<br>space (assuming you have no swap partition), and invalid file attributes, all<br>of which may be ignored.  Do not checkoff the format box for the partition,<br>
since you have already created the filesystem with your selected attributes.<br>Always check the location grub will put its boot block -- click on the<br>Advanced button after partitioning.  It needs to be the target stick, and it<br>
better be a real device, /dev/sdx,  not hd0 (Karmic bug).  Regardless of your<br>install media, hd0 is most likely the Windows hard disk, and that is not<br>a place most people want to rewrite.<br><br>After installation completes, remove the install media, check that the boot<br>
order has the USB stick before the hard disk, and try booting from the stick.<br>First order of business is to edit the /etc/fstab file and change the<br>"relatime" to "noatime" on the line starting "UUID=" followed by a single<br>
"/".  This change prevents the "access time" for files from getting written<br>into the file system, and remember, we are trying to minimize writes.<br><br>With only 4G total, you need to be more aware of buildup of unwanted files.<br>
After every update run, all the package files are left in<br>/var/cache/apt/archives.  Lots of old copies of system log files are also<br>kept.  There are options to limit the number of old copies of log files,<br>but check out the Optimization post first.  Writing the log files<br>
to a ramdisk means they do not build up over time.<br><br>After everything has been set up, and works, consider moving the most<br>active write directories (like /tmp and /var/log) onto a ramdisk (See<br>the Optimizing post).<br>
<br>Ken Shaffer<br><br>