-3

首先,我想分享一下我如何制作 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或 Menu->Preferences->Disks 来查找。然后将以下文件复制到他们提到的目录中并重新启动到 USB 闪存(对于我的主板,按 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 代码:/path to the first partition/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 到处进行编程。non-persistent(grub 菜单中的第二个选项)的速度很好,但是第一个选项,即持久性选项,需要 3-4 分钟才能启动,然后有点慢!此外,安装(复制)需要半小时才能完成!有什么改进可以让它更快吗?

任何建议将不胜感激

4

1 回答 1

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-rwmkfs.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为 install 命令的。

/home/lubuntu/apt/自动启动

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

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

于 2014-03-07T14:10:15.417 回答