让ubuntu持久的live iso更快

时间:2014-02-26 17:57:18

标签: bash ubuntu clone usb-drive multiboot

首先,我想分享一下我如何制作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。它将使用从第一个安装的应用程序到/dev/sdc驱动器的另一个USB驱动器。我制作了这段代码,所以我的所有学生都有相同的闪存驱动器,可以用c,python或sage到处练习编程。非持久性的速度(grub菜单中的第二个选项)很好,但是第一个选项,即持久性选项,需要3-4分钟才能启动,之后它有点慢!此外,安装(复制)需要半个小时才能完成!是否有任何改进使其以任何方式更快?

任何建议将不胜感激

1 个答案:

答案 0 :(得分: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目录

中的以下文件

/家庭/ lubuntu /公寓/启动

#!/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

/家庭/ lubuntu /公寓/自动起动

#!/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

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