Monday, 16 September 2013

Slax 7.0 with persistence for Easy2Boot

I spent a few hours today trying to get Slax 7 working with persistence on an NTFS USB drive.
It seems this does not work. I tried various switches/cheat codes but the closest I came was to make an ext2 filesystem file and copy the ISO contents to the mounted ext2 filesystem - then use a grub4dos menu and the partnew command to map the ext2 file as partition 3 and then boot Slax from that, this almost worked, persistence was set up on the ext2 volume and it almost fully booted to the Desktop but got some errors on the very last stage and stopped with I/O errors.

Here are the conclusions I came to:
  • Slax recognises the source folder if it contains any *.sb file (the  .sb file can be any name but there must be at least one present in the 'source' folder that it looks at) and then mounts that folder. The folder path can be set using the from= parameter which can be the path to the source ISO file (in which case it will be read-only and so persistence will not be enabled), or the path to the source files which have been extracted onto a disk drive (which is what we need in our case). Slax then looks for a folder called changes under this folder. If it finds one, it tries to create a changes.dat file for persistence. If this fails then persistence is not enabled.
    Therefore - whatever source is used, Slax tries to create the persistence file on the same drive as the source .sb module files.
  • Slax seems to fail to create a changes.dat folder on an NTFS volume - therefore your source boot files must be on a FAT32 (or maybe ext2/3/4) volume. It will boot from an NTFS volume (via ISO or flat files), but it won't enable persistence.
  • Using the toram switch (to run Slax in memory) means that persistence will be temporarily disabled until it is run without the toram parameter.
  • The changes=  cheat code did not seem to affect anything??
In the end, this is the grub4dos .mnu file I came up with for Easy2Boot. It can be adapted for different versions of Slax each with a different persistence file by changing the slaxsrc folder location.

# Extract the iso \slax folder using 7Zip to \_ISO\MAINMENU\Linux and rename it to slax708_32  
#   (so, for example, the first file will be at \_ISO\MAINMENU\Linux\slax708_32\01-core.sb)
# Copy this .mnu file to \_ISO\MAINMENU\Linux
# The  \_ISO\MAINMENU\Linux\slax708_32\changes   folder must exist for persistence to activate
# Persistence does not work if the slax source folder is on an NTFS or read-only volume!

iftitle [if exist %MFOLDER%/Linux/slax708_32/01-core.sb] SLAX 7.0.8 32-bit persistent \n Run Slax with persistent changes (FAT32 ONLY)
if not exist %MFOLDER%/Linux/slax708_32/changes/changes.dat echo Info: Persistence file is not yet present... && pause --wait=2
set slaxsrc=%MFOLDER%/Linux/slax708_32
kernel %slaxsrc%/boot/vmlinuz vga=773 rw slax.flags=perch,xmode  from=%slaxsrc%
initrd %slaxsrc%/boot/initrfs.img