以LVM on LUKS安装Arch

引子

用了Arch很久,前段时间因为某些原因,需要使用Windows,于是我在另一个硬盘上安装了Windows。当我想换回Arch时,却发现系统出了问题,排查后是电脑BIOS问题,由于电脑较老,以及KDE桌面经常卡死,想换个桌面,遂重装。

我平时有备份的习惯,可以直接开工。建议平时做好系统备份,以备不时之需!具体可参考《建立强大的备份系统》

一些知识

LVM

接触了Linux,那么LVM大家一定不会陌生,改天我来写一份教程。现在暂时留下维基百科的链接Wikipedia: Logical Volume Manager (Linux)

LVM on LUKS

害人之心不可有,防人之心不可无。

这样的配合,一般用途旨在电脑丢失时保护个人隐私数据。毕竟作为笔记本,万一丢了,借助一个LiveCD,别人可以直接读取你磁盘的数据。从隐私文件到一系列账户密码都用明文储存,看起来很难受。

其次,借助LVM可以灵活地调节各分区地大小,组成RAID。针对笔记本,用途主要是前者。

分离启动分区

本次,我需要使用UEFI启动,因此使用了GPT分区

这是个比较酷的操作,我们曾在电影里看过插入一个U盘来启动电脑。在这里,我们将启动分区安装在U盘里。也就是说,没有这个U盘,就无法启动电脑。对Linux来说,就是分离/boot

从这样来看,如果一个人拿上了你的电脑,那么他99%不能破解你的电脑了,更无法得知存储的文件。(如果你没用简单密码的话!)

PS:我的笔记本因为年代等特殊原因,我在尝试了此方案后,没有分离启动分区。如果是正常电脑,大可放心使用。

一些链接

要求

  • 英语阅读能力
  • dm-crypt基本使用方法
  • 掌握磁盘分区相关原理
  • 熟悉Linux基本命令

分区预览

实际操作

安装系统

1. 刻录安装镜像

dd if=arch.iso of=/dev/sdb

2. UEFI启动安装镜像

在BIOS里设置好支持UEFI启动,并从U盘启动安装镜像

3. 分区

插入第二个U盘(将来装/boot),使用cgdisk按照个人需求进行分区。这里,将主硬盘分一个区,U盘上建立一个512M(或更大)的EFI分区

4. 加密分区

cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 luksFormat /dev/sda1
cryptsetup luksOpen /dev/sda1 luks

5. 创建PV VG & LV

pvcreate /dev/mapper/luks
vgcreate VG_0 /dev/mapper/luks
lvcreate --size 8G VG_0 --name swap
lvcreate -l +100%FREE VG_0 --name root

6. 格式化分区

mkfs.ext4 /dev/mapper/VG_0-root
mkswap /dev/mapper/VG_0-swap
mkfs.vfat -F32 /dev/sdb1

7. 挂载

mount /dev/mapper/VG_0-root /mnt
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
swapon /dev/mapper/VG_0-swap

8. 安装系统

timedatectl set-ntp true
vim /​etc/​pacman.d/​mirrorlist
pacman -Syy
pacstrap /mnt base base-devel linux linux-firmware e2fsprogs iwd dhcpcd vim

9. 生成fstab

genfstab -pU /mnt >> /mnt/etc/fstab

10. 本地化

arch-chroot /mnt /bin/bash
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc --utc
vim /etc/locale.gen 
#启用
#en_US.UTF-8 UTF-8
#zh_CN.UTF-8 UTF-8
#zh_TW.UTF-8 UTF-8
locale-gen #生成locale
echo myhostname > /etc/hostname #设置主机名
passwd #设置root密码
visudo #取消%wheel ALL=(ALL) ALL的注释
useradd -m -G wheel user1 #添加新用户user1
passwd user1 #设置user1的密码
systemctl enable dhcpcd #启用dhcpcd

11. 配置mkinitcpio

pacman -S lvm2 cryptsetup
vim /etc/mkinitcpio.conf

内容改为如下

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

生成配置

mkinitcpio -p linux

12. 安装GRUB

pacman -S grub efibootmgr dosfstools os-prober #安装必要软件包
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck #UEFI安装grub

13. 编辑并生成grub.cfg

vim /etc/default/grub

第一段GRUB_CMDLINE_LINUX=””修改为

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:luks:allow-discards"

生成grub.cfg

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

14. 退出

exit
umount -R /mnt
swapoff -a
systemctl poweroff

使用情况

桌面环境的安装这里不再赘述。在BIOS里设置好启动顺序,将USB启动的优先级调至最高。使电脑优先从U盘启动,来引导处于电脑内置硬盘的系统。

建议安装udisks2,并使用下面的命令来主动切断USB供电,以延长U盘使用寿命。

sudo udisksctl power-off --block-device /dev/sdb

建议使用dd命令来备份U盘内数据以免U盘丢失或损坏,导致的无法启动系统,造成不必要的麻烦。

总结

综上,我们创建了一个LVM on LUKS 的Arch系统,其它发行版安装方法类似,具体可以参阅所使用发行版的wiki。

评论

  1. Kaguya_Bit
    2 年前
    2022-9-03 19:14:40

    大佬好,我按照教程安装之后,开机似乎要输入两遍密码,可能是因为我创建了两个数据分区的原因,在这种情况下该怎么解决呢……?

    • Vince
      博主
      Kaguya_Bit
      2 年前
      2022-9-05 9:58:25

      如果建了多个加密分区,开机的时候肯定是需要输入多个密码来解锁对应的分区

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
变装