【发布时间】: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