安装 Ubuntu 和 CentOS 双系统
目录
- 场景描述
- 摘要
- 步骤1:缩小文件系统和逻辑卷(FS 和 LV)
- 附:本节参考资料
- 步骤2:缩小物理卷(PV)
- 附:本节参考资料
- 步骤3:缩小分区(Partition)
- 步骤3:安装 CentOS
- 步骤4:安装 grub 并设置启动菜单
- 附:本节参考资料
场景描述
- 笔记本电脑上一直用的是 Ubuntu 18.04,现在想装 CentOS 8 作为双系统;
- 之前不了解 LVM 也不熟悉分区,Ubuntu 基本上是按照安装引导程序的默认设置安装的,一个分区独占了整块硬盘(460 G 左右);
- 一开始以为非常简单,拿着 CentOS 的 live USB 打算直接安装,但安装引导程序提示没有足够的空间了;
- 大家都推荐用 GParted 来缩小分区,但是试了一下,没成功。
摘要
经过前后两三天的倒腾,终于成功装好。各个步骤如下:
- 重新划分硬盘分区。为此,需要依次缩小现有的文件系统(file system)、逻辑卷(logical volume)、物理卷(physical volume)和分区(partition),实际只用了3步,因为文件系统和逻辑卷是同时缩小的;
- 新建分区,在新分区上安装 CentOS。此时开机会自动 boot 到 CentOS,Ubuntu 回不去了;
- 使用 live USB 为 Ubuntu 重新安装 grub 并修改参数,最终实现可以通过开机 grub 菜单选择进入 Ubuntu 或者 CentOS 系统。
步骤1:缩小文件系统和逻辑卷(FS 和 LV)
使用 lsblk
命令可以清楚地看到硬盘的分区情况,并且也看到我的 Ubuntu 是建立在逻辑卷上的(TYPE
列为 lvm
):
doudou@doudou-Aspire-E1-471G:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(...)
sda 8:0 0 465.8G 0 disk
└─sda1 8:1 0 465.8G 0 part ├─ubuntu--vg-root 253:2 0 464.8G 0 lvm /└─ubuntu--vg-swap_1 253:3 0 976M 0 lvm
使用 df
命令查看 Ubuntu 系统所占空间大小和剩余空间:
doudou@doudou-Aspire-E1-471G:~$ df -h
Filesystem Size Used Avail Use% Mounted on
(...)
/dev/mapper/ubuntu--vg-root 465G 9.8G 455G 3% /
可以看到 ubuntu--vg-root
逻辑卷实际只占了 9.8 G 空间。下面缩小 ubuntu--vg-root
逻辑卷,为安装 CentOS腾出空间。
使用 lvreduce
命令缩小逻辑卷 ubuntu--vg-root
的大小,其中 --resizefs
标识是说,在缩小逻辑卷的同时也缩小文件系统,--size -350G
表示缩小 350 G。
doudou@doudou-Aspire-E1-471G:~$ sudo lvreduce --resizefs --size -350G /dev/ubuntu-vg/root
Do you want to unmount "/" ? [Y|n] n
fsadm: Cannot proceed with mounted filesystem "/"./sbin/fsadm failed: 1Filesystem resize failed.
shell 提示在文件系统挂载的情况下,是无法改变文件系统大小的(逻辑卷大小是可以改的),不过在系统运行时显然是不能卸载 /
的(虽然我还没试过在上面选 y
…)。
因此,这一步需要使用 live USB 进行,找一个 Ubuntu 的镜像写入 USB(如果是 mac,推荐 balenaEtcher 这个工具),然后使用 USB 引导系统,选择 “Try Ubuntu”,然后打开命令行,重复上面的命令:
ubuntu@ubuntu:~$ sudo lvreduce --resizefs --size -350G /dev/ubuntu-vg/root
这一次应该就能顺利完成了,检查一下:
ubuntu@ubuntu:~$ sudo lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertroot centos-vg -wi-a----- 114.80g swap centos-vg -wi-a----- 976.00m
附:本节参考资料
如果不太了解 LVM,推荐下面这两篇文章,能够快速理解 LVM 的概念:
- LVM 入门
- 可以参考这里面的配图,非常直观
这一步骤的相关命令来自 How do I shrink the root logical volume (LV) on LVM?
步骤2:缩小物理卷(PV)
上一步只是缩小了逻辑卷的大小,如果使用 vgs
命令展示逻辑卷组信息,会发现逻辑卷组的大小还是没变:
ubuntu@ubuntu:~$ sudo vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 2 0 wz--n- <465.80g 350.24g
使用 pvs
展示物理卷信息:
ubuntu@ubuntu:~$ sudo pvsPV VG Fmt Attr PSize PFree /dev/sda1 ubuntu-vg lvm2 a-- <465.80g 350.24g
这个时候如果直接缩小分区,还是会造成数据损失(事实上我就是在这一步直接缩小分区了,后来连 CentOS 都装好了,但命令行只要涉及分区或者 LVM 的操作都在提示 Warning
信息,促使我发现了这个问题,缩小了物理卷之后就好了,并且我很侥幸地居然没有造成数据损失)。
下面使用 pvresize
来缩小物理卷, --setphysicalvolumesize 128G
将物理卷大小设置为 128 G:
ubuntu@ubuntu:~$ sudo pvresize --setphysicalvolumesize 128G /dev/sda1
但是这里会遇到 /dev/sda1: cannot resize to xxxxx extents as later ones are allocated.
错误。通过 pvs
的 --segments
标识可以直观地看到原因:
ubuntu@ubuntu:~$ sudo pvs -v --segments /dev/sda1PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/sda1 ubuntu-vg lvm2 a-- <465.80g 350.24g 0 xxxx root 0 linear /dev/sda1:0-(xxxx-1) /dev/sda1 ubuntu-vg lvm2 a-- <465.80g 350.24g xxxx yyyy 0 free /dev/sda1 ubuntu-vg lvm2 a-- <465.80g 350.24g zzzz 244 swap_1 0 linear /dev/sda1:zzzz-jjjj
中间具体的数值我忘记了,用 xxxx
、yyyy
、zzzz
和 jjjj
替代。
总之,问题在于刚才缩小 root
逻辑卷所空余出来的空间在 swap_1
逻辑卷所占空间之前,而缩小物理卷只能从后缩小,会发现后面的空间其实是被 swap_1
占着呢,所以报错了。
可以用 pvmove
命令来移动 PE,解决这个问题,其中的 /dev/sda1:zzzz-jjjj
对应的就是 swap_1
的区间:
sudo pvmove --alloc anywhere /dev/sda1:zzzz-jjjj
根据我找到的参考资料,这样做应该能够解决问题,但在我的情况下还是报错。在尝试了很久未果之后,无奈我只好索性删除并重新创建了 swap_1
逻辑卷,反正交换空间里也没有数据。重新创建的 swap_1
逻辑卷(名字不能变,/etc/fstab
靠这个名字挂载)就自动接在 root
逻辑卷之后了。
(后来我第二次遇到了同样的问题,使用上面的 pvmove
命令就成功解决了。)
这个问题解决之后,重新运行上面的 sudo pvresize --setphysicalvolumesize 128G /dev/sda1
命令,即可缩小物理卷。
现在使用 vgs
命令可以看到:
ubuntu@ubuntu:~$ sudo vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 2 0 wz--n- <128.00g 65.24g
附:本节参考资料
How to reduce Volume Group size in LVM?
步骤3:缩小分区(Partition)
这一步就比较简单了,使用 Ubuntu live USB 里自带的 GParted 工具可以很直观地改变分区大小。
在我的例子里,上面已经提到,我在分区前忘了缩小物理卷,所以这一步使用 GParted 分区会报错,而且我当时没有找到问题。于是我使用 fdisk
命令强行进行了缩小分区,成功是成功了,但也导致了后面装好 CentOS 之后的 Warning
提示。好在最后问题还是得到了解决。
步骤3:安装 CentOS
这一步也没什么好说的,不过感觉 CentOS 的安装引导程序比较难用。
还有,CentOS竟然要求 /boot
不能使用 LVM 分区,于是还得单独为 /boot
划分一个分区。最后的分区变成了这样:
ubuntu@ubuntu:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
(...)
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 128G 0 part
│ ├─ubuntu--vg-root 253:2 0 114.8G 0 lvm /
│ └─ubuntu--vg-swap_1 253:3 0 976M 0 lvm
├─sda2 8:2 0 300M 0 part
└─sda3 8:3 0 115.8G 0 part ├─centos--vg-root 253:0 0 114.8G 0 lvm └─centos--vg-swap 253:1 0 976M 0 lvm
步骤4:安装 grub 并设置启动菜单
CentOS 是装好了,但现在开机就自动引导到了 CentOS,Ubuntu 连影都见不着了。
下面还是需要借助 Ubuntu 的 live USB,首先挂载 Ubuntu 的文件系统:
ubuntu@ubuntu:~$ sudo mount /dev/mapper/ubuntu--vg-root /mnt/
上面这个命令将 Ubuntu 的文件系统挂载到了 /mnt
,也就是说,现在的 /mnt/
目录下就是之前在 Ubuntu 系统上的 /
下的内容了。
安装 grub:
ubuntu@ubuntu:~$ sudo grub-install –-root-directory=/mnt/ /dev/sda
现在重启计算机,从硬盘引导。但在我的例子中,开机时还是没有出现 grub 菜单,直接跳到了 CentOS…
别着急,下面还是借助 Ubuntu 的 live USB,按照上面的方法挂载 Ubuntu 的文件系统到 /mnt
下,然后修改 /etc/default/grub
文件:
ubuntu@ubuntu:~$ sudo vi /mnt/etc/default/grub
将下面两项:
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
修改为:
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
再次重启计算机,可以在 grub 菜单上选择引导系统了,大功告成!
附:本节参考资料
Ubuntu Grub Recover after installing centos or windows
挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member’的解决方案
安装 Ubuntu 和 CentOS 双系统相关推荐
- Windows XP硬盘安装Ubuntu 12.04双系统
Windows XP硬盘安装Ubuntu 12.04双系统 一.下载文件 需要下载的东西有两个,一个是grub4dos,另一个是Ubuntu 12.04 LTS的镜像文件,具体下载地址如下: 1.Gr ...
- Windows XP硬盘安装Ubuntu 11.10双系统全程图解
Ubuntu 11.10正式版出来有段时间了,许多朋友还在用wubi安装,其实,Windows XP下硬盘安装Ubuntu 11.10双系统其实也很简单的,Ubuntu 11.10的安装过程跟11.0 ...
- XP硬盘安装Ubuntu 10.10双系统图解(转)
原文地址: http://www.ylmf.net/ubuntu/guide/201010297968.html http://www.ylmf.net/ubuntu/guide/2010102979 ...
- UEFI+GPT安装Windows8和CentOS双系统
UEFI+GPT安装Windows8和CentOS双系统 [日期:2014-05-11] 来源:Linux社区 作者:smstong [字体:大 中 小] id="iframeu27268 ...
- xp 硬盘安装linux双系统,WinXP硬盘安装Ubuntu 11.10双系统全程图解
Ubuntu 11.10正式版出来有段时间了,许多朋友还在用wubi安装,其实,Windows XP下硬盘安装Ubuntu 11.10双系统其实也很简单的,Ubuntu 11.10的安装过程跟11.0 ...
- 苹果系统 macOS Mojave 10.14.4上安装 Ubuntu 18.04 双系统
macOS Mojave 10.14.4 安装Ubuntu 18.04 双系统 0. 准备工作 & 系统情况 1. 制作Ubuntu安装盘(U盘) 2. 硬盘分区 3. 安装Ubuntu 4. ...
- Windows XP硬盘安装Ubuntu 12.04双系统图文详解
按照下文的方法,自己在winXP上面装Ubuntu12.04双系统,准确说是winXP+win7+Ubuntu三系统:正在安装,稍后将自己安装截图发出来.. 修改计算机名: sudo gedit /e ...
- 苹果系统 macOS Catalina 10.15.7 安装 Ubuntu 20.04 双系统 采用rEFInd引导
苹果系统 macOS Catalina 10.15.7 安装 Ubuntu 20.04 双系统 采用rEFInd引导 0. 前言 1. 准备工作 & 系统情况 2. 制作Ubuntu安装盘(U ...
- 安装Ubuntu和Windows10双系统
安装Ubuntu和Windows10双系统 安装Windows10参考视频:视频上半部分 视频下半部分 安装Ubuntu系统参考博客:博客
最新文章
- linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效
- CSS的inline、block与inline-block
- android 购物车小美的店,[转载]【小美教程】买菜累啊有木有?购物车用的购物袋教程来啦.........
- mysql没法安装_mysql没法使用、没法启动服务的解决方法
- Mac OS X下安装和配置Maven
- 825. 适龄的朋友
- 一流企业都在做数据治理,还用百万年薪招人,想做的无非这10点
- swoole中退出、异常与错误的处理笔记
- 3 描述android的组件,Android基础------Intent组件
- Java编程:多路查找树
- 057 生成器和生成器表达式
- 动态链接库(共享库).so文件的使用
- mybatisPlus代码自动生成
- (七) 三维点云课程---ICP(Point-to-Point)
- 一批信息查询网站汇总
- python bottle框架使用beaker支持session
- 【Android基础知识】选项菜单、上下文菜单、子菜单的使用
- 缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor” 解决方案
- 字节流、字节流、转换流、打印流
- STM32 高级定时器周期、频率、占空比、对外输出电压详解
热门文章
- 多级LC滤波器级联问题
- 国标GB28181协议视频智能分析平台EasyCVR,构建智慧企业AR云景解决方案
- mysql内存淘汰_从创建索引过程中内存变化来看SQL Server与MySQL的内存淘汰算法
- 【Matlab电力负荷预测】日特征气象因素支持向量机SVM电力负荷预测【含源码 1612期】
- 【C++】1018 锤子剪刀布 (20 分)
- # 英语听抄 (英)
- PDF分割合并工具 免费,绿色软件
- (学习力+思考力) x 行动力,技术人成长的飞轮效应总结
- 计算机应用当兵分配到哪,参军是怎么分配省份的 当兵会被分配到哪里
- 荐:Java常见设计模式