
给一台已经装着 Windows 10 的电脑再塞一个 CentOS 7 进去做成双系统安装这事我在不同机器上前后折腾过七八次从老款 ThinkPad 到自组台式机、从纯机械盘到 NVMe 固态都试过踩的坑基本能凑成一册小册子。很多人对双系统安装的想象是分个区、插个 U 盘、下一步下一步就完事结果卡在第一步——压缩磁盘时提示可用空间不足明明 C 盘还剩几百个 G。也有人装完了重启直接进不去 Windows或者反过来 CentOS 黑屏最后只能重装。这篇就按我自己的操作习惯把 Windows10 加 CentOS7 的双系统安装从头到尾捋一遍磁盘怎么规划、U 盘启动盘怎么做、UEFI 下 ESP 分区不够怎么办、GRUB 引导怎么调默认项、装完之后网卡名字为什么不是 eth0 这些实际问题都会讲到。零基础的朋友照着走能走完做过几次的老手可以直奔避坑那几节挑自己需要的。1. 动手前先想明白真机双系统值不值得做1.1 真机双系统、虚拟机和 WSL 的真实差别先把话说明白双系统安装不是唯一解也不一定是最优解。你要是只想跑跑 Linux 命令、学学 Shell 或者搭个开发环境虚拟机和 WSL 的性价比高得多。我用 VMware 和 VirtualBox 都跑过 CentOS7好处是随开随用、搞坏了直接删掉重来完全不担心影响宿主机坏处也很明显虚拟机吃内存、吃 CPU嵌套虚拟化场景下性能损耗能到百分之二三十测 IO 密集型任务、测驱动、测内核模块这类需求基本没法做。WSL 则是另一个路子Windows10 上装个 WSL 子系统很快WSLg 还能跑图形界面日常敲命令、写脚本的体验相当顺。但它的本质是微软提供的一个兼容层内核由微软维护你没法真正编译一个自定义内核装上去也没法完整复现一台 CentOS 服务器的启动流程、systemd 行为、SELinux 策略。所以凡是涉及系统管理、运维实操、内核调试、服务部署这类要真环境的需求真机双系统安装还是有它的位置。真机双系统的核心价值就三条性能无损、环境真实、能练手。你装的 CentOS7 就是一台货真价实的服务器环境跟机房里的机器行为一致。代价是操作有风险分区这步一旦弄错Windows 里的数据可能一起没了所以后面我会反复强调备份。1.2 哪些机器、哪些人不建议折腾双系统有三种情况我劝你别动。第一硬盘总容量小于 256G 的机器。Windows10 本身占三四十个 G加上你的软件、资料再切出六七十个 G 给 CentOS7两边都紧巴巴用起来难受。第二只有一块机械盘的老机器。机械盘上做分区操作本来就慢压缩卷时受阻的概率也高而且你来回切换系统机械盘开机进系统都要等一两分钟体验很差。第三也是最重要的机器里有不能丢的数据且你懒得备份。双系统安装涉及分区表改动这是全流程里风险最高的动作。我可以负责任地说只要动了分区就有概率出意外跟技术熟练度关系不大跟磁盘状态关系很大。数据先拷到移动硬盘或者云端这一步省不得。如果你属于上面任何一种建议换个思路加一块硬盘单独装 CentOS或者干脆用虚拟机。加硬盘这个方案其实很香一百多块买块固态插上去单独装 CentOS7两块盘各自独立引导互不干扰比在一块盘上分区省心太多。这个后面会单独说。1.3 你的机器是什么引导方式先查清楚双系统安装里最容易被忽略、又最容易翻车的就是引导方式。你得先搞清楚自己的 Windows10 是 UEFI 引导还是 Legacy BIOS 引导分区表是 GPT 还是 MBR这两个信息决定了后面 CentOS7 怎么装、引导往哪写。最省事的查法是 Windows 里按 WinR输入 msinfo32 回车看BIOS 模式这一项写 UEFI 就是 UEFI 引导写传统就是 Legacy。再看分区样式那一栏是 GPT 还是 MBR。这两项信息组合起来大致是以下四种情况。引导方式分区表出现的概率装 CentOS7 要注意什么UEFIGPT近五年新机器基本都是ESP 分区空间可能不够Secure Boot 建议关LegacyMBR老机器常见引导写 MBR分区用标准分区更稳UEFIMBR少见但存在兼容模式导致的混搭建议改装成 UEFIGPTLegacyGPT手动改造过才会出现需要额外的 bios_grub 分区新手别碰我遇到过最多的坑就是 UEFIGPT 这一组问题出在 ESP 分区上这个后面会详细讲。还有两个东西动手前必须确认一是 Secure Boot 安全启动CentOS7 对这个支持有限建议进 BIOS 关掉二是 BitLocker 或者设备加密Win10 专业版有些机器默认开启你一动分区重启时系统会要求输入恢复密钥很多人到这一步直接懵了。动手前先去管理 BitLocker里把加密暂停或者关闭解密完成后再操作。2. 开工准备镜像、启动盘和分区规划2.1 CentOS7 镜像从哪拿怎么校验CentOS7 的 ISO 我一直从国内镜像站拿速度快也不用担心下载中断。清华的 TUNA 镜像站、阿里云的镜像站都有完整的 centos 目录路径大致是 centos/7/isos/x86_64/里面会列出几个版本推荐选 CentOS-7-x86_64-DVD 那个它是完整版包含 GNOME 桌面和常用软件包离线安装时最省事如果只想要最小化系统可以选 Minimal 版但装完之后很多东西得联网补网络不通的机器就别选它。下载完一定要校验别嫌麻烦。镜像站同目录下有个 sha256sum 文件下载下来和你的 ISO 一起放同一目录在 Linux 或 Git Bash 里执行 sha256sum CentOS-7-x86_64-DVD-xxxx.iso对一下字符串是否一致。校验通不过说明下载损坏重下。这一步能省掉后面安装到一半报介质检查失败的尴尬。CentOS7 已经在 2024 年 6 月结束维护官方源的软件包不再更新但这不影响它作为学习环境的价值你在系统里把 yum 源换成国内镜像站的 centos-vault 或者阿里云的归档源就行这个后面会讲怎么配。2.2 启动盘制作的工具选择与参数U 盘至少 8G里面数据先备份因为写入过程会格式化。工具我推荐两个Rufus 和 balenaEtcher。Rufus 在 Windows 上跑体积小、免安装参数可控性最强balenaEtcher 界面更傻瓜基本是选镜像、选盘、点开始三步。用 Rufus 的时候有三个参数必须选对。分区类型要选 GPT对应你的 UEFI 机器目标系统选 UEFI文件系统它会自动帮你选如果你的是 Legacy 机器分区类型选 MBR目标系统选 BIOS。选错了会导致开机从 U 盘启动时直接跳过、找不到引导。另一个小细节是写入完成后 Rufus 可能会问你要不要用 ISO 镜像模式还是 DD 模式CentOS7 用 ISO 模式就够了。顺便提一句制作启动盘这一步有很多人卡在U 盘插上去 Rufus 识别不到。常见原因是 U 盘是 USB3.0 但插在了机箱前面的接口或者是 U 盘本身分区表损坏。换到机箱后面板、或者先在磁盘管理里把 U 盘所有分区删掉重建一个再试基本能解决。2.3 分区方案设计给 CentOS7 留多少、怎么切这是整个双系统安装里最需要动脑子的一步。先说留多少。我的经验是给 CentOS7 至少留 60G其中系统盘 50G、剩下的给 home。如果你要装 GNOME 桌面、装开发工具链、还要跑数据库那留 80 到 100G 更保险。Windows 那边至少留 100G 可用空间不然用不了多久就满。再说怎么切。我给一个我自己常用的分区表以总空间 80G 为例。挂载点容量文件系统说明/boot1Gext4存放内核和 initramfs1G 是 UEFI 环境下的稳妥值/boot/efi沿用现有 ESPEFI System Partition关键挂载到 Windows 已有的 ESP绝对不要格式化swap8Gswap常规用途 4 到 8G 够用要休眠才需要等于内存大小/50Gxfs系统根目录CentOS7 默认文件系统就是 xfs/home剩余空间xfs用户数据独立出来以后重装系统不用动它这里有一个很多人问的问题为什么 /boot 要 1G传统 Legacy 环境下 500M 绰绰有余但 UEFI 环境下 CentOS7 需要往 ESP 里写内核文件同时 /boot 里也要放内核加上后续系统更新会累积多个内核版本500M 有时候会被撑爆。给 1G 是一劳永逸的做法多占几百兆而已。swap 的大小也有讲究。如果你要跑一些对内存敏感的服务或者机器内存只有 8G那 swap 给到 8G 实用如果内存 16G 以上且不做休眠4G 也够甚至很多人直接给 2G。CentOS7 官方文档的老建议是内存小于 8G 时 swap 等于内存的 1.5 到 2 倍但放今天来看不必教条按实际用途给就行。还有一个决策点用标准分区还是 LVM。LVM 的好处是以后能在线扩容、能做快照缺点是 Windows 认不出 LVM你得靠 CentOS 自己管理。我的建议是如果你就是纯练手标准分区更简单直接出问题好排查如果你打算长期用、以后可能加硬盘扩容那就 LVM。新手第一次装标准分区上手更快。2.4 Windows 侧的几个必做动作在压缩磁盘之前Windows 这边有四个动作必须做我按顺序列一下每一条都对应一个实际的坑。第一关闭系统保护卷影副本。它会在磁盘上生成还原点这些还原点属于不可移动文件会直接导致压缩卷时能挤出的空间远小于预期。控制面板里搜系统进系统保护把 C 盘的保护关掉。第二关闭页面文件。虚拟内存文件 pagefile.sys 动不动就几十个 G而且位置不固定。进高级系统设置性能选项里把虚拟内存设为无分页文件重启生效。装完双系统后你可以再改回来。第三关闭休眠。管理员权限开 CMD执行 powercfg /h off把 hiberfil.sys 删掉。这个文件大小等于你的物理内存16G 内存的机器它就是 16G白占空间。第四关闭快速启动。快速启动是 Win10 的一个混合关机特性它会锁住一部分磁盘状态对分区操作不友好。控制面板电源选项里找到启用快速启动取消勾选。做完这四步再对 C 盘做一次碎片整理机械盘或者 TRIM固态然后才去磁盘管理里压缩卷。这个顺序别搞反否则你会遇到那个经典的可压缩空间只有几十 G的提示。3. 实操主线从压缩卷到系统装完3.1 在 Windows10 里压缩出空闲空间右键此电脑→管理→磁盘管理找到 C 盘右键选压缩卷。系统会先扫描等一会儿然后弹出一个框让你填要压缩多少 MB。这里填的是你要给 CentOS7 的空间大小比如 80G 就填 8192080 × 1024。填完点压缩你会看到 C 盘右侧多出一块未分配的空间它是黑色的不属于任何分区。这块空间就是给 CentOS7 准备的。如果压缩卷提示可用压缩空间不足回到上一步检查那四个动作是不是都做了。还有一个隐藏原因是磁盘上有不可移动的系统文件正好卡在你想要压缩的位置这种情况即使关了所有能关的东西也没用解决方案是把不可移动文件推到磁盘尾部或者干脆用第三方分区工具比如 DiskGenius、傲梅分区助手来做无损调整。第三方工具能解决但动了分区表就有风险一定要先备份。压缩完不用在 Windows 里新建分区更不要把它格式化成 NTFS保持未分配状态就行因为 CentOS7 安装程序需要直接接管这块空间。3.2 BIOS 设置与从 U 盘启动重启开机时狂按进 BIOS 的键。不同品牌不一样联想一般是 F2 或 FnF2戴尔是 F2华硕是 Del 或 F2惠普是 F10神州笔记本常见是 F2 或者 Del。进不去就在开机第一屏看提示或者直接按 F12 调出启动菜单。进 BIOS 后要改三处。第一Secure Boot 设为 DisabledCentOS7 的引导没做微软签名开着安全启动会直接拒绝加载。第二启动模式确认是 UEFI如果你是 Legacy 机器就跳过这条别乱改。第三把 U 盘调到启动顺序第一位或者直接按 F12 从启动菜单里选 U 盘。有个细节要注意U 盘可能会在启动菜单里出现两个条目一个带UEFI前缀一个不带。你的机器是 UEFI 引导就选带 UEFI 的那个选错了会进不去安装界面。这一步选错的表现是屏幕一闪又回到启动菜单或者提示No bootable device。3.3 安装引导与软件选择从 U 盘启动后会看到 CentOS7 的引导菜单用上下键选 Install CentOS 7回车。接下来是语言选择选中文简体或者英文都行我个人习惯选英文因为报错信息搜起来方便。然后进到安装总览界面这里有一堆选项要配我按重要性排个序。软件选择这一项别忽略。默认是最小化安装装完只有命令行连 yum 都在但很多常用工具没有。如果你想用图形界面选GNOME 桌面同时把右侧的开发工具勾上这样后面编译东西不用再补包。纯做服务器练习的话选基础设施服务器或者最小化安装都可以看你需求。网络和主机名这一项右下角有个开关打开它安装过程就能联网装完之后网卡默认就是启用的省得你再去改 ONBOOT。主机名顺手起一个比如 centos-dev。时间和日期选亚洲/上海如果开了网络同步会自动校准。安装位置是重头戏放到下一节单独说。全部配完点开始安装趁安装过程设置 root 密码、建一个普通用户都勾上将此用户设为管理员这样这个用户能用 sudo。3.4 手动分区实操那一步千万别点错进安装位置先选中那块空闲空间所在的磁盘比如 /dev/nvme0n1 或 /dev/sda然后一定要选我要配置分区不要用自动分区。自动分区会尝试重新规划整块盘很可能把你的 Windows 分区也动了这个风险不值得冒。点进去之后分区方案选标准分区想用 LVM 就选 LVM。然后点号逐个添加挂载点。第一个加 /boot1Gext4。第二个加 /boot/efi注意这里不要填容量而是从下拉列表里选中已经存在的那个 EFI System Partition通常 100M 到 300M 大小并且不要勾选重新格式化。这一步是整个双系统安装里最关键的格式化 ESP 会直接让 Windows 无法引导变成两个系统都进不去。第三个加 swap容量填 81928G文件系统选 swap。第四个加 /50Gxfs。第五个加 /home容量不填留空表示用掉剩余全部空间。全部分配完检查一下可用的空间应该显示为 0 或者接近 0确认没有把 Windows 的分区划进来。然后在左下方的引导加载程序位置UEFI 环境下默认会装到那块磁盘的 ESP 上保持默认即可Legacy 环境下默认是 MBR也是默认即可。这里有两个经典的报错要提前说。如果提示无法找到合适的 stage1 设备或者you have not created a bootloader stage1 target device通常是因为你在 GPT 磁盘上用 Legacy 方式安装或者反过来磁盘类型和引导方式对不上。解决方案是回 BIOS 统一引导方式或者在分区时单独建一个 1M 的 bios_grub 分区。如果提示EFI System Partition 空间不足那就是 Windows 原本的 ESP 太小了这个情况的处理办法我在下一章讲。点完成→接受更改回到安装总览点开始安装。等待二三十分钟看你机器性能。装完点重启记得拔掉 U 盘。3.5 引导与默认启动项调整重启之后理论上会看到 GRUB 的菜单里面应该有两项CentOS Linux 和 Windows Boot Manager。如果能进 CentOS说明引导没问题第一关过了。但如果你是 UEFI 机器有可能重启后直接进了 WindowsGRUB 菜单压根没出现。原因通常是 BIOS 启动顺序里 Windows Boot Manager 排在了 centos 前面。解决方案有两个一是进 BIOS 把 centos 调到第一位二是在 Windows 里用管理员 CMD 执行 bcdedit /set {bootmgr} path \EFI\centos\grubx64.efi 把默认引导指向 GRUB。我更推荐第一种改 BIOS 不动系统文件更干净。GRUB 菜单里默认是 5 秒自动进 CentOS如果你日常主要用 Windows可以把默认项改成 Windows。CentOS 里编辑 /etc/default/grub把 GRUB_DEFAULT 从 0 改成 saved然后执行 grub2-set-default Windows Boot Manager 指定默认项最后执行 grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成配置UEFI 环境下 CentOS7 的 GRUB 配置文件在 /boot/efi/EFI/centos/grub.cfg但一般用上面这条命令它会自动处理。如果重启后看到的是 grub rescue 提示符说明 GRUB 找到了引导记录但找不到模块文件。这种情况多半是 ESP 里只写了一半的引导文件。修复办法是用 CentOS 安装 U 盘进救援模式挂载原系统后执行 grub2-install 重装引导。这个流程稍微复杂我在下一章的问题排查里展开说。4. 装完别急着用先把这几个配置收尾4.1 CentOS7 网络配置与那个 ens33 的由来第一次进 CentOS7 你会发现网卡名字不是 eth0而是 ens33 或者 enp3s0 这种看着别扭的名字而且默认没配 IP。这不是 bug是 CentOS7 引入的一致性网络设备命名规则目的是让网卡名字跟物理位置绑定避免 eth0 一会儿是这块卡一会儿是那块卡的混乱。习惯了就好不建议改回 eth0那需要改内核参数容易引出别的问题。配静态 IP 就是编辑 /etc/sysconfig/network-scripts/ifcfg-ens33文件名里的 ens33 换成你实际的网卡名用 ip addr 命令能看到。要改的字段有这么几个BOOTPROTO 改成 staticONBOOT 改成 yes然后加上 IPADDR、PREFIX或 NETMASK、GATEWAY、DNS1。改完执行 systemctl restart network 生效再用 ip addr 和 ping 验证一下。要是重启网络报错八成是配置文件里有拼写错误或者网卡名字写错了。CentOS7 的 network 服务报错信息还算清楚照着提示改就行。另外从图形界面切到命令行配置后NetworkManager 可能会跟 network 服务抢管理权稳妥做法是 systemctl disable NetworkManager 关掉它只用 network 服务。4.2 双系统时间不同步的根治方案这是个几乎百分之百会遇到的坑。你从 Windows 重启进 CentOS会发现系统时间差了 8 小时。原因在于 Windows 默认把主板硬件时钟当本地时间读而 Linux 默认把硬件时钟当 UTC 读两个系统的理解不一致来回切换就来回错。解决方案有两条选一条就行。方案一是在 CentOS 里执行 timedatectl set-local-rtc 1 --adjust-system-clock让 CentOS 也按本地时间读硬件时钟跟 Windows 保持一致。方案二是在 Windows 注册表里加一个键让 Windows 按 UTC 读路径是 HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation新建一个 DWORD 值叫 RealTimeIsUniversal值设为 1然后重启 Windows 并把 w32time 服务关掉。我一般用方案一改 Windows 注册表毕竟有心理负担改 Linux 一条命令就完事。不过如果你还同时用着别的不需要动的 Linux 机器方案二更统一。4.3 yum 源替换和基础环境搭建CentOS7 停维之后默认的 mirrorlist 地址基本失效直接 yum install 大概率报错。解决办法是把源换到国内的归档镜像。先把 /etc/yum.repos.d/CentOS-Base.repo 备份一份然后把里面的 mirrorlist 和 baseurl 指向阿里云或清华的 centos-vault 地址保存后执行 yum clean all 和 yum makecache再加一个 epel-release常用的开发包就都能装了。基础工具建议一次装齐vim、wget、curl、net-tools、bash-completion、telnet、unzip、git、gcc、make。这几样装完CentOS7 就能当日常开发环境用了。如果你打算在上面跑开发项目、部署服务那再按需装 Docker、Nginx 之类CentOS7 上装 Docker 要注意版本太老的 Docker 跟新内核不兼容这部分以后有机会单独开一篇说。5. 常见问题排查和我的避坑心得5.1 引导类问题速查表双系统安装里出问题频率最高的就是引导。我把最常见的几种情形整理成表遇到问题先对号入座。现象可能原因处理办法重启直接进 Windows没有 GRUB 菜单BIOS 启动顺序里 Windows 在前进 BIOS 把 centos 调到第一或用 bcdedit 改默认引导出现 grub rescue 提示符GRUB 引导文件不全或 ESP 挂载被误格式化用安装 U 盘救援模式挂载原系统后 grub2-install 重装GRUB 菜单里没有 Windows 项os-prober 没检测到或 Windows 分区是 BitLocker 加密的CentOS 里执行 grub2-mkconfig 重新扫描先关掉 BitLocker装完 CentOS 进不去卡在 dracut 提示符根分区 UUID 对不上或分区方案和内核参数不匹配检查 grub.cfg 里的 root 参数确认 UUID 正确两个系统都进不去ESP 被格式化了用 Windows 安装盘修复引导再重装 CentOS 引导这个表里最要命的是最后一条一旦 ESP 格式化Windows 和 CentOS 都起不来。修复办法是用 Windows10 安装 U 盘启动进修复模式命令行里执行 bootrec /fixboot、bootrec /rebuildbcd 两条命令重建 Windows 引导然后再回 CentOS 重装 GRUB。所以再强调一遍分区那一步看到 /boot/efi 一定要选不格式化。5.2 安装过程中的典型报错及应对除了引导安装过程本身也有几个高频报错。第一个是前面提到的无法找到合适的 stage1 设备根子是引导方式和分区表对不上。UEFI 机器就老老实实用 GPT 加 ESP不要混搭。第二个是 ESP 空间不足。Windows 默认给的 ESP 通常只有 100MCentOS7 往里面写内核和 grub 文件需要一定的空间如果 Windows 已经占了大部分就装不下了。解决办法是用 Windows 的 diskpart 或者第三方工具把 ESP 扩容到 300M 左右。扩容 ESP 需要先把它后面的分区往后挪属于无损调整但同样有风险务必先备份。懒得折腾的话还有一条路退回去用 Legacy 引导重装但那样 Windows 也得重装代价更大不如直接扩 ESP。第三个是安装过程中卡在正在安装引导加载程序这一步不动。这通常是 U 盘质量或者 ISO 校验不过关导致的重做启动盘、最好换一个 U 盘试试。5.3 我踩过之后才明白的几条经验第一条动手前先在虚拟机里完整走一遍流程。用 VMware 建一个 UEFI 虚拟机装一遍 Windows10 再装一遍 CentOS7把整个分区和引导流程跑通。虚拟机上搞坏了删掉重建只要几秒钟真机上搞坏了可能要重装一天的软件。这个演练花你两个小时能省掉后面不知道多少个焦虑的夜晚。第二条分区方案写纸上。别在安装向导里临时想这个分多大那个分多大提前把挂载点、容量、文件系统列清楚安装的时候照着填。安装程序的分区界面没法撤销你手抖点错一下可能就把 Windows 分区标成了待格式化。第三条宁可加一块硬盘也别在系统盘上硬切。我后来的习惯是凡是长期要用的双系统机器直接加一块固态单独装 CentOS装的时候把引导写到这块盘自己的 ESP 上Windows 那块盘的引导完全不动。开机时用 BIOS 的启动菜单选进哪个系统两套环境互相隔离拔了任何一块盘另一个都能正常开机。这个方案的成本就是一块硬盘的钱省的是折腾的心力。第四条别着急一次装到位。装完先重启三次每次都确认两个系统都能正常进、都能正常上网、都能正常关机。这三次通过之后再往 CentOS 里装你真正想用的东西。因为一旦开始装软件、改配置出问题了你会分不清是双系统的锅还是软件的锅。第五条CentOS7 停维之后新版本的内核和驱动跟它的兼容性会越来越差。如果你只是想学 Linux我建议顺势把 CentOS 换成它的下游替代品比如 Rocky Linux 或者 AlmaLinux装双系统的流程跟这篇讲的几乎一模一样分区规划、引导处理、时间同步那一套全都能复用只有软件源和镜像地址需要换一下。老版本留着当怀旧环境可以别在上面跑重要业务。最后再分享一个小技巧。如果你实在不想动分区又需要一块独立的 Linux 环境可以买一个 U 盘或者移动硬盘把它做成完整的 Linux 安装盘CentOS7 或者别的发行版都行。用这个 U 盘启动电脑就是一个完整独立的系统拔掉 U 盘 Windows 这边什么痕迹都没有BIOS 里设一下启动顺序就能自由切换。这个方案我用了很久特别适合不想承担任何分区风险的场景唯一的代价是 U 盘读写速度比固态慢一些日常敲命令、写代码完全够用。