【问题标题】:Make ubuntu persistent live iso faster让 ubuntu 持久化 live iso 更快
【发布时间】:2014-03-29 18:08:57
【问题描述】:

首先,我想分享一下我如何制作 Ubuntu live iso 的 USB pendrive 的经验,它是多重引导的,它可以通过bash 代码复制自己。我试图指导你做这样的事情,然后,只要我不是专家,问我怎样才能让它更快(在引导、操作或克隆时)?

首先,您应该使用 GParted 等工具将 USB 闪存驱动程序分区为两个分区。一个 fat32 分区和另一个 ext2 的固定大小为 5500MB(如果您更改其大小,那么您也必须在 bash 代码中更改此数字)。您可以通过 USB 闪存驱动器的整个大小减去第二个分区的大小来找到第一个分区的大小。

其次,你必须下载ubuntu iso镜像(我下载的是lubuntu 13.10,因为它更快,但我认为ubuntu也必须工作)然后将它复制到第一个分区(fat32分区。)并将其重命名为ubuntu.iso

第三,运行这个命令安装grub bootloader(你也可以在bash代码中找到这个命令)

    sudo grub-install --force --no-floppy --boot-directory=/mnt/usb2/boot /dev/sdc1

"/mnt/usb2" 目录是您挂载第一个分区的目录,/dev/sdc1 是它的设备。如果您不了解此信息,请使用fdisk -l 或菜单->首选项->磁盘来查找。然后将以下文件复制到他们提到的目录中并重新启动到usb flash(对于我的主板,按F12然后从“HDD Hard”列表中选择我的闪存设备。)


/第一个分区的路径/boot/grub/grub.cfg

set timeout=10
set default=0

menuentry "Run Ubuntu Live ISO Persistent" {
 loopback loop /ubuntu.iso
 linux (loop)/casper/vmlinuz persistent boot=casper iso-scan/filename=/ubuntu.iso noeject noprompt splash --
 initrd (loop)/casper/initrd.lz
}

menuentry "Run Ubuntu Live ISO(for clone to a new USB drive)" {
 loopback loop /ubuntu.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso noeject noprompt splash --
 initrd (loop)/casper/initrd.lz
}

bash 代码: /第一个分区的路径/boot/liveusb-installer

#!/bin/bash

destUSB=$1

# insert mountpoint, receive device name
get_block_from_mount() {
        dir=$(readlink -f $1)
    MOUNTNAME=`echo $dir | sed 's/\\/$//'`
    if [ "$MOUNTNAME" = "" ] ; then
        echo ""
        return 1
    fi

    BLOCK_DEVICE=`mount | grep "$MOUNTNAME " | cut -f 1 -d " "`
    if [ "$BLOCK_DEVICE" = "" ] ; then
        echo ""
        return 2
    fi
    echo $BLOCK_DEVICE
    return 0
}

sdrive=$(echo $destUSB | sed 's/\/dev\///')

if ! [ -f /sys/block/$sdrive/capability ] || ! [ $(($(< /sys/block/$sdrive/capability )&1)) -ne 0 ]
then
  echo "Error: The argument must be the destination usb in /dev directory!"
  echo "If you don't know this information just try 'sudo fdisk -l' or use Menu->Prefrences->Disks"
  exit 1
fi

srcDirectory=/isodevice
srcDev=`get_block_from_mount $srcDirectory`
srcUSB="${srcDev%?}"

if [ $srcUSB == $destUSB ]; then
  echo "Error: The argument of device is wrong! It's the source USB drive."
  exit 1
fi

diskinfo=`sudo parted -s $destUSB print`

echo "$diskinfo"

# Find size of disk
v_disk=$(echo "$diskinfo"|awk '/^Disk/ {print $3}'|sed 's/[Mm][Bb]//')
second_disk=5500

if [ "$v_disk" -lt "6500" ]; then
        echo "Error: the disk is too small!!"
        exit 1
elif [ "$v_disk" -gt "65000" ]; then
        echo "Error: the disk is too big!!"
        exit 1
fi

echo "Partitioning ."
# Remove each partition
for v_partition in $(echo "$diskinfo" |awk '/^ / {print $1}')
do
   umount -l ${destUSB}${v_partition}
   parted -s $destUSB rm ${v_partition}
done

# Create partitions
let first_disk=$v_disk-$second_disk
parted -s $destUSB mkpart primary fat32  1 ${first_disk}
parted -s $destUSB mkpart primary ext2   ${first_disk} ${v_disk}

echo "Formatting .."
# Format the partition
mkfs.vfat ${destUSB}1
mkfs.ext2 ${destUSB}2 -L home-rw

echo "Install grub into ${destUSB}1 ..."
mkdir /mnt/usb2
mount ${destUSB}1 /mnt/usb2
grub-install --force --no-floppy --boot-directory=/mnt/usb2/boot $destUSB

cp $srcDirectory/boot/grub/grub.cfg /mnt/usb2/boot/grub
cp $srcDirectory/boot/liveusb-installer /mnt/usb2/boot
echo "Copy ubuntu.iso from ${srcUSB}1 to ${destUSB}1......"
cp $srcDirectory/ubuntu.iso /mnt/usb2

umount -l ${destUSB}1
rm -r /mnt/usb2

echo "Copy everything from ${srcUSB}2 to ${destUSB}2 ............"
dd if=${srcUSB}2 of=${destUSB}2

echo "It's done!"

exit 0

然后,如果你想克隆这个闪存,只需重新启动到 grub 引导加载程序的第二个选项,然后打开另一个 USB 闪存驱动器并运行 liveusb-installer /dev/sdc。它会将另一个 USB 驱动器与每个已安装的应用程序(从第一个应用程序)放入 /dev/sdc 驱动器。我编写了这段代码,所以我所有的学生都有相同的闪存驱动器来练习使用 c、python 或 sage 到处进行编程。 non-persistent(grub 菜单中的第二个选项)的速度很好,但是第一个选项,即持久性选项,需要 3-4 分钟才能启动,然后有点慢!此外,安装(复制)需要半小时才能完成!有什么改进可以让它更快吗?

任何建议将不胜感激

【问题讨论】:

  • 在给-1之前请说一些我知道什么是穿的!!我认为这是一个好主意,闪存驱动器具有自我复制的能力!如果是因为我的英语,我很抱歉,但请帮助我找到答案。谢谢
  • 这个网站是为编程问题。这不是编程。这只是一些使用 Ubuntu LiveCD 的(方便的)技巧。
  • @MarcB 谢谢 Marc :) 我知道所有这些对于像您这样的专家来说都非常方便。但是偷我认为这是一个编程问题!你能帮我找到一种更快的方式来启动 Ubuntu liveCD 吗?至少告诉我在哪里可以问?非常感谢。

标签: bash ubuntu clone usb-drive multiboot


【解决方案1】:

正如我之前所说,如果 lubuntu 启动非持久性,它会更快。所以我推断如果我只是保持主目录持久,那么根目录的其余文件夹将在 RAM 中,那么它必须更快。为了实现这一点,我对其进行了一些更改,以使用/home 持久启动并在每次启动后自动安装每个应用程序。事实证明,这样启动时间没有改变(启动+安装),但运行速度非常快,这对我来说很棒。

我根本没有改变grub.cfg。我更改了 bash 代码(liveusb-installer) 以将第二个分区标记为 home-rw,因此其余文件夹仅保留在 RAM 中。

在bash代码中:/path to the first partition/boot/liveusb-installer,只需将mkfs.ext2 ${destUSB}2 -L casper-rw这一行改为mkfs.ext2 ${destUSB}2 -L home-rw即可。

更改liveusb-installer 后,您可以在要克隆此 USB 驱动器时使用它。如果您之前安装过它(通过使用上述配方),那么只需转到 grub 菜单的第二个选项(非持久选项),然后格式化第二个分区并将其标记为 home-rw。之后只需重新启动到 grub 菜单的第一个选项,然后联机并安装您希望始终存在的任何程序。

sudo apt-get update
sudo apt-get install blablabla

安装后,通过运行以下命令将每个包和列表复制到 ~/apt 目录:

mkdir ~/apt
mkdir ~/apt/lubuntu-archives
mkdir ~/apt/lubuntu-lists
cp /var/cache/apt/archives/*.deb ~/apt/lubuntu-archives
cp /var/lib/apt/lists/*ubuntu* ~/apt/lubuntu-lists

现在将以下文件复制到~/apt 目录中

/home/lubuntu/apt/启动

#!/bin/bash

apt_dir=/home/lubuntu/apt
# This script meant to open by /home/lubuntu/apt/autostart

for file in $(ls $apt_dir/lubuntu-archives)
do
  ln -s $apt_dir/lubuntu-archives/$file /var/cache/apt/archives/$file
done

for file in $(ls $apt_dir/lubuntu-lists)
do
  ln -s $apt_dir/lubuntu-lists/$file /var/lib/apt/lists/$file
done

apt-get install -y binutils gcc g++ make m4 perl tar \
            vim codeblocks default-jre synapse

exit 0

同样把上面的包改成安装命令的blablabla

/home/lubuntu/apt/autostart

#!/bin/bash

# This script meant to open by /home/lubuntu/.config/lxsession/Lubuntu/autostart
# or autostart of "Menu->Perferences->Default applications for LXSession"

xterm -e /usr/bin/sudo /bin/bash /home/lubuntu/apt/start-up
synapse

然后编辑这个文件/home/lubuntu/.config/lxsession/Lubuntu/autostart并将上面文件的地址添加到其中。像这样:

/home/lubuntu/apt/autostart

现在每次重启后都会打开一个漂亮的终端,所有的包都会按照我的意愿安装!这种方法相对于持久根目录的优点是操作速度更快,例如打开窗口或运行程序。但是克隆和引导的时间很长。我会很高兴有人帮助我使它更专业、更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多