首先,我想分享一下我如何制作 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 分钟才能启动,然后有点慢!此外,安装(复制)需要半小时才能完成!有什么改进可以让它更快吗?
任何建议将不胜感激