## Floppy/CD/DVD drives ### Creating ISOs The venerable `dd` is fantastic for this. Let's say your device is `/dev/cdrom`: dd if=/dev/cdrom of=new_cdrom.iso This will create an ISO9660-compliant image. ### Mounting ISOs ISO files can be [loop mounted](http://en.wikipedia.org/wiki/Loop_device) like so: mount -o loop new_cdrom.iso /mount/point ## A random bunch of files/directories For this example, I want to create an ISO9660-compliant image of a directory, `/home/nikhil/Documents`: mkisofs -o /home/nikhil/Documents_backup.iso /home/nikhil/Documents **Important**: `mkisofs` can only create ISOs from directory trees that are **a maximum of 6 levels deep**! Any more and it will croak. ## Hard Drives This is quite tricky. You might want to consider [Mondo](http://www.mondorescue.org/) for its awesomeness. While it *does* create ISOs, their contents are compressed and divvied up into many separate files. If you want an 'image' that you can carry around and mount, read on. ### Using `dd` Let's say your HDD is labeled `/dev/sdb`. You can use `dd` to create a block-by-block replica image of this drive like so: dd if=/dev/sdb of=hard_drive_backup.img conv=sync,noerror Simple, eh? What's tricky is that `dd` will go through **all** blocks, even the unallocated ones. This means that if you have a 300GB drive with just 10GB of data, you're going to get an image that's 300GB in size (can you see why Mondo or Ghost make more sense?) The `conv=sync,noerror` will tell `dd` to write 'something' to the image in case it encounters a bad block. #### Speeding up the process We could use a bigger block size. Using the default 512-byte block size can slow things down considerably. dd if=/dev/sdb of=hard_drive_backup.img conv=sync,noerror bs=64K #### Making the process space-efficient We could *also* use good 'ol `gzip` or `bzip2` like so: dd if=/dev/sdb conv=sync,noerror bs=64K | gzip -c > hard_drive_backup.img.gz ### Mounting a `dd` image The resultant image from the previous steps is absolutely *not* ISO9660-compliant. Any attempts to mount it as such might result in mild embarrassment. To use the image, try `fdisk`: ```bash [user@localhost mondo_archives]# fdisk -ul hard_drive_backup.img last_lba(): I don't know how to handle files with mode 81a4 You must set cylinders. You can do this from the extra functions menu. Disk hard_drive_backup.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors Units = sectors of 1 * 512 = 512 bytes               Device Boot           Start        End   Blocks   Id  System hard_drive_backup.disk1             63      208844   104391   83  Linux hard_drive_backup.disk2          208845    2313359  1052257+  82  Linux swap / Solaris hard_drive_backup.disk3 2313360 78156224 37921432+ 83 Linux Partition 3 has different physical/logical endings:     phys=(1023, 254, 63) logical=(4864, 254, 63) ``` #### The tricky part To mount the third partition (you know, the one with all the data on it), you need some quick arithmetic: Multiply the starting cylinder by the block size and use it as the offset for the `mount` command. **For example**: In the output above, the offset would be `512 x 2313360 = 1184440320`. You would then use this value like so: mount -o loop,offset=1184440320 hard_drive_backup.img /mount/point