Compare commits
7 Commits
cc6e17f06c
...
4e795c9cb7
Author | SHA1 | Date | |
---|---|---|---|
4e795c9cb7 | |||
2e39075273 | |||
4dab010efd | |||
1a138068d1 | |||
7133883a5e | |||
ae00207947 | |||
108883fd11 |
82
README.md
82
README.md
@@ -29,12 +29,12 @@ mkfs.vfat /dev/sda1
|
||||
The result will be something like this at which point you can start the `setup.sh` script, see [How to run this?](#how-to-run-this) below for more details.
|
||||
```
|
||||
# lsblk --paths
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
||||
/dev/loop0 7:0 0 685.5M 1 loop /run/archiso/airootfs
|
||||
/dev/sr0 11:0 1 808.3M 0 rom /run/archiso/bootmnt
|
||||
/dev/sda 202:0 0 20G 0 disk
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
||||
/dev/loop0 7:0 0 685.5M 1 loop /run/archiso/airootfs
|
||||
/dev/sr0 11:0 1 808.3M 0 rom /run/archiso/bootmnt
|
||||
/dev/sda 202:0 0 10G 0 disk
|
||||
├─/dev/sda1 202:1 0 512M 0 part
|
||||
└─/dev/sda2 202:2 0 19.5G 0 part
|
||||
└─/dev/sda2 202:2 0 9.5G 0 part
|
||||
```
|
||||
|
||||
## ZFS dataset layout
|
||||
@@ -404,6 +404,78 @@ Lastly create the dataset you want mounted:
|
||||
zfs create zpool/data/var/lib/docker
|
||||
```
|
||||
|
||||
## Mounting zpool for maintenance
|
||||
|
||||
In case you want to mount your zpool on an external operating system such as an Arch Linux live CD ISO image do it like so:
|
||||
|
||||
```
|
||||
zpool import zpool -d /dev/disk/by-partuuid -R /mnt -f -N
|
||||
zfs load-key -L prompt zpool
|
||||
zfs mount zpool/root/archlinux
|
||||
zfs mount -a
|
||||
mount /dev/sda1 /mnt/efi
|
||||
arch-chroot /mnt /bin/bash
|
||||
```
|
||||
|
||||
When done exit `chroot` and cleanly remove your work:
|
||||
|
||||
```
|
||||
umount /mnt/efi
|
||||
zfs umount -a
|
||||
zpool export zpool
|
||||
```
|
||||
|
||||
Explanation:
|
||||
|
||||
- We always want to mount pools `by-partuuid` for consistency so we specifically only look for pools at `/dev/disk/by-partuuid`.
|
||||
- We mount our zpool with `-R /mnt` (aka `-o cachefile=none -o altroot=/mnt`). The pool is never cached, i.e. it's considered temporary. All pool and dataset mount paths have `/mnt` prepended. From `man zpoolprops`:
|
||||
> This can be used when examining an unknown pool where the mount points cannot be trusted, or in an alternate boot environment, where the typical paths are not valid. `altroot` is not a persistent property. It is valid only while the system is up.
|
||||
- With `-f` and `-N` we force-mount our pool (`-f`) even if it previously wasn't cleanly exported; and we do not auto-mount any of its datasets (`-N`), not even the ones that have `canmount=on` set.
|
||||
|
||||
```
|
||||
# zfs list -oname,mountpoint,canmount,mounted
|
||||
NAME MOUNTPOINT CANMOUNT MOUNTED
|
||||
zpool none off no
|
||||
zpool/data /mnt off no
|
||||
zpool/data/home /mnt/home on no <-- Not immediately mounted
|
||||
zpool/root none off no
|
||||
zpool/root/archlinux /mnt noauto no <-- Not immediately mounted
|
||||
```
|
||||
- We load the decryption key by temporarily overriding the `keylocation` property to `-L prompt`. The default value is `file:///etc/zfs/zpool.key` which in all likelihood doesn't exist in this environment.
|
||||
- We mount our desired boot environment with `zfs mount zpool/root/archlinux`
|
||||
|
||||
```
|
||||
# zfs list -oname,mountpoint,canmount,mounted
|
||||
NAME MOUNTPOINT CANMOUNT MOUNTED
|
||||
zpool none off no
|
||||
zpool/data /mnt off no
|
||||
zpool/data/home /mnt/home on no
|
||||
zpool/root none off no
|
||||
zpool/root/archlinux /mnt noauto yes <-- Only boot env now mounted
|
||||
```
|
||||
- We mount all child datasets with `zfs mount -a` making `/mnt/home` available as well as any others you may have created yourself.
|
||||
|
||||
```
|
||||
# zfs list -oname,mountpoint,canmount,mounted
|
||||
NAME MOUNTPOINT CANMOUNT MOUNTED
|
||||
zpool none off no
|
||||
zpool/data /mnt off no
|
||||
zpool/data/home /mnt/home on yes <-- Now mounted
|
||||
zpool/root none off no
|
||||
zpool/root/archlinux /mnt noauto yes <-- Now mounted
|
||||
```
|
||||
- We lastly mount our EFI system partition (ESP), in this example it's living at `/dev/sda1` so adjust this path accordingly.
|
||||
|
||||
```
|
||||
# df -hTP
|
||||
Filesystem Type Size Used Avail Use% Mounted on
|
||||
... ... ... ... ... ... ...
|
||||
zpool/root/archlinux zfs 8.6G 2.5G 6.2G 29% /mnt
|
||||
zpool/data/home zfs 6.3G 161M 6.2G 3% /mnt/home
|
||||
/dev/sda1 vfat 511M 31M 481M 6% /mnt/efi
|
||||
```
|
||||
- We're ready to `arch-chroot` into our boot environment.
|
||||
|
||||
# Development
|
||||
|
||||
## Conventional commits
|
||||
|
5
setup.sh
5
setup.sh
@@ -564,7 +564,7 @@ Components:
|
||||
Enabled: false
|
||||
EFI:
|
||||
ImageDir: /efi/EFI/ZBM
|
||||
Versions: 1
|
||||
Versions: false
|
||||
Enabled: true
|
||||
Stub: /etc/zfsbootmenu/stub-loader.d/linuxx64.efi.stub
|
||||
Kernel:
|
||||
@@ -705,8 +705,7 @@ function set_new_uefi_boot_entries () {
|
||||
efi_disks_list="$(get_disks_with_one_efipart)"
|
||||
if grep -Piq -- '^'"${efi_drive}"'$' <<<"${efi_disks_list}"; then
|
||||
for uefi_image in "${uefi_images[@]}"; do
|
||||
uefi_image_version="$(basename "${uefi_image##*-}")"
|
||||
uefi_image_version="${uefi_image_version%%.EFI}"
|
||||
uefi_image_version="$(basename "${uefi_image%%.EFI}")"
|
||||
uefi_image_inverted="${uefi_image#/mnt/efi}"
|
||||
uefi_image_inverted="${uefi_image_inverted//\//\\}"
|
||||
efibootmgr --disk "${efi_drive}" \
|
||||
|
@@ -94,8 +94,7 @@ function select_part () {
|
||||
esac
|
||||
>&3 printf -- '%s\n' \
|
||||
'It looks as if there is no '"${part_type_human_readable}" \
|
||||
'on any of the disks. Did you correctly partition a disk before starting?' \
|
||||
'Check https://quico.space/quico-os-setup/arch-zbm#prep. Exiting ...'
|
||||
'on any of the disks. Is this a chroot? Exiting ...'
|
||||
exit 77
|
||||
fi
|
||||
|
||||
@@ -159,8 +158,7 @@ function set_new_uefi_boot_entries () {
|
||||
efi_disks_list="$(get_disks_with_one_efipart)"
|
||||
if grep -Piq -- '^'"${efi_drive}"'$' <<<"${efi_disks_list}"; then
|
||||
for uefi_image in "${uefi_images[@]}"; do
|
||||
uefi_image_version="$(basename "${uefi_image##*-}")"
|
||||
uefi_image_version="${uefi_image_version%%.EFI}"
|
||||
uefi_image_version="$(basename "${uefi_image%%.EFI}")"
|
||||
uefi_image_inverted="${uefi_image#/efi}"
|
||||
uefi_image_inverted="${uefi_image_inverted//\//\\}"
|
||||
efibootmgr --disk "${efi_drive}" \
|
||||
|
Reference in New Issue
Block a user