引子
用了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。
大佬好,我按照教程安装之后,开机似乎要输入两遍密码,可能是因为我创建了两个数据分区的原因,在这种情况下该怎么解决呢……?
如果建了多个加密分区,开机的时候肯定是需要输入多个密码来解锁对应的分区