Arch Linux和Windows 10双系统安装记录(HP ProBook 440 G2/GPT/UEFI)

本文详细记录了在HP ProBook 440 G2笔记本上,从重写MBR开始,通过清空磁盘、重装Windows,最终实现GPT+UEFI启动方式下,安装ArchLinux并启用LVM的全过程。文章涵盖了从分区、联网、时间设置,到安装基础包、生成fstab文件、进入chroot环境,再到各种配置、生成initramfs image、设置密码、安装GRUB等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

所用笔记本为HP ProBook 440 G2。先前一直是win 10 + Arch + MBR/BIOS双系统,但是突然想给Arch装上LVM,这样以后能动态调整分区大小。所以就决定重装一次Arch:先用引导修复工具将MBR重写,接着进win 10删除Linux分区,然后下载最新Arch镜像,刻录,重装。

一直到安装GRUB之前都没有任何问题,但是就在GRUB安装时出错了,报错意思是我的core.img文件太大,放不下。这时看了看磁盘分区表,发现sda1是从63开始的,不是从2048开始的。

百度后知道了,引导修复工具重写MBR时,会写成从63开始,这样的话sda1前面的空间也就32k、33k,而一个core.img就要比33k大。随后又换了几种引导修复工具,也没有能改成从2048开始的。要么移动所有分区,要么重装系统。最后决定备份文件、清空整个磁盘,重装windows。因为以前一直是用着MBR+BIOS,借着这次重装的机会,想换成GPT+UEFI玩玩。然后进BIOS改了启动方式、顺利安装好了windows 10。接下来就开始Arch的安装。

Arch Linux安装 (GPT+UEFI+LVM)

全程参照Arch Wiki Installation Guide

制作U盘镜像

先在官网或者国内镜像站下载好镜像文件。
然后,如在Windows下,可用软件rufus制作镜像盘。因为这次主板改成了UEFI启动,所以也将U盘改成了uefi启动。
制作完成后,就可以重启电脑、从U盘启动、进入安装环境了。

联网

成功进入安装环境后,先检查网络状态:

上面三个,任选一条命令执行,都可以知道当前网络状况。如果是插着网线,系统应该会自动连上网络;如果没有有线网络,可以执行wifi-menu连接无线网络。

更新时间

# timedatectl set-ntp true

这个无所谓,执行不执行都行。等安装好系统后,可以慢慢查看Wiki里有关时间、UTC、RTC的网页,根据自己需要设置合适的时间。

分区

wiki在这步提示说,如果需要LVM、RAID、加密之类的,就要在这步和下步之间动手了。因为我只简单安装了LVM,所以在这儿只记录LVM的安装。

安装好win 10后,我进磁盘管理从最后一个盘划出了150G的空间,用来安装linux。
我的linux分区:70G的 / partition、70G的 /home partition、几个G的swap file。

分区工具我习惯使用cfdisk。执行cfdisk后,找到那个free space(因为我在win下只是划出了空间,没有格式化系统,所以是free space)。因为要装LVM,所以这次就没再把这150G的free space又分好几个区,直接将一整块分区new一下就好了,类型选为Linux LVM。然后write,quit。

接下来参照wiki里LVM页面,创建pv、vg、lv。vg的名字我就是按照wiki里的起的 “VolGroup00”,lv是lvolroot、lvolhome。

格式化、挂载

我的是这样的:
# mkfs.ext4 /dev/VolGroup00/lvolroot
# mkfs.ext4 /dev/VolGroup00/lvolhome
# mount /dev/VolGroup00/lvolroot /mnt
# mkdir /mnt/home
# mkdir /mnt/efi
# mount /dev/VolGroup00/lvolhome /mnt/home
# mount /dev/sda1 /mnt/efi
# mkdir /mnt/hostlvm
# mount --bind /run/lvm /mnt/hostlvm
最后两条是解决之后grub安装时可能发生的一个问题的。

选择镜像网址

打开文件/etc/pacman.d/mirrorlist,将以下网址放在最前面(手输的话,写上一两条就行了,等以后安装好了,直接复制剩余的)

Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.163.com/archlinux/$repo/os/$arch
Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch

保存、退出。

装包(Install the base packages)

# pacstrap /mnt base base-devel

生成fstab文件

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

进入chroot

# arch-chroot /mnt
# ln -s /hostlvm /run/lvm 这条是接着之前说的可能发生的问题的解决办法

各种配置

时区: # ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
时间:# hwclock --systohc
Localization:进入文件/etc/locale.gen,将包含en_US、zh_CN、zh_HK、zh_TW的行的注释去掉。保存退出。执行# locale-gen。执行# echo LANG=en_US.UTF-8 > /etc/locale.conf
网络配置:# echo myhostname > /etc/hostname ,将以下信息输入文件/etc/hosts

127.0.0.1	localhost
::1		localhost
127.0.1.1	myhostname.localdomain	myhostname

重新生成initramfs image

因为之前安装了LVM,所以需要修改mkinitcpio.conf。具体看此处

设置Root密码

# passwd

新建普通用户并设置密码

# useradd -m -g users -G wheel -s /bin/bash username
# passwd username
我创建用户一直是用着这条命令,已经忘了各个option是什么意思了……

安装、配置GRUB

因为是Windows+Linux双系统,所以多安装一些东西。
# pacman -S grub os-prober ntfs-3g exfat-utils
因为我的root分区、boot分区都在LVM里,所以还需要对/etc/default/grub修改:GRUB_PRELOAD_MODULES="... lvm" ,就是在这行引号里面最后添加一个lvm。
然后安装、配置grub跟着wiki就可以了。click here
(我运行的安装命令是:# grub-install --removable --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB

推荐一个网络管理器——Connman

有关它的安装、使用看这里

遇到的问题

  1. grub生成配置文件时报错“Device xxx not initialized 什么什么”,解决办法在wki grub的troubleshooting最后一个。如果是按本文操作安装的,应该不会出现这个问题了。

  2. 生成grub.cfg配置文件时,os-prober无法检测到windows。这个在wiki grub troubleshooting里也有相关说明,关了什么fast boot/HiberBoot/安全启动之类的。那里也说了,如果还不行的话,就把Windows分区挂载一下(记得安装ntfs-3g)。如果还检测不到,就退出安装镜像,拔了U盘,进入新系统,重新生成grub配置文件。如果还是不行,就自己写一个menuentry。
    Win 10 menuentry:自己创建的menuentry可以写到/etc/grub.d/40_custom,然后重新生成grub配置文件就可以了。
    MBR+BIOS:

    menuentry 'Windows 10 (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-6C5CD5375CD4FCB0' {
    	insmod part_msdos
    	insmod ntfs
    	set root='hd0,msdos1'
    	if [ x$feature_platform_search_hint = xy ]; then
    		search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  6C5CD5375CD4FCB0
    	else
    		search --no-floppy --fs-uuid --set=root 6C5CD5375CD4FCB0
    	fi
    	parttool ${root} hidden-
    	drivemap -s (hd0) ${root}
    	chainloader +1
    }
    

    这段是os-prober自动生成的,如果有时检测不到Windows,可以自己照着这段修改一下,添加到40_custom里。“6C5CD5375CD4FCB0”这是Windows系统所在分区的id,可以通过/etc/fstab文件或者cfdisk/parted等分区工具得到。
    GPT+UEFI:

    menuentry "Win 10" {
    	insmod part_gpt
    	insmod fat
    	set root=(hd0,gpt1)
    	chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
    	boot
    }
    

    这段是我根据wiki里说的(wiki grub里“Windows installed in UEFI/GPT mode”),自己造的一段menuentry。自己用时需要注意磁盘的efi分区在哪个区里,是sda1,就写gpt1,sda2就写gpt2;然后要知道自己的Windows的efi文件的路径。(改天添加osprober自动生成的)

  3. 我装好arch后,缺少两个固件,一个aic什么什么,一个wd719什么什么。aic这个好解决,在aur中找到包,按照aur安装指南安装就行了。但是安装wd719这个时出了问题,有个网址在国内连接不上。因为以前安装过这俩个估计,重装前也有备份,看了一下发现aur里wd719更新到1.4版本了,我以前是1.3版本。试了几次都装不上1.4版本,那个网址死活连不上。后来想到换个网址,于是把1.4版本的PKGBUILD里的source换成了1.3版本的。之后成功安装。

  4. 在grub安装好后(此时还没检测到win 10),我重启了电脑,结果是直接进入了win 10,连grub界面都没出现,不管我怎样放置grub的efi文件,开机都不会出现grub界面。后来开机按F9,有个Boot from efi files,进去后发现,Microsoft的文件夹总是排在第一位,而且Boot是排在它后面的,很奇怪。百度了半天没有找到原因,后来在Arch Wiki里找,竟然又找到了原因和解决办法,参见这里。我选的解决办法就是创建一个Customized Boot,路径为\EFI\boot\bootx64.efi,然后将UEFI启动顺序的第一个改为Customized Boot。

  5. 为什么感觉csdn现在的markdown编辑这么难用……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值