突发奇想,可不可以一个硬盘上安装两个Linux *** 作系统

突发奇想,可不可以一个硬盘上安装两个Linux *** 作系统,第1张

和在同一个 硬盘安装双系统类似。

如果是windows,和linux并存,应该先 安装windows,后安装linux这样,可以 避免一些不必要的麻烦。安装双系统时,一定要将硬盘最后一个分区缩小,使得它后面出现一个未分配空间。第二个系统就要在这个未分配的空间里面。

还有一点就是对于硬盘的识别。当只有一个硬盘时,windows的安装很容易,根本不用考虑安装到哪一个硬盘里面。因为,就只有这么一个硬盘,没得选择。两个硬盘呢?windows的安装程序一旦检测发现两个硬盘,就会识别为硬盘0,硬盘1。那么就要在第一个硬盘也就是硬盘0里面安装windows,安装方法和以往的在一个硬盘中安装windows一样。如果用户想再安装一个系统,就要装到第二个硬盘也就是硬盘1里面。如果说第二个系统还是windows,这没什么问题,系统安装程序同样也会识别出两个硬盘。linux下,假设只有一个硬盘,该硬盘被识别为/dev/sda。要是有两个硬盘,那就是/dev/sda和/dev/sdb。那样。我们只要把linux系统安装到/dev/sdb里面就可以了。因为,要是安装双系统,肯定是先装windows,后装linux。那么,等到用户安装linux时,windows已经装好了。安装时后,windows肯定在第一个硬盘里面。就是/dev/sda里面。等到装linux时,就只有/dev/sdb可选了。那么,我们就需要对/dev/sdb进行分区,就好了。对于linux的安装,注意,分区时要分正确了。对于linux来说,使用近些年出现的UEFI的电脑,必须配GPT模式的硬盘,分区时,根分区以及/boot/efi分区是必须的。要是使用了传统的BIOS电脑,硬盘往往是老式的MBR模式,这种情况下只有根是必须的。

看你要安装的版本,网上有相关教程的。其实基本上都差不多,只要会grub,把puppy相关文件(vmlinuz、initrd.gz,以及系统sfs文件)复制到u盘,然后安装grub到u盘,编辑grub引导配置文件,添加一个引导菜单项,重启用u盘启动选择puppy引导就可以启动puppy

linux了。

也有一些工具可以将下载的iso映像文件写入u盘制作启动盘实现u盘启动linux系统。

U盘引导多个linux镜像安装,同时支持BIOS和UEFI模式

准备开整

基本步骤

步骤一: 格式化U盘

注意点: bios_grub标记的分区

步骤二: 安装grub到U盘

步骤三: 添加grub菜单

参考文献

前言: 生命不息,折腾不止。在折腾中进步,在踩坑中成长。

准备开整

U盘一枚(4G容量以上,备份好数据,一会可能要重新格式化)

可用的任意 *** 作系统,64位(32位就不要折腾UEFI了)

UEFI 与 ESP 预备知识,限于篇幅就不详细介绍了,自己看文档原理

USB启动的原理就不多做讲解了,有兴趣的话找找相关的文档,介绍很多,也很详细,跟硬盘引导过程差不多。注意的是BIOS+MBR模式和UEFI+GPT模式是不同的。

基本步骤

先说一下我的环境,金士顿16G U盘一个, *** 作系统是Deepin 2014.3 64bit,基于Ubuntu 14.04,其他类似的系统可以类比。Linux系统本来就使用grub引导(不要在CentOS/RHEL 6及以下版本折腾了,那个是Grub Legacy,已经不维护了),折腾起来要比其他 *** 作系统方便的多,软件仓库就有grub相关的软件包,也不需要单独安装太多东西。Windows下可以用 grub2win ,原理是一样的。

步骤一: 格式化U盘

想要支持UEFI引导,GPT是不可少了,而且GPT是兼容MBR了。所以第一步需要先将U盘格式化为GPT分区,这样efi文件可以和MBR共存,实现UEFI和BIOS双支持。

如果U盘已经是

Linux下支持GPT分区的工具: parted, gdisk。大致的步骤就是使用gdisk(命令和 *** 作方式几乎和fdisk完全一样,只是支持GPT),或parted对U盘重新分区,然后标记ESP。如果用gdisk,只要给分区标记EF00编号即可,如果用parted,给分区boot标记即可。命令行就不演示了,很简单,我这边截图使用图形化工具gparted分区,同样结果也是GPT分区。

图形化的gparted *** 作也很简单,建立GPT分区表,分区,格式化为FAT32( 注: 尽管ESP支持多种分区,但是为了通用性与兼容性还是建议FAT32 ),标记分区为boot

这样U盘处理就完成了,使用gdisk或parted显示一下U盘的信息,看到这样的信息就是OK的

$ sudo gdisk -l /dev/sdb  # 根据你的U盘的名字修改dev设备 

GPT fdisk (gdisk) version 0.8.8

Partition table scan: 

MBR: protective      # <========================= 保护性的MBR,这个是GPT兼容MBR的一种设计 

BSD: not present 

APM: not present 

GPT: present         # <========================= 看这里,已经是GPT了

Found valid GPT with protective MBR using GPT.   # <========== 这里的显示也说明是GPT分区 

Disk /dev/sdb: 30736384 sectors, 14.7 GiB 

Logical sector size: 512 bytes 

Disk identifier (GUID): 022EE53E-9641-4D28-9394-0826CFA24730 

Partition table holds up to 128 entries 

First usable sector is 34, last usable sector is 30736350 

Partitions will be aligned on 2048-sector boundaries 

Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name 

1            2048        30734335   14.7 GiB    EF00         # <======== 这里很关键,看Code是EF00,想要分区成为ESP必须设置这个标记,如果手工用gdisk别忘了这一步

$ sudo parted /dev/sdb print 

Model: Kingston DataTraveler 3.0 (scsi) 

磁盘 /dev/sdb: 15.7GB 

Sector size (logical/physical): 512B/512B 

分区表:gpt                                 # <======= GPT分区 

Disk Flags:

数字  开始:  End     大小    文件系统  Name  标志 

1  1049kB  15.7GB  15.7GB  fat32         启动, esp      # <===== ESP已经设置成功 

注意点: bios_grub标记的分区

这个要特别强调,bios_grub标记的分区必须存在,否则BIOS模式下无法使用 。

有关bios_grub标记的分区说明: https://help.ubuntu.com/community/Installation/UEFI-and-BIOS#Make_a_system_bootable_in_UEFI_as_well_as_BIOS

这里我简单提及一下这个标记的作用。上面提到过,GPT兼容MBR,如果要让grub在GPT上使用MBR模式安装的话,需要设置这个标记。按照ubuntu官方文档(上面那个文档,想了解详细的话必看!),这个分区有以下几个特点:

1MB容量

不需要格式化

设置bios_grub标记

如果用gdisk, parted, gparted这些工具分区的时候,你会发现总会有一个1MB的剩余空间,就是干这个用的,现在,我只需要给这个剩余空间分区,并打上bios_grub标记就行了(EF02),不用格式化。parted *** 作也类似

sudo gdisk /dev/sdb# 下面可以看到gdisk的 *** 作几乎和fdisk完全一样,熟悉fdisk可以无压力上手GPT fdisk (gdisk) version 0.8.8Partition table scan:

 MBR: protective

 BSD: not present

 APM: not present

 GPT: presentFound valid GPT with protective MBRusing GPT.Command (? for help): nPartition number (2-128, default 2):First sector (34-30736350, default = 30734336) or {+-}size{KMGTP}:Last sector (30734336-30736350, default = 30736350) or {+-}size{KMGTP}:Current type is 'Linux filesystem'Hex code or GUID (L to show codes, Enter = 8300): EF02Changed type of partition to 'BIOS boot partition'Command (? for help): pDisk /dev/sdb: 30736384 sectors, 14.7 GiBLogical sector size: 512 bytesDisk identifier (GUID): 0086B5EF-81D9-4BD1-816C-AD1EADCD2338Partition table holds up to 128 entriesFirst usable sector is 34, last usable sector is 30736350Partitions will be aligned on 2048-sector boundariesTotal free space is 2014 sectors (1007.0 KiB)Number  Start (sector)    End (sector)  Size       Code  Name

           2048        30734335   14.7 GiB    EF00        30734336        30736350   1007.5 KiB  EF02  BIOS boot partition # <== EF02对应的就是bios_grub这个标记Command (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!Do you want to proceed? (Y/N): y

OKwriting new GUID partition table (GPT) to /dev/sdb.Warning: The kernel is still using the old partition table.The new table will be used at the next reboot.The operation has completed successfully.sudo parted /dev/sdb printsudo gdisk /dev/sdb

GPT fdisk (gdisk) version 0.8.8Partition table scan:

 MBR: protective

 BSD: not present

 APM: not present

 GPT: presentFound valid GPT with protective MBRusing GPT.Command (? for help): nPartition number (2-128, default 2):First sector (34-30736350, default = 30734336) or {+-}size{KMGTP}:Last sector (30734336-30736350, default = 30736350) or {+-}size{KMGTP}:Current type is 'Linux filesystem'Hex code or GUID (L to show codes, Enter = 8300): EF02Changed type of partition to 'BIOS boot partition'Command (? for help): pDisk /dev/sdb: 30736384 sectors, 14.7 GiBLogical sector size: 512 bytesDisk identifier (GUID): 0086B5EF-81D9-4BD1-816C-AD1EADCD2338Partition table holds up to 128 entriesFirst usable sector is 34, last usable sector is 30736350Partitions will be aligned on 2048-sector boundariesTotal free space is 2014 sectors (1007.0 KiB)Number  Start (sector)    End (sector)  Size       Code  Name

           2048        30734335   14.7 GiB    EF00        30734336        30736350   1007.5 KiB  EF02  BIOS boot partitionCommand (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!Do you want to proceed? (Y/N): y

OKwriting new GUID partition table (GPT) to /dev/sdb.Warning: The kernel is still using the old partition table.The new table will be used at the next reboot.The operation has completed successfully.$ sudo parted /dev/sdb printModel: Kingston DataTraveler 3.0 (scsi)磁盘 /dev/sdb: 15.7GBSector size (logical/physical): 512B/512B分区表:gptDisk Flags: 数字  开始:  End     大小    文件系统      Name                 标志

   1049kB  15.7GB  15.7GB  fat32                          启动, esp    15.7GB  15.7GB  1032kB            BIOS boot partition  bios_grub  # <== 要的就是这个!

至此分区的步骤就完成了。如果你已经是GPT分区了,就不用重新分区了,只要处理成ESP就行了

步骤二: 安装grub到U盘

这一步相比上一步已经简单许多了,但还是有一个小坑需要注意。先贴命令:

$ sudo mount /dev/sdb1 /mnt -o uid=$USER,gid=$USER  # 没什么好说的,挂载U盘使用,加上uid和gid参数只是为了编辑文件不需要sudo而已# grub安装到MBR$  sudo grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdbInstalling for i386-pc platform.Installation finished. No error reported.# grub安装到ESP,特别注意--removable参数,安装到移动设备上一定要用这个参数$ sudo grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removableInstalling for x86_64-efi platform.Installation finished. No error reported.

命令没有任何难度,但是有几个坑需要特别注意:

Ubuntu的分包问题grub默认的target是i386-pc,这个target包含在 grub-pc 这个包,如果你的系统使用BIOS+MBR安装,这个包默认是存在的。x86_64-efi这个target包含在 grub-efi 这个包,只有你的系统使用UEFI+GPT方式安装这个包才会存在。如果某个target报错,错误信息类似于 grub-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory. 这样的话,就需要安装 grub-pc 或 grub-efi 之后再试。

安装到ESP要加–removable这个参数 这个参数专门针对于可移动设备,一定要加

bios_grub标记的分区 如果按照上面的分区过程 *** 作了,增加了这个标记的分区,安装grub的时候会自动识别这个标记的分区并成功安装grub,否则报错:

Installing for i386-pc platform.grub-install: warning: this GPT partition label contains no BIOS Boot Partitionembedding won't be possible.

grub-install: warning: 无法嵌入。在此次安装中 GRUB 只能通过使用块列表安装。但是块列表是不可信赖的,不推荐使用。.

grub-install:错误: will not proceed with blocklists.

步骤三: 添加grub菜单

如果前面都没问题的话,最后就只剩下添加grub菜单了。在 /mnt/boot/grub 这个目录下,新建 grub.cfg 配置文件就行了。grub2的语法很复杂,图省事就从网上各种摘抄拼接就行了。比如我把linux发行版的iso镜像都扔到了 boot/iso 这个目录,于是乎我的 grub.cfg 成了这样:

# path to the partition holding ISO images (using UUID)probe -u $root --set=rootuuidset imgdevpath="/dev/disk/by-uuid/$rootuuid"# define globally (i.e outside any menuentry)insmod search_fs_uuid

search --no-floppy --set=isopart --fs-uuid $rootuuid

insmod all_video

menuentry "Linux Mint cinnamon 64bit ISO" {

set isofile=/boot/iso/linuxmint-17.2-cinnamon-64bit.iso

loopback loop ($isopart)$isofile

linux (loop)/casper/vmlinuz file=/cdrom/preseed/linuxmint.seed boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --

initrd (loop)/casper/initrd.lz}menuentry "Ubuntu Desktop 64bit ISO" {

set isofile=/boot/iso/ubuntu-14.04.3-desktop-amd64+mac.iso

loopback loop ($isopart)$isofile

linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --

initrd (loop)/casper/initrd.lz}menuentry "UbuntuKylin Desktop 64bit ISO" {

set isofile=/boot/iso/ubuntukylin-14.04.3-desktop-amd64.iso

loopback loop ($isopart)$isofile

linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --

initrd (loop)/casper/initrd.lz}menuentry "Ubuntu Server 64bit ISO" {

set isofile=/boot/iso/ubuntu-14.04.3-server-amd64+mac.iso

loopback loop ($isopart)$isofile set gfxpayload=keep

linux (loop)/install/vmlinuz file=/cdrom/preseed/ubuntu-server.seed iso-scan/filename=$isofile quiet --

initrd (loop)/install/initrd.gz}menuentry "Deepin 2014 ISO" {

set isofile=/boot/iso/deepin_2014.3_amd64.iso

loopback loop ($isopart)$isofile

linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --

initrd (loop)/casper/initrd.lz}

根据自己的需求增删改改就行了。想进一步美化的话,grub2关于美化的文档也很多,就不赘述了。

注意: 不要使用虚拟机测试,因为虚拟机不能完整模拟主板。因此不一定能引导你的U盘,让你误以为制作失败了。尽可能用真机去测试引导。

最后,贴一个效果图,可以看到BIOS模式和UEFI都可以引导了

补充: 稍作美化一下效果,只不过那个从本地硬盘启动还没实现,需要看看别人怎么写的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7504976.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存