首先,我想分享我关于如何制作Ubuntu live iso的USB pendrive的经验,它是多引导的,可以通过bash
代码复制自己。我正试图指导你制作这样的东西,那么,只要我不是专家,我会问我如何才能更快(在引导、操作或克隆时)?
首先,您应该使用GParted等工具将您的usb闪存驱动程序划分为两个分区。一个是fat32分区,另一个是ext2分区,修复大小为5500MB(如果您更改其大小,那么您也必须在bash代码中更改此数字)。你可以通过你的usb闪存驱动器的整个大小减去第二个分区的大小来找到第一个分区的尺寸。
其次,您必须下载ubuntu iso镜像(我下载了lubuntu 13.10,因为它更快,但我认为ubuntu也必须工作),然后将其复制到第一个分区(fat32分区),并将其重命名为ubuntu.iso
。
第三,运行这个命令来安装grub引导程序(你也可以在bash代码中找到这个命令)
sudo grub-install --force --no-floppy --boot-directory=/mnt/usb2/boot /dev/sdc1
"/mnt/usb2"目录是安装第一个分区的目录,/dev/sdc1
是它的设备。如果您不知道这些信息,请使用fdisk -l
或"菜单"->"首选项"->"磁盘"查找。然后在他们提到的目录中复制以下文件,并重新启动到usb闪存(对于我的主板,按下F12,然后从"HDD硬盘"列表中选择我的闪存设备。)
/第一个分区的路径/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安装程序的路径
#!/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分钟才能启动,之后有点慢!此外,安装(复制)需要半小时才能完成!有什么改进可以让它在任何方面更快吗?
任何建议都将受到的赞赏
正如我之前所说,如果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/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
还要将上面的软件包更改为install命令的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
现在,每次重新启动后,都会打开一个漂亮的终端,所有的软件包都会按照我的意愿安装!与持久根目录相比,这种方法的优点是操作速度更快,例如打开窗口或运行程序。但是克隆和启动的时间非常长。我会很高兴有人能帮助我使它更专业、更快。