我可以加载到 RAM 中的发行版吗?

我可以加载到 RAM 中的发行版吗?

是否有一个修改过的 Ubuntu 版本,我可以选择在启动时将其加载到 RAM 中?有点像 LiveCD,但当我选择从磁盘启动时,可以轻松修改(即:我可以安装东西)。

这个想法是将它安装到 USB 驱动器上。我知道有相似的东西但 slax 在许多方面都存在不足。“完整”版本的 Ubuntu 会更好。

LiveUSB 安装似乎非常接近我想要的,但显然我必须选择在安装时它是否持久。我希望每次启动时都能选择这一点。

答案1

有一个参数toram,您可以在启动时将其提供给最新的 Ubuntu livecd,最新的意思是 10.04 或更新版本。这会将所有内容加载到 RAM(假设您有足够的 RAM 来容纳它),之后您可以移除 CD(或 USB 棒)并继续正常使用 Ubuntu。

答案2

这个答案包含我用来回答不同问题的文本,但它放在这里是为了说明并提供视觉指南,您可能已经有了。

在大多数情况下,Ubuntu(几乎任何版本)都可以在实时会话中完美运行,并且放置在具有“持久”数据选项的 USB 中,您将获得所希望的一切。

问题在于,当您拔下 USB 内存/硬盘时,磁盘将被卸载,这样 - 即使您重新插入,USB 也将无法访问,除非您采取措施将挂载点恢复到 USB。

尽管如此,即使您拔下或卸载 USB,所有正在运行的应用程序仍将继续运行。

一个好主意是确保在启动时加载所有需要的进程,这将确保在您拔下 USB 时进程正在运行。

我自己就用过几个应用程序来实现这一点。我正在使用以色列混音团队发行版已经预先加载了许多应用程序,这样,当应用程序加载完成后,我可以拔下 USB 存储器,程序仍会继续运行。

我还没有尝试过需要大量资源的程序,但就我而言:

  1. 文件共享继续工作并共享文件,即使这些文件位于固定硬盘驱动器中,而不是 USB 文件系统中。
  2. VLC 继续播放电台广播,没有任何问题,
  3. Yakuake 继续工作并按照我的要求做,除非我希望从拔出的 USB 中得到一些东西
  4. Google Chrome 继续浏览网页并允许我做一些事情,例如监控 IP 摄像头。

唯一的问题是,当我尝试插入 USB 以运行新应用程序时,当前运行的操作系统实例无法实现这一点,因此我必须重新启动才能启动启动时加载的应用程序之外的新应用程序。

另一个好主意是使用“系统/首选项/启动应用程序”首选项窗口中的“记住当前正在运行的应用程序”功能。该功能(启用后)将“记住”您正在使用的所有程序,并在重新启动后或一天内第一次启动系统时重新打开它们。

如果您希望从此功能中删除应用程序,只需关闭它并转到此功能并按“记住当前正在运行的应用程序”以刷新下次将打开的程序列表。

为了说明,此处放置了一个屏幕截图。

在此处输入图片描述

然后,考虑到我上面所说的,值得进行下一个实验:

USB 启动盘指南:

首先,您可以使用 GUI 制作 USB 启动盘,这将简化任务。不幸的是,这只能在 ubuntu 系统内完成,无论是 Live 会话还是已安装系统都可以完成此操作。

我知道人们可能会建议您遵循其他一些成功的程序,但就我而言,我将讨论“启动盘创建器”。

在一些 Linux 发行版中,你可以在“系统/管理/启动盘创建器”中找到此工具。我强烈建议你尝试以色列混音团队,这是我使用的,但是几乎任何发行版都应该具有此工具。

这里放置了一个屏幕截图,以便您查看最近打开该工具时的情况:

在此处输入图片描述

在实际会话中尝试之前,请确保您已经下载了您喜欢的 Ubuntu 发行版。

在“制作启动盘”窗口中,单击右上角的“其他”按钮,选择您之前下载的 Linux 发行版 iso,并已插入要用于此过程的 USB。“.iso”和 USB 都应出现在各自的区域中。

在此处输入图片描述

注意:如果您要使用预先刻录的 DVD 进行此过程,只需将 DVD 插入托盘,它将被列在源列表中,如下图所示:

在此处输入图片描述

就我而言,我的 4 GB USB 内存已经安装了实时会话,我首先要做的是单击“擦除磁盘”以便为系统收集足够的空间,之后我将获得数据处理的选项,我将选择要用于保存数据和配置(如安装程序等)的磁盘大小。我将为此使用 1.4 GB。

在此处输入图片描述

现在我单击“制作启动盘”,复制过程即将开始。

在此处输入图片描述

之后还应该安装 GRUB。不幸的是,GRUB 安装过程太快了,所以我来不及拍照。

持久文件将被创建。

在此处输入图片描述 在此处输入图片描述

然后您就可以从该 USB 启动了。请注意,您可以使用 USB 存储器或 USB 硬盘驱动器,即使使用适配器、IDE 转 USB 或 SATA 转 USB 也是如此。

在此处输入图片描述

这应该可以如你所愿,至少结果让我感到满意。

祝你好运!

答案3

我一直在研究这个问题。 livecd-to-usb 设置对我来说效果不太好。我为 ubuntu server 11.04 创建了一个“本地”脚本的修改版本。应用补丁后(或者手动编辑本地脚本并进行更改),您只需要 update-iniramfs -u,并使用“ramboot”内核参数启动 linux,您的系统就会将普通的 linux 系统完全启动到 ram 中。进行持久更改就像将 ramdisk 文件系统 rsync 到启动设备上一样简单。在我的情况下,是一个 usb-pen,但它可以是任何合适的可启动块设备。当然,您可以重新启动而不使用“ramboot”参数并进行更改,因为您将回到块设备上,然后再次重新启动到 ramboot,但没有必要,除非它非常清楚地表明您处于哪种状态。

0)“须藤苏”

(您不必执行此步骤,但您需要确保对所有可能需要它的操作执行 sudo)当我进行此类系统修改时,我倾向于只“sudo su”。

1)下载或复制/粘贴此补丁的内容到文件中:

“/usr/share/initramfs-tools/scripts/ramboot.patch”——无法包含 pastebin,新手。 包含在末尾

2)cd /usr/share/initramfs-tools/scripts; cp local local.bak #以防万一

3)修补本地ramboot.patch

这会将 ramboot.patch 中定义的更改应用于您的本地脚本。/usr/share/initramfs-tools/scripts/local 是常规启动脚本配置器,用于配置 init 的 rootmount 功能。该补丁由“diff local local.modified > ramboot.patch”创建

4)cp /bin/busybox /usr/lib/initramfs-tools/bin/busybox

这会使您的 initramfs.img 文件比正常情况下略大,但差异约为 1.5 兆字节,并不大。我想要 df -h 的可读输出,但精简版 busybox 的 df 不支持。如果您关心保留 300k 版本的 busybox,请确保 cp /usr/lib/initramfs-tools/bin/busybox /small_busybox,然后在第 5 步之后将其恢复到原来的名称/位置。

5)更新-initramfs -u

6)选修的您很可能想要创建一个 /etc/grub.d/06_custom,其中包含内核参数“ramboot”以及暗示该参数的标题。

(或者 40_custom 如果您希望 ramboot 菜单项位于列表末尾而不是顶部)例如 06_custom——无法包含 pastebin 链接,新手在这里。

您需要将正确的内核版本和 initrd.img 版本以及根设备的文件系统 uuid 填写到这个 06_custom 文件中,否则它将不起作用。

您可以通过在 /boot/ 中使用“ls /boot”查找来找到 kernel/initrd.img 信息,以下命令应输出您的根文件系统 uuid:

blkid|grep`df/|grep dev|cut-d''-f1`|cut-d'“'-f2

一旦您的 06_custom 具有正确的 uuid、内核和 initrm.img 路径和文件名,您就可以更新 grub,并尝试一下!

7)update-grub 将自定义条目添加到您的 /boot/grub/grub.cfg 文件中。

注意:我的系统很小,根分区仅包含大约 1.2g 的数据要复制到 RAM 中。如果您的系统没有足够的空闲内存,此脚本将安全地正常启动(或至少尝试!)我发现 remastersys 和持久 usb-casper 安装并不完全适合我的需求。

目前,它用于 scst-iscsi 服务器上,它唯一的缺点是,如果您不保存对系统的更改,并且断电或发生其他错误(init 0,哦不,我忘了将我的工作签回 subversion!灾难!),那么 ramdisk 系统不会使任何东西持久。我还没有在这个配置上花太多时间,但由于我已经四处寻找这类信息,发现很多方法并不完全合适,或者只是让我感到困惑,所以我想把它放在那里。也许它可以省去一些人的麻烦 *8^)

remastersys 和 root-ro 脚本帮助我达到了这一点。它们都很有用,但项目不同。remastersys 打包了您正在运行的系统,既可以部署/克隆,也可以作为系统的 live.iso 版本运行,或者我猜是备份。root-ro 是一个双 ramdisk 块设备文件系统,以联合方式安装,ramdisk 可写,blockdev 只读。然后要同步,您只需重新安装 blockdev rw,rsync 一次分支到另一个,然后将其重新安装为 ro。这几乎是完美的,但我希望 usb-pen 可以卸载/能够被移除,并且系统将保持其状态,这个解决方案就是这样做的。

root-ro 页面底部 --https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash

重制系统——http://www.geekconnection.org/remastersys/ubuntu.html

您可以轻松地从 ramboot(安装在 / 上)和它在 ram 中运行时最初来自的磁盘/设备 rsync 或复制 -r,以使该更改“持久”。我保存了 ramboot 启动的设备的 uuid,因此您以后总能找到它。它位于 ramdisk 上的 /.bootdisk_byuuid 中,您可以轻松设置一个脚本来将此设备安装在某处,执行 rsync,然后再次卸载它,并将该脚本命名为“ramtodisk”或其他名称。

注意!您可能希望备份 /boot/initrd.img 文件,以便在出现问题时,您的系统仍然可以启动。我在处理此问题时将我的文件保存到 /boot/initrd。当我遇到 grub/init 故障时,我只需编辑我的 initrd 以指向备份 /boot/initrd 文件并返回调试即可。无论如何,我猜这更多的是指导方针,而不是食谱。玩得开心!我的 1.2gig 系统在 usb 1.1 上需要 9:30 左右才能启动,在 usb 2.0 上需要 1:30-45,在 usb 3.0 上需要 ~=35 秒才能加载到内存中。每年都越来越有趣!*8^)

这是 ramboot.patch

2a3,13
> parse_cmdline() {
>     RAM=""
>     for x in $(cat /proc/cmdline); do
>         case $x in
>           ramboot)
>               RAM="Yes" ;;
>             quiet)
>                 quiet=y ;;
>         esac
>     done
> }
66c77
<
---
>       parse_cmdline
90,91c101,164
<       # Mount root
<       mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
---
>       # Mount root - custom ramboot.patch
>       # By: Justin Perkins -- 4/25/12 Email: [email protected]
>       if [ -z "${RAM}" ]; then
>               mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
>       else
>               mkdir /ramboot
>               mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboot
>               log_begin_msg "Detecting system resources"
>               size=$(df|grep ramboot|tr -s ' '|cut -d ' ' -f3)
>               datasize=${size}
>               size=$(expr ${size} + ${size} / 20 )    #5% more to be sure
>               freespace=$(awk '/^MemFree:/{f=$2} /^Cached:/{c=$2} END{print f+c}' /proc/meminfo)
>               log_end_msg
>               if [ "${freespace}" -lt "${size}" ] ; then
>                       echo "Not enough system RAM, ${freespace}k > ${size}k."
>                       echo "Attempting normal rootmount."
>                       mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
>               else
>                       if [ "$quiet" != "y" ] ; then
>                               tstart_min=$(date|cut -d ' ' -f4|cut -d : -f2)
>                               tstart_sec=$(date|cut -d ' ' -f4|cut -d : -f3)
>                               mount -t tmpfs -o size=100% none ${rootmnt}
>                               cd ${rootmnt}
>                               size=$(df -h|grep ramboot|tr -s ' '|cut -d ' ' -f3)     #reuse size
>                               echo "System size: ${size} (${datasize}k) this may take a couple of minutes."
>                               log_begin_msg "Copying system files into RAM"
>                               echo -e -n "\b"
>                               cp -rfa /ramboot/* ${rootmnt} &
>                               pid=$!
>                               while [ ! ${pid} == "done" ] ; do
>                                       alive=$(ps -o pid,args|grep -E ${pid}|grep -v grep)
>                                       alive=$(echo ${alive}|cut -d ' ' -f1)
>                                       if [ -z ${alive} ] ; then pid="done" ; fi
>                                       printf "."
>                                       sleep 1
>                               done
>                               log_end_msg
>                               echo ${ROOT} > ${rootmnt}/.bootdisk_byuuid
>                               tend_min=$(date|cut -d ' ' -f4|cut -d : -f2)
>                               tend_sec=$(date|cut -d ' ' -f4|cut -d : -f3)
>                               if [ ${tend_sec} -lt ${tstart_sec} ] ; then
>                                       tend_sec=$(expr ${tend_sec} + 60)
>                                       tend_min=$(expr ${tend_min} - 1)
>                               fi
>                               if [ ${tend_min} -lt ${tstart_min} ] ; then
>                                       tend_min=$(expr ${tend_min} + 60)
>                           fi
>                           tduration_min=$(expr ${tend_min} - ${tstart_min})
>                           tduration_sec=$(expr ${tend_sec} - ${tstart_sec})
>                           echo "Copy complete, duration: $tduration_min minutes $tduration_sec seconds."
>                           freespace=$(awk '/^MemFree:/{f=$2} END{print f}' /proc/meminfo)
>                           freespace=$(expr ${freespace} + 425000)         #this accounts for the temporal settling issue
>                           echo "You have approximately ${freespace}k free RAM after loading the ramboot."
>                           if [ ${freespace} -lt "502400" ] ; then echo "Warning! you have critically low system RAM free after ramboot." ; fi
>
>                   else
>                           cp -rfa /ramboot/* ${rootmnt}
>                           echo ${ROOT} > ${rootmnt}/.bootdisk_byuuid
>                           freespace=$(awk '/^MemFree:/{f=$2} END{print f}' /proc/meminfo)
>                           if [ ${freespace} -lt "102400" ] ; then echo "Warning! you have critically low system RAM free after ramboot." ; fi
>                   fi
>           fi
>           umount /ramboot
>   fi      #end custom ramboot.patch

06_定制

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#uuid_<placeholder>, and vmlinuz-<placeholder>, and initrd.img-<placeholder> and
#set root='(hd0,2)' need to be replaced with your system's values, although, if you
#get the hd0,2 wrong, but the uuid correct, grub will grep around and find it anyhow. 
menuentry "Ubuntu, with Linux Custom-Ramboot" {
    recordfail
    set root='(hd0,2)'
    search --no-floppy --fs-uuid --set=root uuid_placeholder
    linux /boot/vmlinuz-<placeholder> root=UUID=<uuid-placeholder> ro ramboot
    initrd /boot/initrd.img-<placeholder>
}

答案4

我认为 puppy linux 现在基于 ubuntu,并且非常小并且很容易加载到 RAM 中。

相关内容