Hi.

I have been using Debian Live for many years. Most of the time I load the image with the live system into the memory of computer using the "toram" option. Here I am posting a patch file /lib/live/boot/9990-toram-todisk.sh that slightly modifies the behavior of "toram" as follows.

- When "toram" is selected, only the squashfs images that are listed in the 
filesystem.module file are loaded into the system memory, not the entire disk as it is 
now. (These files are then mounted as an overlay to /.)

- The size of the temporary filesystem (tmpfs) is set according to the total 
size of the squashfs images being loaded.

- The device file name of the temporary filesystem is changed from "/dev/shm" to 
"tmpfs", because the original choice is wrong (at least nowadays) and causes error 
messages when the system runs.


Regards

Vladimir Smelhaus


--

--- 9990-toram-todisk.sh        2023-01-31 00:00:00.000000000 +0100
+++ 9990-toram-todisk.sh.new    2023-11-18 19:20:49.510912055 +0100
@@ -10,13 +9,21 @@

        if [ -z "${MODULETORAM}" ]
        then
-               size=$(fs_size "" ${copyfrom}/ "used")
+           if [ -e 
${copyfrom}/${LIVE_MEDIA_PATH}/"filesystem.${MODULE}.module" ]
+           then
+               size=$(cd ${copyfrom}/${LIVE_MEDIA_PATH} ; ls -l $(cat 
filesystem.${MODULE}.module) | awk '{ sum += $5 } END { sum = sum / 1024 + 512 
;  print sum }')
+           elif [ -e ${copyfrom}/${LIVE_MEDIA_PATH}/"${MODULE}.module" ]
+           then
+               size=$(cd ${copyfrom}/${LIVE_MEDIA_PATH} ; ls -l $(cat 
${MODULE}.module) | awk '{ sum += $5 } END { sum = sum / 1024 + 512 ;  print 
sum }')
+           else
+               size=$(ls -l ${copyfrom}/${LIVE_MEDIA_PATH}/ | awk '{ sum += $5 
} END { sum = sum / 1024 + 512 ;  print sum }')
+           fi
        else
                MODULETORAMFILE="${copyfrom}/${LIVE_MEDIA_PATH}/${MODULETORAM}"

                if [ -f "${MODULETORAMFILE}" ]
                then
-                       size=$( expr $(ls -la ${MODULETORAMFILE} | awk '{print 
$5}') / 1024 + 5000 )
+                       size=$(ls -l ${MODULETORAMFILE} | awk '{ sum += $5 } 
END { sum = sum / 1024 + 512 ;  print sum }')
                else
                        log_warning_msg "Error: toram-module ${MODULETORAM} 
(${MODULETORAMFILE}) could not be read."
                        return 1
@@ -30,7 +37,7 @@
                mount_options="-o size=${size}k"
                free_string="memory"
                fstype="tmpfs"
-               dev="/dev/shm"
+               dev="tmpfs"
        else
                # it should be a writable block device
                if [ -b "${copytodev}" ]
@@ -81,19 +87,60 @@
                                cp ${MODULETORAMFILE} ${copyto} # copy only the 
filesystem module
                        fi
                else
+                       image_directory="${copyfrom}/${LIVE_MEDIA_PATH}"
+                       if [ -n "${MODULE}" ]
+                       then
+                               image_directory="${copyfrom}/${LIVE_MEDIA_PATH}"
+                               image_string=""
+                               # Read image names from ${MODULE}.module if it 
exists
+                               if [ -e 
"${image_directory}/filesystem.${MODULE}.module" ]
+                               then
+                                       for IMAGE in $(cat 
${image_directory}/filesystem.${MODULE}.module)
+                                       do
+                                               image_string="${image_string} 
${IMAGE}"
+                                       done
+                               elif [ -e "${image_directory}/${MODULE}.module" 
]
+                               then
+                                       for IMAGE in $(cat 
${image_directory}/${MODULE}.module)
+                                       do
+                                               image_string="${image_string} 
${IMAGE}"
+                                       done
+                               else
+                                       for IMAGE in $(ls ${image_directory}/ | grep -v 
"vmlinuz\|initrd\|\.packages" )
+                                       do
+                                               image_string="${image_string} 
${IMAGE}"
+                                       done
+                               fi
+                               echo " * Copying modules to RAM" 1>/dev/console
+                               mkdir -p ${copyto}/${LIVE_MEDIA_PATH}
+                               if [ -x /bin/rsync ]
+                               then
+                                       for modulefile in ${image_string}
+                                       do
+                                               # echo " ..... ${modulefile}" 
1>/dev/console
+                                               rsync --progress 
${copyfrom}/${LIVE_MEDIA_PATH}/${modulefile} ${copyto}/${LIVE_MEDIA_PATH} 
1>/dev/console
+                                       done
+                               else
+                                       for modulefile in ${image_string}
+                                       do
+                                               # echo " ..... ${modulefile}" 
1>/dev/console
+                                               cp -a 
${copyfrom}/${LIVE_MEDIA_PATH}/${modulefile} ${copyto}/${LIVE_MEDIA_PATH}/
+                                       done
+                               fi
+                       else
                        if [ -x /bin/rsync ]
                        then
-                               echo " * Copying whole medium to RAM" 
1>/dev/console
-                               rsync -a --progress ${copyfrom}/* ${copyto} 
1>/dev/console  # "cp -a" from busybox also copies hidden files
+                                       echo " * Copying whole live_media_path to 
RAM" 1>/dev/console
+                                       rsync --progress ${copyfrom}/${LIVE_MEDIA_PATH}/* 
${copyto}/${LIVE_MEDIA_PATH} 1>/dev/console  # "cp -a" from busybox also copies 
hidden files
                        else
-                               cp -a ${copyfrom}/* ${copyto}/
+                                       cp -a ${copyfrom}/${LIVE_MEDIA_PATH}/* 
${copyto}/${LIVE_MEDIA_PATH}/
                                if [ -e ${copyfrom}/${LIVE_MEDIA_PATH}/.disk ]
                                then
                                        cp -a 
${copyfrom}/${LIVE_MEDIA_PATH}/.disk ${copyto}
                                fi
                        fi
                fi
-
+               fi
                umount ${copyfrom}
                mount -r -o move ${copyto} ${copyfrom}
        fi

Reply via email to