Sunday, 9 March 2014

Not enough room to defragment files? Try Refresher.cmd

Easy2Boot and many grub4dos bootable USB drives require that the ISO files are contiguous (i.e. the ISO file occupies sequential clusters on the drive).

If your Flash drive is almost full, you may find that you cannot defragment a large ISO that you have just copied over to it. This is because there is not enough free space left on the drive.

By the way: If there is enough free space on an NTFS drive and you still cannot make a very large file contiguous, see my previous blog post here.

For instance, if you have a 16GB USB Flash drive with 3GB of free space, you cannot defragment and make contiguous a file that is larger than 3GB.

Even if there was enough free space, the defrag of the ISO file could take a very long time.
If your USB Flash drive has reached this stage, it is best and quickest to reformat it. If you want to keep all the files on it, then you obviously need to make a backup first.

You also stand a better chance of having all files contiguus, if you copy over the large ISOs first, before the rest of the smaller files.

To simplify this process, I wrote a Windows batch file to automate this. Just drag-and-drop your USB drive icon onto the Refresher.cmd file (keep it on your Desktop for convenience) and it will guide you through process of:

1. Backing up all files
2. Formatting the USB volume (choose NTFS or FAT32)
3. Copying back to the USB drive all the large >500MB files first
4. Copying back to the USB drive the rest (<500MB) of the files
5. Copying back the empty folders
6. Comparing the file count in Step 1 with that of the USB drive now.
7. Deleting the backup folder

If a folder is chosen instead of a drive, then instead of formatting the drive volume, the Windows 'rd' command is used to delete the folder and all sub-folders, and then the original files are copied back. In practise, this rarely defragments the files however. You will be far more successful if you reformat the whole drive by choosing the Drive icon as shown above.

To use Refresher.cmd, copy the Refresher.cmd file to your Windows Desktop, then drag-and-drop the drive icon of your USB drive onto the Refresher.cmd Desktop icon (or type Refresh N: from a Windows command prompt console if you need Admin rights). Then just choose either NTFS or FAT32 to reformat the drive when prompted. At this point you can reformat using RMPrepUSB if you wish and just Skip the Windows format. Note that RMPrepUSB partitions and formats, it is not a format-only tool. If you have a multi-partition USB Hard disk, you will have to use the Windows format tool as the contents of only one drive volume letter is backed up by Refresher.cmd.

User input shown in red squares.

WARNING: As this is quite a powerful batch file, please take care when using it. If the contents of the drive being 'Refreshed' are very valuable, make a backup first (you should have one anyway!). The batch file assumes you will press CTRL+C if you see anything wrong. The temporary backup folder will be in the same folder as the Refresher.cmd file, so make sure there is enough room on the hard disk. A new backup folder is made (and deleted) each time.

Note that Windows format will remove the grub4dos boot loader from the Partition Boot Record (PBR). If you find that the USB drive no longer boots after running Refresher.cmd, use RMPrepUSB - grub4dos Install and choose 'No' for a PBR install of grub4dos. This should fix the boot problem. Then test that it boots using QEMU or VBox or test on a real system. To avoid losing the PBR code each time you use Refresher.cmd, install grub4dos to the MBR instead.

Download Refresh.zip