Package: fai-setup-storage
Version: 5.8.4
Severity: wishlist
File: /usr/sbin/setup-storage

I am trying to setup a fairly classic "RAID + LUKS + LVM"
configuration. The idea is to do the following steps:

 1. format two disks identically, with a grub part, /boot and the rest
    for the RAID/LUKS/LVM array
 2. pick the third partition and create a RAID-1 array on it
 3. luksFormat that RAID array
 4. load that LUKS partition as a PV of a VG
 5. create LVs in that VG

>From the manpage, it's not immediately obvious how this can be
done. There's a small note in the cryptsetup example about:

    With a working RAID+LVM configuration, an encryption  layer  can
    be  added  between  the RAID and LVM device layers by adding the
    following cryptsetup configuration. In this case, the  encrypted
    device will be called 'crypt_format_md1' and will be used as the
    underlying physical device (PV) in LVM.
    
    disk_config cryptsetup
    luks    -        /dev/md1       -       -

Reading this, I thought I should use this configuration:

    disk_config cryptsetup
    luks    -       /dev/md1        -       -
    luks    -       /dev/md2        -       -
    
    disk_config lvm fstabkey:uuid
    vg      vg_nvme crypt_format_md1
    vg_nvme-root    /       30G     ext4    rw
    vg_nvme-swap    swap    1G      swap    sw

On IRC, MrFai correctly pointed out (thanks!) that the device name
should not be used in the vg directive there, it should instead read
like:

    vg vg_nvme md1

But that was far from obvious to me. I would suggest adding the
following example in the manual page to work around that ambiguity:

    disk_config disk1
    primary -       0-      -       -
    
    disk_config disk2
    primary -       0-      -       -
    
    disk_config raid fstabkey:uuid
    raid1   -       disk1,disk2     -       -
    
    disk_config cryptsetup
    luks    -       /dev/md0        -       -
    
    disk_config lvm fstabkey:uuid
    vg      vg_nvme md0
    vg_nvme-root    /       30G     ext4    rw
    vg_nvme-swap    swap    1G      swap    sw

That way users have a clear, unambiguous example of how to setup the
full stack.

Note that I haven't tested the above configuration, I distilled it
down from another configuration that I know works, but that's more
specific to our situation:

    # open questions
    # --align=optimal?
    # leave keys in /tmp/fai or specify passphrase?
    # use sameas: to set all disk names earlier?
    # bios_grub flag?
    
    disk_config nvme0n1 disklabel:gpt bootable:2
    # bios grub second stage
    primary -       8MiB    -       -
    # /boot
    primary -       512MiB  -       -
    # rest is RAID+LUKS+LVM
    primary -       0-      -       -
    
    disk_config nvme1n1 disklabel:gpt bootable:2
    # same as above
    primary -       8MiB    -       -
    primary -       512MiB  -       -
    primary -       0-      -       -
    
    disk_config sda disklabel:gpt
    primary -       0-      -       -
    
    disk_config sdb disklabel:gpt
    primary -       0-      -       -
    
    disk_config raid fstabkey:uuid
    raid1   /boot   nvme0n1p2,nvme1n1p2     ext4    rw,noatime,errors=remount-ro
    raid1   -       nvme0n1p3,nvme1n1p3     -       -
    raid1   -       sda1,sdb1       -       -
    
    # FAI defaults to -c aes-xts-plain64 -s 256
    disk_config cryptsetup
    luks    -       /dev/md1        -       -
    luks    -       /dev/md2        -       -
    
    disk_config lvm fstabkey:uuid
    # previous convention was "vg_$hostname"
    vg      vg_nvme md1
    vg_nvme-root    /       30G     ext4    rw
    vg_nvme-swap    swap    1G      swap    sw
    
    vg      vg_hdd  md2
    
    # HDD disks config intentionally left blank

I'll finally note that the device created by cryptsetup is actually
*not* called "crypt_format_md1" as documented in the manpage, but
rather "crypt_dev_md1". This should probably be fixed as well,
although it's unclear if that device name can be used anywhere in the
configuration. That fact could also be made clearer.

Thanks for this tool, it's pretty neat!

-- System Information:
Debian Release: 10.2
  APT prefers stable-debug
  APT policy: (500, 'stable-debug'), (500, 'stable'), (1, 'experimental'), (1, 
'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-6-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_CA.UTF-8, LC_CTYPE=fr_CA.UTF-8 (charmap=UTF-8), 
LANGUAGE=fr_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages fai-setup-storage depends on:
ii  e2fsprogs                 1.44.5-1+deb10u2
ii  liblinux-lvm-perl         0.17-2
ii  libparse-recdescent-perl  1.967015+dfsg-2
ii  parted                    3.2-25
ii  perl                      5.28.1-6

Versions of packages fai-setup-storage recommends:
ii  lvm2   2.03.02-3
ii  mdadm  4.1-1

Versions of packages fai-setup-storage suggests:
pn  cryptsetup     <none>
ii  dmsetup        2:1.02.155-3
ii  dosfstools     4.1-2
pn  jfsutils       <none>
ii  ntfs-3g        1:2017.3.23AR.3-3
ii  reiserfsprogs  1:3.6.27-3
ii  xfsprogs       4.20.0-1

-- debconf-show failed

Reply via email to