# ------------------------------------------------------------------------------ # Secondary drive configuration # This file is part of the init.sh project # Copyright (c) 2019-2021 Geoffray Levasseur # ------------------------------------------------------------------------------ # This file is distributed under 3-clause BSD license. # The complete license agreement can be obtained at: # https://opensource.org/licenses/BSD-3-Clause # ------------------------------------------------------------------------------ # Variable : # * CALCTYPE: filesystem to use (zfs, ext4, xfs) # * CALCMOUNTPOINT: mount point of the target file system (FQPN) # * CALCLEVEL: ZFS only, RAID level (mirror, raidz1, raidz2, raidz3), # empty for striped volume. Any other level than stripe requires # more than one disk. # * CALCDRV: Target drives, preferably through ID. # ------------------------------------------------------------------------------ export VER_conf_disks="0.0.8" # ------------------------------------------------------------------------------ # ZFS case conf_zfs() { prnt I "Création du volume calcul en ZFS." # Create destination directory mkdir -pv $CALCMOUNTPOINT # Install ZFS pkginst zfsutils-linux # Load ZFS module to check it works modprobe zfs || ( prnt E "Échec de chargement du module noyau, abandon." die 50 ) sleep 1 # Create filesystem prnt I "Création du pool zcalc..." if [[ $FORCEBLANK ]]; then local opt="--force" for drv in $CALCDRV; do if [[ ! $(sfdisk -d $drv 2>&1) == "" ]]; then prnt I "Effacement des donnée de $drv..." dd if=/dev/zero of=$drv bs=1024 count 1000000 fi # Empty cache and inform kernel of the change sync partprobe done fi if [[ $(zpool create zcalc -m $CALCMOUNTPOINT $CALCLEVEL $opt $CALCDRV) ]]; then # We activate lz4 compression by default zpool set zcalc compression=lz4 # If a VM is projected we create associated volume if [[ $WITH_VM == true ]]; then prnt I "Création du conteneur pour la future VM..." zfs create zcalc/vm fi else prnt E "Erreur de création du pool zcalc ($CALCLEVEL) avec les disques $CALCDRV" die 51 fi } # ------------------------------------------------------------------------------ # Creation partitions for XFS or Ext4 mkpart() { prnt I "Création d'une nouvelle table de partition GPT..." #fdisk -g } # ------------------------------------------------------------------------------ conf_ext4() { mkpart # Todo } # ------------------------------------------------------------------------------ conf_xfs() { prnt I "Installation des outils XFS..." pkginst xfsprogs mkpart # todo } # ------------------------------------------------------------------------------ conf_disks() { [[ -n $STOP_CONF_DISK ]] && return 0 if [[ ! $CALCDRV ]]; then prnt I "Pas de disque de calcul défini, rien à faire." return 0 fi prnt I "Installation des outils de partitionnement..." pkginst parted conf_$CALCTYPE && ( prnt I "Attribution des droits sur le disque de calcul." chown -Rv $MAINUSER:$MAINUSER /calcul/$HOSTNAME ) } # ------------------------------------------------------------------------------ precheck_conf_disks() { if [[ ! $(type -t conf_$CALCTYPE) == "function" ]]; then prnt E "Format de disque inconnu ($CALCTYPE) !" die 150 fi prnt I "Vérification des lecteurs pour disque de calcul." local drvcount=0 for drv in $CALCDRV; do if [[ -e $drv ]]; then if [[ $(/sbin/sfdisk -d $drv 2>&1) == "" ]]; then prnt I "Le dique $drv est vierge, il sera formaté en $CALCTYPE." else prnt W "Le disque $drv n'est pas vierge !" if [[ $FORCEBLANK==true ]]; then prnt W "Le disque $drv sera réinitialisé !" else prnt E "La réinitialisation de $drv n'est pas autorisé, rien ne sera fait !" export STOP_CONF_DISK=1 fi fi else prnt E "Le disque $drv n'existe pas. Abandon." die 150 fi (( drvcount+=1 )) done if [[ ! $CALCTYPE=="zfs" && drvcount -gt 1 ]]; then prnt E "Plusieurs diques impossibles avec Ext4 ou XFS !" die 150 fi } export -f conf_disks export -f precheck_conf_disks