恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Windows 10与Arch Linux双系统安装:LVM分区实战指南
首页
资讯中心
/
Windows 10与Arch Linux双系统安装:LVM分区实战指南
Windows 10与Arch Linux双系统安装:LVM分区实战指南
发布时间:2026/10/17 8:04:43
1. 为什么2020年还要折腾双系统加LVM先把时间线拉回到2020年7月。那会儿我手头有一台主力台式机配置不算顶配但够用一块512GB的NVMe固态装Windows 10另有一块1TB的机械盘长期闲置。日常写代码、跑虚拟机、做点轻量级的数据处理Windows用着也还行但每次开WSL或者Docker Desktop总感觉隔了一层纱——文件系统性能损耗、内存占用、还有偶尔抽风的网络端口映射都让我越来越想把Linux作为主力开发环境。可完全抛弃Windows又不现实。网银、某些只有Windows客户端的行业软件、还有偶尔要用的Adobe系工具都绑死在微软生态里。于是双系统成了唯一解。但普通双系统有个老问题分区一旦划死后期想调整根目录容量就非常痛苦。比如你一开始给根分区分了50GB结果半年后Docker镜像和node_modules把它撑爆了想扩容就得用Live USB启动、用GParted挪分区稍有不慎整个盘的数据都可能丢。LVMLogical Volume Manager逻辑卷管理就是来解决这个痛点的。它把物理磁盘抽象成卷组再在卷组上切逻辑卷逻辑卷的容量可以随时在线扩展甚至跨磁盘扩展。对于我这种“分区规划永远赶不上需求变化”的人来说LVM几乎是刚需。所以这套方案的核心思路是Windows 10照常装在NVMe上Arch Linux装在机械盘上并且在机械盘上启用LVM把根目录、home、swap都做成逻辑卷后期想怎么调就怎么调。这篇文章适合谁看如果你满足以下任意一条那接下来的内容应该对你有用正在用Windows但想认真学Linux的开发者已经装过普通双系统但被分区容量坑过的折腾党想了解LVM实际怎么落地而不是只看理论命令的运维新手。我会把整个安装过程拆开揉碎重点讲清楚每一步为什么这么做、哪里容易翻车、以及我实际踩过的坑。注意本文基于2020年7月左右的Arch Linux安装镜像和当时的Windows 10版本撰写部分命令和界面可能与最新版本有差异但核心逻辑和LVM操作是通用的。2. 装之前必须想清楚的几件事2.1 引导模式UEFI还是Legacy BIOS这是整个安装过程中第一个、也是最关键的一个决策点。2020年的主板基本都支持UEFIWindows 10默认也是UEFIGPT安装的。如果你强行把Arch装成Legacy BIOS模式就会出现两个系统引导方式不一致的问题轻则开机菜单混乱重则其中一个系统直接无法启动。我的建议很明确统一用UEFIGPT。检查方法很简单在Windows里按WinR输入msinfo32看“BIOS模式”那一行。如果是“UEFI”那就对了。同时确认磁盘分区表是GPT在磁盘管理里右键磁盘属性看“卷”标签页如果显示“GUID分区表GPT”就没问题。为什么强调这个因为UEFI模式下引导文件是放在一个叫ESPEFI System Partition的FAT32分区里的。Windows安装时会自动创建一个100MB左右的ESP分区。Arch Linux也需要把引导加载器装到这个ESP分区里才能被主板识别。如果ESP分区太小比如100MB同时装Windows Boot Manager和Linux的引导器可能会空间紧张但一般够用。我实测下来100MB的ESP装完Windows和systemd-boot后还剩60多MB完全没问题。2.2 磁盘布局NVMe给Windows机械盘给ArchLVM我的硬件配置是这样的磁盘容量用途分区方案NVMe SSD512GBWindows 10GPT含ESP、MSR、Windows主分区、恢复分区SATA HDD1TBArch LinuxGPT含独立ESP、LVM物理卷这里有个细节值得展开要不要给Arch单独建一个ESP分区有两种做法。一种是把Arch的引导器也装到Windows那个ESP分区里好处是只有一个ESP管理简单另一种是给Arch单独分一个ESP好处是两个系统完全隔离Windows更新或重装不会影响Arch的引导。我选了后者。原因是我之前有过一次惨痛经历Windows 10的大版本更新比如1903升1909有时会重建ESP分区内容把非微软的引导项清掉。虽然这种情况不常见但一旦发生Arch就进不去了得用Live USB修复。单独给Arch一个ESP分区后Windows再怎么折腾也动不到Arch的引导文件。具体做法是在机械盘最前面分一个512MB的FAT32分区标记为boot和esp。2.3 LVM的分层逻辑PV、VG、LV到底怎么对应很多人第一次接触LVM会被PV、VG、LV这三个缩写绕晕。我用一个生活化的类比来解释把物理磁盘想象成一块生地PVPhysical Volume就是你把这块地圈起来准备开发VGVolume Group是你在这块地上规划的开发区可以包含多块地LVLogical Volume则是在开发区里盖的不同楼有的做住宅home有的做商铺root有的做仓库swap。楼的大小可以随时调整只要开发区里还有空地。对应到我的方案PV/dev/sda2即机械盘上除ESP外的整个剩余空间VG命名为archvg包含上述PVLVroot30GB、home剩余大部分、swap8GB为什么swap要单独做一个LV而不是用swap文件因为LVM上的swap LV可以随时用lvextend扩容而swap文件在扩容时还需要先关闭swap、调整文件大小、再重新启用步骤更繁琐。另外如果你打算用休眠功能swap LV的UUID可以直接写进内核参数比swap文件更稳定。提示swap大小设多少合适如果你不打算休眠8GB足够应对日常内存压力如果要休眠swap至少要等于物理内存大小。我16GB内存设了8GB swap因为我不休眠只用来应急。3. 从Windows压缩卷到Arch启动U盘制作3.1 在Windows里腾出机械盘并确认ESP状态虽然Arch要装在机械盘上但Windows这边也需要做一点准备工作。首先确认机械盘在Windows里没有被占用或者存着重要数据——如果有先备份。然后打开磁盘管理把机械盘上的所有分区删掉变成“未分配”状态。这一步在Windows里就能做右键每个分区选“删除卷”即可。接着确认NVMe上的ESP分区状态。在磁盘管理里能看到一个约100MB的“EFI系统分区”它没有盘符这是正常的。你不需要动它只要确认它存在且健康即可。如果ESP分区被误删或者损坏Windows自己也启动不了所以千万别手贱去格式化它。还有一个容易被忽略的点关闭Windows的快速启动。这个功能会让Windows在关机时把内核状态写入休眠文件导致下次开机时磁盘处于“半锁定”状态Linux可能无法安全挂载NTFS分区。关闭方法控制面板→电源选项→选择电源按钮的功能→更改当前不可用的设置→取消勾选“启用快速启动”。这个操作对双系统稳定性影响很大我见过不少人因为没关这个导致Arch挂载Windows分区时报错。3.2 制作Arch启动U盘dd还是EtcherArch的ISO镜像可以从官方镜像站下载2020年7月那会儿最新版是2020.07.01。下载完后需要写入U盘。Windows下有两个常用工具Rufus和Etcher。我推荐Etcher因为它界面简单选镜像、选U盘、点Flash三步搞定而且写入后会校验避免因U盘质量问题导致安装中途失败。如果你在Linux环境下用dd命令更直接sudo dd ifarchlinux-2020.07.01-x86_64.iso of/dev/sdX bs4M statusprogress oflagsync注意/dev/sdX要换成你自己的U盘设备名千万别写错否则可能把系统盘覆盖了。oflagsync确保数据完全写入后再退出避免拔U盘时数据还没写完。U盘制作完成后重启电脑进BIOS设置U盘启动。这里有个细节确保BIOS里Secure Boot是关闭的。Arch的官方ISO不支持Secure Boot如果开着会直接黑屏或者报验证失败。关闭Secure Boot后从U盘启动你应该能看到Arch的启动菜单选第一项进入Live环境。3.3 进入Live环境后的第一件事确认网络和磁盘命名进入Live环境后你会看到一个root提示符。第一件事是确认网络连通因为安装过程中需要从远程仓库下载软件包。有线网络一般会自动通过DHCP获取IP用ping archlinux.org测试一下。如果是无线网络用iwctl连接iwctl station wlan0 scan station wlan0 get-networks station wlan0 connect 你的WiFi名称 exit网络通了之后用lsblk查看磁盘设备名。这一步非常重要因为后续所有分区操作都依赖正确的设备名。我的机器上NVMe是/dev/nvme0n1机械盘是/dev/sda。你的可能不同务必以lsblk输出为准。lsblk -f这个命令会列出所有磁盘及其分区、文件系统类型、UUID等信息。记下机械盘的设备名接下来要对它进行分区。4. 机械盘分区与LVM卷组搭建实操4.1 用parted给机械盘划出ESP和LVM物理卷我习惯用parted而不是fdisk因为parted对GPT的支持更直观。假设机械盘是/dev/sdaparted /dev/sda进入parted交互界面后依次执行mklabel gpt mkpart ESP fat32 1MiB 513MiB set 1 boot on set 1 esp on mkpart archlvm 513MiB 100% set 2 lvm on quit解释一下这几个命令。mklabel gpt把磁盘分区表设为GPT。第一个分区从1MiB开始到513MiB大小512MB类型fat32标记为boot和esp。第二个分区从513MiB到磁盘末尾标记为lvm表示这个分区将用作LVM物理卷。为什么ESP要从1MiB开始而不是0因为GPT分区表本身需要占用磁盘开头的一部分空间从1MiB开始是惯例避免对齐问题。分区完成后用partprobe /dev/sda让内核重新读取分区表然后用lsblk确认partprobe /dev/sda lsblk /dev/sda你应该能看到/dev/sda1512MBfat32和/dev/sda2约931GBlvm。4.2 创建PV、VG、LV命令背后的容量计算接下来是LVM的核心操作。先创建物理卷pvcreate /dev/sda2然后用这个PV创建卷组命名为archvgvgcreate archvg /dev/sda2现在到了分配逻辑卷的环节。我的规划是root 30GBswap 8GBhome用剩余所有空间。先创建root和swaplvcreate -L 30G archvg -n root lvcreate -L 8G archvg -n swap然后创建home使用卷组剩余空间的100%lvcreate -l 100%FREE archvg -n home注意这里用的是小写-l小写L而不是大写-L。-L后面跟具体大小如30G-l后面跟百分比或PE数量。100%FREE表示把卷组当前剩余的所有空闲空间都给home。创建完成后用lvs查看逻辑卷列表确认大小符合预期lvs你可能会注意到home的大小不是精确的“931GB减去30GB再减去8GB”而是会略小一些。这是因为LVM本身需要一些元数据空间而且PEPhysical Extent有最小分配单位默认4MB所以实际可用空间会有少量损耗。这是正常现象不用担心。4.3 格式化与挂载文件系统选择和挂载顺序逻辑卷创建好后需要格式化。root和home我用ext4这是最稳妥的选择性能稳定、工具链成熟、恢复手段多。swap用mkswapmkfs.ext4 /dev/archvg/root mkfs.ext4 /dev/archvg/home mkswap /dev/archvg/swapESP分区格式化为FAT32mkfs.fat -F32 /dev/sda1然后按顺序挂载。先挂rootmount /dev/archvg/root /mnt再挂home和ESPmkdir /mnt/home mount /dev/archvg/home /mnt/home mkdir /mnt/boot mount /dev/sda1 /mnt/boot最后启用swapswapon /dev/archvg/swap挂载顺序有讲究必须先挂root因为home和boot都是挂在root下面的子目录。如果先挂home再挂roothome会被root覆盖掉。这个坑我早期踩过当时纳闷为什么装完系统后home里空空如也其实就是挂载顺序错了。用lsblk确认挂载关系lsblk -f你应该能看到/mnt对应root LV/mnt/home对应home LV/mnt/boot对应sda1。5. 安装系统与引导配置的关键细节5.1 pacstrap装基础系统哪些包必须装挂载完成后用pacstrap安装基础系统pacstrap /mnt base linux linux-firmware lvm2 vim nano这里有几个包值得说明。base是Arch的最小基础系统包含bash、coreutils等核心工具。linux是内核linux-firmware是硬件固件无线网卡、显卡等需要。lvm2必须装否则重启后系统无法识别LVM逻辑卷直接进不了系统。vim和nano是编辑器装一个就行我习惯两个都装方便在不同场景下用。如果你用的是Intel或AMD的CPU还可以加上intel-ucode或amd-ucode来获取微码更新提升系统稳定性。无线网络用户还需要装iw和wpa_supplicant否则重启后连不上WiFi。pacstrap完成后生成fstab文件genfstab -U /mnt /mnt/etc/fstab-U表示用UUID而不是设备名来标识分区。为什么用UUID因为设备名如/dev/sda1可能会因为硬件变动或BIOS设置变化而改变UUID是分区的唯一标识更稳定。生成后建议用cat /mnt/etc/fstab检查一下确认root、home、swap、boot四项都在且没有重复或遗漏。5.2 chroot后的时区、语言和用户配置接下来chroot进新系统arch-chroot /mnt设置时区ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohchwclock --systohc把系统时间同步到硬件时钟。这里有个双系统的经典坑Windows默认把硬件时钟当作本地时间而Linux默认当作UTC。如果不处理两个系统的时间会差8小时。解决方法有两种一是让Linux也用本地时间timedatectl set-local-rtc 1二是让Windows用UTC需要改注册表。我选的是后者因为UTC更规范。在Windows里以管理员身份运行reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /d 1 /t REG_DWORD /f然后设置语言环境。编辑/etc/locale.gen取消en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8前面的注释然后运行locale-gen echo LANGen_US.UTF-8 /etc/locale.conf设置主机名echo archdesktop /etc/hostname设置root密码passwd创建普通用户并加入sudo组useradd -m -G wheel -s /bin/bash myuser passwd myuser然后编辑/etc/sudoers取消%wheel ALL(ALL) ALL前面的注释让wheel组用户可以使用sudo。5.3 装引导器systemd-boot与os-prober的配合引导器我选systemd-boot因为它简洁、与systemd集成好、配置文件简单。先安装bootctl --path/boot install这会把systemd-boot安装到ESP分区并创建默认的引导项。然后创建Arch的引导配置vim /boot/loader/entries/arch.conf内容如下title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root/dev/archvg/root rw注意root后面写的是LVM逻辑卷的路径/dev/archvg/root而不是UUID。这是因为LVM逻辑卷的UUID和普通分区UUID不同systemd-boot对LVM UUID的识别有时会出问题直接用卷组/逻辑卷名更可靠。前提是内核启动时能激活LVM这需要lvm2包提供的钩子。检查/etc/mkinitcpio.conf确保HOOKS行里lvm2在filesystems之前HOOKS(base udev autodetect modconf block lvm2 filesystems keyboard fsck)改完后重新生成initramfsmkinitcpio -P接下来让systemd-boot能识别Windows。安装os-proberpacman -S os-prober然后创建/boot/loader/entries/windows.conftitle Windows 10 efi /EFI/Microsoft/Boot/bootmgfw.efi这个路径是Windows Boot Manager在ESP分区里的标准位置。如果Windows是UEFI安装的这个文件一定存在。配置好后编辑/boot/loader/loader.confdefault arch.conf timeout 5 editor nodefault arch.conf设置默认启动Archtimeout 5给5秒选择时间editor no禁止在启动菜单里编辑内核参数防止误操作。退出chroot卸载分区重启exit umount -R /mnt reboot重启后你应该能看到systemd-boot的菜单包含Arch和Windows两个选项。6. 装完之后必做的收尾与LVM扩容演示6.1 网络、显卡驱动和中文环境重启进入Arch后第一件事是确认网络。有线网络一般即插即用无线需要装iw和wpa_supplicant然后用iwctl连接。如果你在pacstrap阶段没装这些可以用pacman -S iw wpa_supplicant补上。显卡驱动方面NVIDIA用户需要装nvidia和nvidia-utilsAMD用户装xf86-video-amdgpuIntel用户装xf86-video-intel。如果暂时不装图形界面这些可以跳过。中文环境需要装中文字体否则终端和浏览器里的中文会显示为方块pacman -S noto-fonts-cjk如果要用中文输入法可以装fcitx5和fcitx5-chinese-addons然后在~/.xprofile里配置环境变量。6.2 用lvextend给root扩容的完整流程现在来演示LVM的核心优势在线扩容。假设半年后你的root分区满了而home还有大量空闲空间。你可以从home“借”10GB给root。第一步缩小home文件系统。注意ext4支持在线缩小但为了安全建议先卸载homeumount /home e2fsck -f /dev/archvg/home resize2fs /dev/archvg/home 200G假设home原本210GB缩小到200GB。然后缩小home逻辑卷lvreduce -L 200G /dev/archvg/home第二步扩展root逻辑卷lvextend -L 10G /dev/archvg/root第三步扩展root文件系统。ext4支持在线扩展不需要卸载resize2fs /dev/archvg/root第四步重新挂载homemount /home用df -h确认root和home的新容量。整个过程不需要重启不需要Live USB这就是LVM的价值所在。注意缩小文件系统必须先缩小文件系统本身再缩小逻辑卷扩展则相反先扩展逻辑卷再扩展文件系统。顺序搞反会导致数据丢失。这是LVM操作中最容易犯的错误没有之一。6.3 双系统时间同步和NTFS挂载的遗留问题最后说两个双系统常见的遗留问题。一是时间同步前面已经讲了用UTC方案解决。如果你忘了在Windows里改注册表可以随时补上改完重启即可。二是NTFS挂载。如果你想在Arch里访问Windows分区需要装ntfs-3gpacman -S ntfs-3g然后创建挂载点并挂载mkdir /mnt/windows mount -t ntfs-3g /dev/nvme0n1p3 /mnt/windows注意Windows分区在NVMe上设备名可能是/dev/nvme0n1p3具体用lsblk确认。如果挂载时报“磁盘被占用”或“不安全状态”通常是因为Windows没有完全关机快速启动没关或者处于休眠状态。回到Windows彻底关机Shift关机或关闭快速启动再进Arch就能正常挂载了。我在实际使用中还发现一个小技巧把Windows分区的挂载写进/etc/fstab用noauto选项这样开机不会自动挂载需要时手动mount /mnt/windows即可。好处是避免因Windows休眠导致挂载失败而拖慢开机速度。对于不常访问Windows分区的用户这个方案更省心。