☰
2020年Arch Linux与Windows 10双系统LVM安装实战指南
2026/10/17 17:07:15 网站建设 项目流程

1. 为什么2020年还要折腾双系统加LVM

先把时间线拉回到2020年年中。那会儿我手头的主力机是一台2017款的轻薄本,配置是i5-7200U加8GB内存,原装一块256GB的固态。日常写代码、跑虚拟机、偶尔剪点小视频,Windows 10用着其实还行,但有几个场景实在忍不了:一是编译大型项目时,Windows下的文件系统性能拖后腿,同样的代码在Linux下编译能快将近三分之一;二是做服务端开发时,Docker在Windows上的体验总隔着一层,WSL2那时候刚出来不久,稳定性还差点意思;三是我想把开发环境和日常娱乐彻底分开,避免哪天系统崩了连个救急的都没有。

于是双系统的念头就冒出来了。但真正让我决定上LVM的,是另一件事。之前我试过传统分区方案装双系统,结果有一次手贱调整分区大小,把引导搞挂了,折腾了大半天才恢复。那次之后我就想,能不能有一种方案,让分区调整这件事变得灵活一点,不用每次都提心吊胆。LVM(逻辑卷管理)就是答案。它把物理磁盘抽象成卷组,再在卷组上划分逻辑卷,扩容缩容都方便得多,而且支持快照,做系统备份和回滚的时候特别省心。

这篇文章要聊的,就是怎么在一台机器上同时装Arch Linux和Windows 10,并且在Arch这边用LVM管理磁盘。我会把整个流程拆开,从分区规划、引导方式选择,到LVM的具体配置、系统安装、引导器设置,再到装完之后可能遇到的各种坑,都过一遍。适合有一定Linux基础、想认真折腾一次双系统的朋友参考。如果你是完全的新手,建议先拿虚拟机练练手,别直接上真机。

提示:本文基于2020年7月左右的Arch Linux安装镜像和当时的软件版本撰写,部分命令和包名可能随版本更新有变化,操作时请以官方Wiki为准。

2. 装之前先把这些事想清楚

2.1 引导方式:UEFI还是Legacy

这是第一个要做的决定,而且一旦定了后面很难改。2020年的机器基本都支持UEFI,Windows 10也早就默认用UEFI引导了。我的建议是,只要你的机器支持UEFI,就果断选UEFI,别碰Legacy BIOS。原因有几个:UEFI启动更快,支持GPT分区表(大容量磁盘必须),而且引导管理更规范,不容易出现引导互相覆盖的问题。

具体怎么判断?进BIOS设置界面,看有没有“UEFI Boot”或者“Boot Mode”之类的选项。如果有,选UEFI。另外,Windows 10的安装盘也要用UEFI模式启动,否则装出来的Windows是Legacy引导的,跟Arch的UEFI引导混在一起会很麻烦。

注意:有些机器默认开启了Secure Boot,装Arch之前需要先关掉。Arch的引导器虽然也支持Secure Boot,但配置起来比较繁琐,第一次装建议先关掉,装完再考虑要不要开。

2.2 分区方案:给LVM留足空间

分区规划是双系统里最容易翻车的地方。我的思路是这样的:Windows 10单独占一块区域,用NTFS文件系统;Arch Linux这边用LVM,把根分区、home分区、swap都放在逻辑卷里。这样两边的文件系统互不干扰,Windows那边出问题不会影响Arch,反过来也一样。

具体分区表大概长这样(假设磁盘是512GB):

分区大小类型用途
/dev/sda1100MBEFI SystemEFI引导分区,两个系统共用
/dev/sda216MBMicrosoft ReservedWindows保留分区
/dev/sda3200GBNTFSWindows系统盘
/dev/sda4剩余空间Linux LVMArch的LVM物理卷

EFI分区共用是UEFI双系统的标准做法,两个系统的引导文件都放在这个分区的不同目录下,互不冲突。Windows保留分区是Windows自动创建的,不用管它。关键是最后那个LVM分区,我把剩下的所有空间都给它,然后在里面划分逻辑卷。

为什么这么分?因为LVM的好处就是灵活。比如我一开始给根分区分了50GB,后来发现不够用,可以直接在线扩容,不用重启也不用担心数据丢失。home分区和swap也是同理,想调多大调多大。传统分区方案就没这么方便了,调整分区大小得用Live USB启动,还有数据丢失的风险。

2.3 安装顺序:先Windows后Arch

这个顺序很重要。Windows的安装程序有个坏习惯,它会自动覆盖EFI分区里的引导项,如果你先装Arch再装Windows,Windows会把Arch的引导覆盖掉,你得重新配置。反过来先装Windows,再装Arch,Arch的引导器(比如GRUB)能自动识别Windows的引导项,省事很多。

所以流程是:先用Windows安装盘装好Windows 10,确认能正常启动,然后再用Arch的安装盘装Arch。装Arch的时候,GRUB会自动扫描EFI分区,找到Windows的引导文件,把它加到启动菜单里。

2.4 备份,备份,还是备份

我知道这话听起来像废话,但我还是要说。装双系统涉及分区操作,一旦手滑选错磁盘,整个盘的数据就没了。我自己的做法是,装之前把重要数据全部拷到移动硬盘上,然后用另一台电脑确认备份能正常读取。别嫌麻烦,真出事的时候你会感谢自己。

另外,如果你现在的机器上已经有Windows并且不想重装,那分区的时候要特别小心,别动到Windows所在的分区。可以用Windows自带的磁盘管理工具压缩出空间,或者用GParted之类的工具调整分区大小。但记住,调整分区大小有风险,操作前一定要备份。

3. 一步步把系统装进LVM里

3.1 制作安装盘和启动

Arch的安装盘制作很简单,从官网下载ISO文件,然后用dd命令写入U盘:

dd if=archlinux-2020.07.01-x86_64.iso of=/dev/sdX bs=4M status=progress

注意把/dev/sdX换成你的U盘设备名,别写错了,写错就把别的盘格了。写完以后,重启机器,进BIOS设置U盘启动,记得选UEFI模式。

启动后你会看到一个命令行界面,这就是Arch的Live环境。先确认一下网络能不能用:

ping -c 3 archlinux.org

如果通,就可以继续。如果不通,有线网一般插上就能用,无线网需要用iwctl连接:

iwctl station wlan0 scan station wlan0 get-networks station wlan0 connect "你的WiFi名称" exit

3.2 分区和LVM配置

先用lsblk看看磁盘情况:

lsblk

确认目标磁盘是/dev/sda还是/dev/nvme0n1。然后用cfdisk或者parted分区。我习惯用cfdisk,界面直观:

cfdisk /dev/sda

按照前面说的方案,创建四个分区:EFI分区100MB,Microsoft Reserved 16MB,Windows NTFS分区200GB,剩下的给Linux LVM。注意把LVM分区的类型设为“Linux LVM”,在cfdisk里对应的代码是8e。

分完区后,创建LVM结构:

pvcreate /dev/sda4 vgcreate vg0 /dev/sda4 lvcreate -L 50G vg0 -n root lvcreate -L 8G vg0 -n swap lvcreate -l 100%FREE vg0 -n home

这几条命令的意思是:先把/dev/sda4初始化为物理卷(PV),然后创建一个叫vg0的卷组(VG),接着在vg0上创建三个逻辑卷(LV):root给50GB,swap给8GB,剩下的全给home。

为什么swap给8GB?因为我的机器内存是8GB,swap一般设成跟内存一样大或者略大,方便休眠。如果你内存更大,比如16GB,swap可以设小一点,比如4GB到8GB就够了。home分区给剩余所有空间,因为用户数据通常最多。

格式化这些逻辑卷:

mkfs.ext4 /dev/vg0/root mkfs.ext4 /dev/vg0/home mkswap /dev/vg0/swap swapon /dev/vg0/swap

EFI分区也要格式化,注意用FAT32:

mkfs.fat -F32 /dev/sda1

3.3 挂载和安装基本系统

挂载逻辑卷:

mount /dev/vg0/root /mnt mkdir /mnt/home mount /dev/vg0/home /mnt/home mkdir /mnt/boot mount /dev/sda1 /mnt/boot

然后安装基本系统:

pacstrap /mnt base linux linux-firmware vim

这里我加了vim,因为后面要编辑配置文件,vi用不惯的话可以换成nano。如果你需要其他文件系统工具,比如btrfs-progs或者xfsprogs,也可以在这里一起装上。

生成fstab:

genfstab -U /mnt >> /mnt/etc/fstab

这一步很重要,它会把当前挂载的配置写入fstab,系统启动时靠这个文件知道该挂载哪些分区。生成后建议cat一下看看内容对不对:

cat /mnt/etc/fstab

3.4 chroot进去做基础配置

arch-chroot /mnt

设置时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc

设置locale,编辑/etc/locale.gen,取消en_US.UTF-8和zh_CN.UTF-8前面的注释,然后运行:

locale-gen echo LANG=en_US.UTF-8 > /etc/locale.conf

设置主机名:

echo archlinux > /etc/hostname

编辑/etc/hosts,加上:

127.0.0.1 localhost ::1 localhost 127.0.1.1 archlinux.localdomain archlinux

设置root密码:

passwd

3.5 安装引导器GRUB

先装必要的包:

pacman -S grub efibootmgr os-prober

然后安装GRUB到EFI分区:

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

生成GRUB配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

如果os-prober能识别到Windows,你会在输出里看到“Found Windows Boot Manager”之类的字样。如果没有,检查一下Windows的EFI分区是否挂载了,或者手动运行os-prober看看。

提示:有些情况下os-prober默认是关闭的,需要在/etc/default/grub里加上GRUB_DISABLE_OS_PROBER=false,然后重新生成配置。

3.6 收尾和重启

退出chroot,卸载分区,重启:

exit umount -R /mnt reboot

重启后应该能看到GRUB菜单,里面有Arch和Windows两个选项。选Arch进去,用root登录,然后创建普通用户、装桌面环境、配置网络,这些就是常规的Arch配置流程了,不在本文重点范围内。

4. 装完之后可能遇到的坑

4.1 GRUB找不到Windows引导

这是最常见的问题。原因通常是os-prober没有正确识别Windows的EFI文件。排查步骤:先确认Windows的EFI分区挂载了没有,Windows的引导文件一般在EFI分区的/EFI/Microsoft/Boot/bootmgfw.efi。如果这个文件存在,但os-prober还是找不到,可以手动在/etc/grub.d/40_custom里添加启动项:

menuentry "Windows 10" { insmod part_gpt insmod fat search --no-floppy --fs-uuid --set=root XXXX-XXXX chainloader /EFI/Microsoft/Boot/bootmgfw.efi }

XXXX-XXXX是EFI分区的UUID,用blkid命令可以查到。改完以后重新运行grub-mkconfig。

4.2 时间不同步

Windows和Linux对硬件时钟的理解不一样。Windows默认把硬件时钟当本地时间,Linux默认当UTC。双系统下会出现时间差8小时的问题。解决办法有两种:一是让Linux也用本地时间,编辑/etc/adjtime,把UTC改成LOCAL;二是让Windows用UTC,需要改注册表。我一般选第一种,改Linux这边简单一点。

4.3 LVM逻辑卷扩容

用了一段时间发现根分区不够了,怎么办?LVM的好处就在这里。假设卷组vg0还有剩余空间,直接扩容:

lvextend -L +10G /dev/vg0/root resize2fs /dev/vg0/root

如果是xfs文件系统,第二条命令换成xfs_growfs /。整个过程可以在线操作,不用重启,也不影响正在运行的服务。

4.4 快照备份和回滚

LVM的快照功能是我最喜欢的功能之一。装系统之前先做个快照,万一装崩了可以直接回滚:

lvcreate -L 10G -s -n root-snapshot /dev/vg0/root

回滚的时候:

lvconvert --merge /dev/vg0/root-snapshot

重启后系统就恢复到快照时的状态了。注意快照空间要留够,如果快照满了会失效。

4.5 常见问题速查表

问题可能原因解决方法
GRUB菜单没有Windowsos-prober未启用或未识别检查EFI分区挂载,手动添加启动项
时间差8小时硬件时钟解释不一致改/etc/adjtime为LOCAL或改Windows注册表
根分区空间不足初始分配太小lvextend扩容,resize2fs调整文件系统
快照失效快照空间用完删除旧快照,重新创建时留足空间
无法启动Arch引导器配置错误用Live USB启动,chroot进去重新配置GRUB
Windows更新后引导丢失Windows覆盖了EFI引导项用Arch安装盘修复GRUB,或调整启动顺序

5. 几个让我少走弯路的实操心得

第一个心得是关于分区大小的。我一开始给根分区分了50GB,觉得足够了。结果装完桌面环境和常用开发工具后,只剩不到10GB。后来我重新调整,根分区至少给80GB,如果你要装很多大型软件或者Docker镜像,建议给100GB以上。home分区反而不用太大,因为大部分数据可以放在外置硬盘或者NAS上。

第二个心得是关于swap的。我一开始按内存大小给了8GB swap,后来发现根本用不完。如果你不打算用休眠功能,swap给2GB到4GB就够了,省下来的空间给根分区更实在。但如果你要用休眠,swap必须大于等于内存大小,否则休眠会失败。

第三个心得是关于EFI分区大小的。100MB在2020年勉强够用,但如果你以后要装多个系统或者多个内核,可能会不够。我现在建议EFI分区至少给256MB,512MB更保险。反正现在磁盘大,这点空间不算什么。

第四个心得是关于备份的。LVM快照虽然方便,但它不是真正的备份。快照和原卷在同一块物理磁盘上,如果磁盘坏了,快照也跟着完蛋。真正的备份要放在另一块磁盘或者远程存储上。我现在的做法是,每周用rsync把home分区同步到移动硬盘,重要数据再额外传一份到云存储。

第五个心得是关于文档的。装系统的时候会遇到各种问题,解决之后一定要记下来。我习惯用Markdown写一个安装笔记,把分区方案、命令、遇到的问题和解决方法都记下来。下次再装的时候直接翻笔记,省时省力。而且写笔记的过程本身也是梳理思路的过程,能帮你发现一些当时没注意到的细节。

最后说一个关于心态的。装双系统这件事,第一次可能会花好几个小时,中间可能遇到各种报错,这都很正常。别急,遇到问题先看错误信息,然后查Arch Wiki,大部分问题上面都有答案。实在搞不定就去论坛提问,但提问的时候要把你的操作步骤、错误信息、已经尝试过的解决方法都写清楚,这样别人才好帮你。装系统这件事,折腾本身就是学习的过程,每解决一个问题,你对系统的理解就深一层。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询