Skip to content

Commit

Permalink
lenovo-x1: new disk partitioning scheme
Browse files Browse the repository at this point in the history
New disk configuration provides grounds for upcoming features,
such as AB software updates and Storage VM and many more.

Signed-off-by: Ivan Nikolaenko <ivan.nikolaenko@unikie.com>
  • Loading branch information
unbel13ver committed Jul 4, 2024
1 parent 9e1b9c1 commit 9d7ab74
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
# Devices #
###########

PrivateDevices = true;
# PrivateDevices = true;
# DeviceAllow=/dev/null

##########
Expand Down
161 changes: 161 additions & 0 deletions modules/disko/disko-ab-partitions.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# Copyright 2022-2024 TII (SSRC) and the Ghaf contributors
# SPDX-License-Identifier: Apache-2.0
#
# This partition scheme contains three common partitions and ZFS pool.
# Some partitions are duplicated for the future AB SWupdate implementation.
#
# First three partitions are related to the boot process:
# - boot : Bootloader partition
# - ESP-A : (500M) Kernel and initrd
# - ESP-B : (500M)
#
# ZFS datasets do not necessary need to have specified size and can be
# allocated dynamically. Quotas only restrict the maximum size of
# datasets, but do not reserve the space in the pool.
# The ZFS pool contains next datasets:
# - root-A : (30G) Root FS
# - root-B : (30G)
# - vm-storage-A : (30G) Possible standalone pre-built VM images are stored here
# - vm-storage-B : (30G)
# - reserved-A : (10G) Reserved dataset, no use
# - reserved-B : (10G)
# - gp-storage : (50G) General purpose storage for some common insecure cases
# - recovery : (no quota) Recovery factory image is stored here
# - storagevm: (no quota) Dataset is meant to be used for StorageVM
{pkgs, ...}: {
#TODO Probably the 'networking.hostId' should be set
# somewhere else instead.
networking.hostId = "8425e349";
disko = {
memSize = 4096;
extraPostVM = ''
${pkgs.zstd}/bin/zstd --compress $out/*raw
rm $out/*raw
'';
extraRootModules = ["zfs"];
devices = {
disk.disk1 = {
type = "disk";
imageSize = "15G";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
priority = 1; # Needs to be first partition
};
esp_a = {
name = "ESP_A";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"nofail"
];
};
};
esp_b = {
name = "ESP_B";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountOptions = [
"umask=0077"
"nofail"
];
};
};
zfs_1 = {
size = "100%";
content = {
type = "zfs";
pool = "zroot_1";
};
};
};
};
};
zpool = {
zroot_1 = {
type = "zpool";
rootFsOptions = {
mountpoint = "none";
acltype = "posixacl";
};
datasets = {
"root_a" = {
type = "zfs_fs";
mountpoint = "/";
options = {
mountpoint = "/";
quota = "30G";
};
};
"vm_storage_a" = {
type = "zfs_fs";
options = {
mountpoint = "/vm_storage";
quota = "30G";
};
};
"reserved_a" = {
type = "zfs_fs";
options = {
mountpoint = "none";
quota = "10G";
};
};
"root_b" = {
type = "zfs_fs";
options = {
mountpoint = "none";
quota = "30G";
};
};
"vm_storage_b" = {
type = "zfs_fs";
options = {
mountpoint = "none";
quota = "30G";
};
};
"reserved_b" = {
type = "zfs_fs";
options = {
mountpoint = "none";
quota = "10G";
};
};
"gp_storage" = {
type = "zfs_fs";
options = {
mountpoint = "/gp_storage";
quota = "50G";
};
};
"recovery" = {
type = "zfs_fs";
options = {
mountpoint = "none";
};
};
"storagevm" = {
type = "zfs_fs";
options = {
mountpoint = "/storagevm";
};
};
};
};
};
};
};
}
6 changes: 6 additions & 0 deletions modules/disko/flake-module.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,11 @@
./disko-basic-partition-v1.nix
./disko-basic-postboot.nix
];

disko-ab-partitions-v1.imports = [
inputs.disko.nixosModules.disko
./disko-ab-partitions.nix
./disko-basic-postboot.nix
];
};
}
3 changes: 3 additions & 0 deletions modules/hardware/x86_64-generic/x86_64-linux.nix
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,14 @@ in {
initrd.availableKernelModules = [
"nvme"
"uas"
"zfs"
];
loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
};
supportedFilesystems = ["zfs"];
kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
};
};
}
8 changes: 4 additions & 4 deletions targets/laptop/flake-module.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

targets = [
(laptop-configuration "lenovo-x1-carbon-gen10" "debug" [
self.nixosModules.disko-basic-partition-v1
self.nixosModules.disko-ab-partitions-v1
{
ghaf = {
hardware.definition.configFile = "/lenovo-x1/definitions/x1-gen10.nix";
Expand All @@ -22,7 +22,7 @@
}
])
(laptop-configuration "lenovo-x1-carbon-gen11" "debug" [
self.nixosModules.disko-basic-partition-v1
self.nixosModules.disko-ab-partitions-v1
{
ghaf = {
hardware.definition.configFile = "/lenovo-x1/definitions/x1-gen11.nix";
Expand All @@ -31,7 +31,7 @@
}
])
(laptop-configuration "lenovo-x1-carbon-gen10" "release" [
self.nixosModules.disko-basic-partition-v1
self.nixosModules.disko-ab-partitions-v1
{
ghaf = {
hardware.definition.configFile = "/lenovo-x1/definitions/x1-gen10.nix";
Expand All @@ -40,7 +40,7 @@
}
])
(laptop-configuration "lenovo-x1-carbon-gen11" "release" [
self.nixosModules.disko-basic-partition-v1
self.nixosModules.disko-ab-partitions-v1
{
ghaf = {
hardware.definition.configFile = "/lenovo-x1/definitions/x1-gen11.nix";
Expand Down

0 comments on commit 9d7ab74

Please sign in to comment.