153 lines
7.7 KiB
Markdown
153 lines
7.7 KiB
Markdown
# Dual Boot Ubuntu
|
|
|
|
Here are my personal notes back when I first dual booted Ubuntu, with some
|
|
updates sprinkled in. Use with caution and **backup everything on another
|
|
detached disk** before proceeding. Although it is very unlikely for things to
|
|
go wrong when this guide is properly followed, I will not be responsible for any
|
|
data loss.
|
|
|
|
This guide was first written for Ubuntu 18.04 LTS so some claims may no longer
|
|
be true (please let me know if it is false). Doing this guide we'll dual boot
|
|
Ubuntu and Windows 10 with setup for encryption of root and home mounts.
|
|
|
|
## Questions before we begin
|
|
|
|
You need to think about these things before you do anything. I have attached my
|
|
personal answers below but it might be different for you.
|
|
|
|
- How much space to allocate for Ubuntu?
|
|
- ~25 GiB, the recommended minimum is 25 GB and my personal usage has never
|
|
exceeded 40GiB for the root drive.
|
|
- If you don't have enough space, you may forgo a separate `/home` to gain
|
|
flexibility as root space could shrink or grow and it's hard to guess the
|
|
sizes upfront. Plus, if your data is on the Windows BitLocker drive, you
|
|
could always make a separate drive to keep your data 2 years later when
|
|
the next Ubuntu LTS comes out or just restore from backup. Or, you could
|
|
make use of LVM...
|
|
- After daily driving Ubuntu I switched to separate `/` and `/home` on
|
|
top of LVM and keeping at least 5GiB of free space for each LV. When
|
|
I need more space, I always live resize by `sudo lvextend -rL +5G
|
|
vgroot/lvhome` so I don't have to guess the total size.
|
|
- Where should Ubuntu root partition be?
|
|
- Right before `/boot` before `D:`. Since moving the starting location of a
|
|
BitLocker protected drive needs full data move using an external hard
|
|
drive and is lots of hassle, we can consider the beginning of `D:` to be
|
|
fixed. putting `/boot` right before `D:` makes its location unlikely to
|
|
be affected by moving partitions around so we don't have to deal with any
|
|
potential `/boot` hassles which may require reinstallation of GRUB.
|
|
- After using it for a while, I've decided to put it at the end of the disk
|
|
instead.
|
|
- Leaving free space between Ubuntu's root and the Windows drive makes both
|
|
OSs easy to resize because it is not hard to change the starting location
|
|
of root (GParted can do the job itself) and instead of requiring a full
|
|
move in case of expansion of Windows, which is probably more likely, we
|
|
require nothing.
|
|
- Should you encrypt this partition?
|
|
- Yes. There may be sensitive data in `/home/$user/.ssh/`, `/tmp/`,
|
|
`/var/log/`, etc. and plus you may want to put the BitLocker key in there
|
|
as well for Dislocker and keep them safe in case of losing the laptop.
|
|
- Should I encrypt `/boot` or just `/?`
|
|
- Just `/`. Encrypting `/boot` provides only somewhat protection against
|
|
the kind of Evil Maid where someone changes the kernel and include a
|
|
keylogger. This require physical access, and if they have that they can
|
|
do more, either:
|
|
1. Install another Ubuntu and connect to the Internet to upload password
|
|
2. Install a hardware key logger
|
|
3. Swap it out for a same-looking machine
|
|
- My goal was to only protect against theft and loss, not to protect against
|
|
these advanced threats. To do this, you need to either:
|
|
- Encrypt `/boot`, which prevents only the swap of a kernel but not any
|
|
of the three points above and is hard to implement.
|
|
- Password protect BIOS, which makes it very risky when I forget the
|
|
BIOS password and protects only against the kernel swap and threat #1.
|
|
I consider it not worthy for it adds significant risk only to protect
|
|
against the first threat, which is unlikely as I would have to be
|
|
specifically targeted by very technical people (they probably could
|
|
also disable the password protection or install the keylogger too but
|
|
I haven't researched much about this).
|
|
- IDK what more could be done.
|
|
- Bottom line: never trust the device once it's been tempered with.
|
|
- How should I encrypt? LUKS?
|
|
- LUKS, I don't want my directory structure to be seen and I want to just
|
|
use ext4.
|
|
- LVM on LUKS or LUKS on LVM?
|
|
- LVM on LUKS, the usual setup with less hassle and I don't need multi-disk
|
|
LUKS anyways as this is a single-disk laptop.
|
|
- Will dual booting mess up the Windows boot loader?
|
|
- Should not, since removing GRUB requires only the removal of its entries
|
|
from the EFI partition.
|
|
- How to avoid too many password prompts?
|
|
- Should have only one prompt at boot when the kernel asks for the password
|
|
to decrypt the file systems, and another for normal logins.
|
|
- How to dual boot and install with encryption?
|
|
- Here is the original guide which I based this one on: [Encrypting disks on
|
|
Ubuntu
|
|
19.04](https://medium.com/@chrishantha/encrypting-disks-on-ubuntu-19-04-b50bfc65182a)
|
|
- With these questions answered, we can perform the installation.
|
|
|
|
## Installation
|
|
|
|
- Booting Ubuntu 22.10 live image with `Try Ubuntu` option.
|
|
- Verify that we are using UEFI: `$ [ -d /sys/firmware/efi ] && echo UEFI ||
|
|
echo BIOS`
|
|
- Give 1 GiB (or 500 MiB if you are short on space) for `/boot` using GParted and make a partition
|
|
for `/` as well, at least around 25 GB.
|
|
- `$ sudo cryptsetup luksFormat --type luks2 --key-size 512 --hash sha512
|
|
--use-random /dev/<root partition>`
|
|
- Defaults, spell it out if you want to be extra certain:
|
|
`--cipher aes-xts-plain64 --iter-time 2000 --verify-passphrase`
|
|
- `$ sudo cryptsetup open /dev/<root partition> pvroot`
|
|
- No need to overwrite data since it is originally BitLocker encrypted and would
|
|
cause loss of performance and lifespan of the SSD.
|
|
- `$ sudo pvcreate /dev/mapper/pvroot`
|
|
- `$ sudo vgcreate vgroot /dev/mapper/pvroot`
|
|
- `$ sudo lvcreate -n lvhome -L 10G vgroot` (`G` refers to GiB according to the
|
|
man page)
|
|
- Remember to monitor disk usage and when prompted, live extend the LVs!
|
|
- `$ sudo lvcreate -n lvroot -L 15G vgroot`
|
|
- Start the Ubuntu installation from the shortcut icon on Desktop.
|
|
- Choose extra software and set a password.
|
|
- Choose `Something else`.
|
|
- Format `/dev/<boot partition>` as ext4 and mount to `/boot`.
|
|
- Format `/dev/mapper/vgroot-lvroot` as ext4 and mount to `/`.
|
|
- Format `/dev/mapper/vgroot-lvhome` as ext4 and mount to `/home`.
|
|
- Choose the main disk (e.g. `/dev/sda` or `/dev/nvme0n1p2`) as the `Device for boot loader
|
|
installation`.
|
|
- Name the parititions if you are feeling fancy.
|
|
- Once the installation is complete, click `Continue Testing` to make necessary
|
|
changes to load the encrypted partitions at startup.
|
|
- Make note of the UUID: `$ blkid /dev/<root partition>`
|
|
- Mount the installed Ubuntu OS on `/mnt` and use `chroot` to change the root
|
|
directory to `/mnt`.
|
|
```
|
|
$ sudo mount /dev/mapper/vgroot-lvroot /mnt
|
|
$ sudo mount /dev/<boot partition> /mnt/boot
|
|
$ sudo mount --bind /dev /mnt/dev
|
|
$ sudo chroot /mnt
|
|
# mount -t proc proc /proc
|
|
# mount -t sysfs sys /sys
|
|
# mount -t devpts devpts /dev/pts
|
|
```
|
|
- In the chroot: `# vi /etc/crypttab`
|
|
- Add the following lines to it (replacing `<UUID_PVROOT>` from the value
|
|
obtained from `blkid` command earlier):
|
|
```
|
|
# <target name> <source device> <key file> <options>
|
|
pvroot UUID=<UUID_PVROOT> none luks,discard
|
|
```
|
|
- This guide assumes you have an SSD so we have `discard`.
|
|
- Update the Linux kernel to load encrypted partitions at startup: `#
|
|
update-initramfs -k all -c`
|
|
- Exit the chroot shell.
|
|
- Reboot.
|
|
- Select Enroll MOK at the blue screen MOK manager. Be quick! After a minute
|
|
or so it would reboot and you only get one chance.
|
|
- Select continue and yes.
|
|
|
|
## Post Install
|
|
|
|
- Adjust the boot sequence in UEFI if you want to boot Windows first.
|
|
- `$ timedatectl set-local-rtc 1 --adjust-system-clock` to prevent different
|
|
system clock time when dual booting.
|
|
- Install and configure Dislocker to access Windows BitLocker drives.
|