forked from TUM-DSE/doctor-cluster-config
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdax.nix
More file actions
59 lines (57 loc) · 1.49 KB
/
dax.nix
File metadata and controls
59 lines (57 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
config,
lib,
pkgs,
...
}:
{
options = {
doctorwho.pmem.devices = lib.mkOption {
description = "List of pmem devices to mount";
type = lib.types.listOf lib.types.str;
default = [ "pmem0" ];
};
};
# This is used for persistent memory
config = {
# To create/configure pmem devices
environment.systemPackages = [ (pkgs.callPackage ../pkgs/ipmctl.nix { }) ];
# enable dax option for fs
boot.kernelPatches = [
{
name = "daxfs-config";
patch = null;
extraConfig = ''
FS_DAX y
'';
}
];
# Create a directory for every user on every device
systemd.tmpfiles.rules =
let
loginUsers = lib.filterAttrs (_n: v: v.isNormalUser) config.users.users;
forDevice =
device:
(lib.mapAttrsToList (n: _v: "d /mnt/${device}/${n} 0755 ${n} users -") loginUsers)
++ (builtins.map (n: "R /mnt/${device}/${n} - - - - -") config.users.deletedUsers);
in
lib.flatten (builtins.map forDevice config.doctorwho.pmem.devices);
# Create a mountpoint for every pmem device.
fileSystems =
let
devices = lib.genAttrs config.doctorwho.pmem.devices (name: name);
in
lib.mapAttrs' (
dev: _:
lib.nameValuePair "/mnt/${dev}" {
device = "/dev/${dev}";
fsType = "ext4";
autoFormat = true;
options = [
"nofail"
"dax"
];
}
) devices;
};
}