个人记录:超完整Windows + Arch(lvm on luks)双系统安装

七十七
·
·
IPFS

安装环境

  • cpu:intel i5-10400
  • 主板:微星 b460m mortar wifi
  • 硬盘: sata 英睿达 500gb ssd + 西数蓝盘 1tb hdd
  • 显卡:intel uhd 630 集显

目标

  • Windows

c盘预留200gb,安装在ssd,此外hdd预留30g放osu文件

  • Arch

ssd:/boot预留500mb,/root预留70gb,/home预留200gb,使用luks加密并扔到lvm里

hdd:所剩的所有做成两个系统可以共享的音乐/图片/视频盘

之所以是个人记录而不是教程是因为网络上关于arch的安装教程太多了,我除了添加了加密,lvm,和ntfs-3g没有对官网教程做出太大的改动。另外,这个记录还包括了一些添加用户,安装图形界面,解决时间混乱等更适合post installation的topic。


bios篇1

在启动优先项里把usb提前,并关掉fast boot和secure boot,确认bios模式是否是uefi。


windows篇

先安装Windows会比较方便,安装好以后进入系统先到disk manager里把c盘压缩到200gb,再为hdd建一个30g的simple volume。

之后进入控制面板,关掉电池选项里的hibernation和fast startup。


arch篇1

进入arch后,首要的事是联网。我使用的是wifi,所以这里输入

# iwctl

进入iwctl后,找到wifi设备

[iwd]# device list

扫描当下可连接的网络

[iwd]# station wifi设备名称 scan

列举网络

[iwd]# station wifi设备名称 get-networks

连接后会要你的密码,输入再enter就可以了

[iwd]# station wifi设备名称 connect wifi的ssid

退出

[iwd]# exit

ping一下看看有没有成功连上网,如果得到ping:name or service unknown的错误提示,可能是你的dns服务器没配好。“cat /etc/resolv.conf”检查一下。

# ping archlinux.org

检查一下时钟是否正确,正常的话是什么都不会显示的

# timedatectl set-ntp true

接下来我们可以愉快的syu了

# pacman -Syu

安装一个等下马上就会用到的包

# pacman -S ntfs-3g

现在可以开始分区了,首先先要给我的ssd分区(不清楚自己的设备名就输入lsblk先看一下)

# fdisk /dev/sda

进入fdisk后,输入“n”新建分区;我因为有windows所以分区数字默认为5,默认enter;first sector直接默认enter,last sector写“+500m”;这是我的boot分区。

输入“n”新建第二个分区;这次的数字是6,默认enter;first sector和last sector都可以默认enter;这是我的lvm分区。然后输入“t”来改变分区属性,输入“l”列出所有属性,最后我们可以输入Linux LVM前面的数字将它变为lvm。

确认没错了后输入“w”保存并退出。这里不需要efi分区因为我们可以直接把windows的拿过来用。

接着给hdd分区

# fdisk /dev/sdb

输入“n”新建分区,然后全部默认,“w”保存并退出。

现在要开始加密我的lvm分区了,因为刚才配给lvm分区的数字是6,这里输入

# cryptsetup luksFormat /dev/sda6

输入上面命令后luks会问你要一个密码,成功后打开解密过后的容器。cryptlvm是我给容器起的名字

# cryptsetup open /dev/sda1 cryptlvm

不放心的话可以再检查一下有否加密成功

# ls /dev/mapper

加密好后就可以往上面叠lvm了,首先创建物理卷

# pvcreate /dev/mapper/cryptlvm

创建卷组。vg0是我给卷组起的名字

# vgcreate vg0 /dev/mapper/cryptlvm

创建逻辑卷,这里先给root分70g

# lvcreate -L 70G vg0 -n root

然后把剩下的全部分给home

# lvcreate -l 100%FREE vg0 -n home

分区建立完成后我们需要格式化分区。先把我的boot分区格式化为ext4

# mkfs.ext4 /dev/sda5

然后是我的root

# mkfs.ext4 /dev/vg0/root

还有我的home

# mkfs.ext4 /dev/vg0/home

最后别忘了我的hdd分区。为了让windows也能顺利读写这个分区的内容,我们需要把它格式化为ntfs。data_shared是我的disk label。

# mkfs.ntfs -Q -L data_shared /dev/sdb3

格式化后需要一一挂载。请务必注意先挂载root,否则fstab会有错误

# mount /dev/vg0/root /mnt

创建boot文件夹

# mkdir /mnt/boot

挂载boot

# mount /dev/sda5 /mnt/boot

创建home文件夹

# mkdir /mnt/home

挂载home

# mount /dev/vg0/home /mnt/home

创建共享文件文件夹

# mkdir /data_shared

挂载我的ntfs分区

# ntfs-3g /dev/sdb3 /data_shared

挂载完毕后需要把你的分区信息全部写入fstab

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

“cat /etc/fstab”来检查有没有检测到所有的分区。ntfs似乎是检测不出来的,所以只好等之后添加了用户再手动加入。

然后可以开始安装了。我没有改镜像源,因为默认的对我来说已经够快了

# pacstrap /mnt base base-devel linux linux-firmware linux-headers 

chroot进去

# arch-chroot /mnt

继续下载之后也许需要的包

# pacman -S openssh networkmanager wpa_supplicant wireless_tools netctl nano lvm2 dialog git 

允许networkmanager开机自启动,这样就不用每次都要重连wifi了。记得注意大小写

# systemctl enable NetworkManager

设置时间,首先找到你的时区

# timedatectl list-timezones

设置时区,我选了纽约

# timedatectl set-timezone America/New_York

同步硬件时钟

# hwclock --systohc

设置locale

# nano /etc/locale.gen

把下面这行的#去掉,有需要再添加其他

en_US.UTF-8 UTF-8

生成locale

# locale-gen

创建修改locale.conf

# nano /etc/locale.conf

写入以下,其他不要写

LANG=en_US.UTF-8

创建修改hostname,进去后给你的arch随便取个名字,我就写了myarch

# nano /etc/hostname

修改hosts

# nano /etc/hosts

添加下面这几行

127.0.0.1	localhost
::1		localhost
127.0.1.1	myarch.localdomain	myarch

我们需要再改一些系统文件让lvm和luks能够正常运作,首先修改mkinitcpio.conf

# nano /etc/mkinitcpio.conf

找到没有打“#”的一行hooks,然后在block和filesystems之间添加“encrypt”和“lvm2”

HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck)

输入以下重新创建initramfs

# mkinitcpio -P

为root用户创建密码

# passwd

添加一个非root用户,我建了一个叫rein的用户

# useradd -m -G wheel rein

为这个用户创建密码

# passwd rein

给这个用户授权

# EDITOR=nano visudo

找到写了“uncomment to allow members of group wheel to execute any command”的那行,把那行的#去掉,这样普通用户就能跑sudo了

% wheel ALL = (ALL) ALL

可以开始下载配置grub了。从这一步开始请提起十万分的警惕,否则修起来很痛苦

# pacman -S grub efibootmgr os-prober dosfstools mtools

修改grub文件让luks能正常运作

# nano /etc/default/grub

找到以下这一行,在loglevel=3和quiet之间添加这样一句。/dev/sda6是我加密的设备,vg0是我的卷组名

GRUB_CMDLINE_LINUX_DEFAULT = "loglevel=3 cryptdevice=/dev/sda6:vg0:allow-discards quiet"

建立efi文件夹

# mkdir /boot/efi

把windows创建的efi分区挂载上去。我的efi在/dev/sda1

# mount /dev/sda1 /boot/efi

安装grub

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

生成grub.cfg,这时候你可以闭眼祈祷grub能顺利找到windows boot manager

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

退出chroot环境

# exit

取消挂载

# umount -a

重启然后祈祷。我重启后跳出来的是windows界面,因为bios里我的windows boot manager是提前的,然后可能也因为我忘记了关secure boot。先不用担心,进windows关机后再进bios修改

# reboot

bios篇2

确认secure boot是关着的,然后把启动项里的arch_grub提前


arch篇2

退出bios后,应该能看见grub菜单了。如果你想进windows的话一定要眼疾手快,否则会自动跳转到arch。这里我们先进arch。

配置正确的话luks会问你要密码,密码正确的话就可以顺利进入系统。屏幕上会显示myarch(这是你的hostname) login,输入用户名然后输入密码就能进去了。这里为了方便用root操作。

先进nmtui设置wifi

# nmtui

成功后ping一下看看有没有连上,然后我们需要修改刚刚没改的fstab。在改之前需要知道我的id,rein是我的用户名

# id rein

修改fstab

# nano /etc/fstab

在最后一行写以下内容。/dev/sdb3是我的ntfs分区,/data_shared是我的挂载点,uid和gid是刚刚那行命令里的结果

/dev/sdb3 /data_shared  ntfs-3g uid=userid,gid=groupid,dmask=022,fmask=133,big_writes,windows_names 0 0

保存退出,现在安装mesa。这里不需要xf86-video-intel

# pacman -S mesa

安装图形界面。我个人比较喜欢kde,所以安装以下包。除非想要电脑堆满一你辈子也不会去用的软件,否则不需要kde-applications,之后所有软件全部自己安装

# pacman -S xorg sddm plasma-meta packagekit-qt5

允许sddm自启动,这样不用每次进tty手动允许就能看到登录界面了

# systemctl enable sddm

重启,祈祷

# reboot

我后来在windows里缩减了一下共享文件分区的大小,然后在arch里建了个ext4分区放备份。用了两三个星期的arch,感觉还行,至少暂时没挂过。图像,wifi,蓝牙等全能正常使用。

到此为止,祝大家能拥抱自己的arch


CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!