155 lines
4.7 KiB
Bash
155 lines
4.7 KiB
Bash
# ------------------------------------------------------------------------------
|
|
# Secondary drive configuration
|
|
# This file is part of the init.sh project
|
|
# Copyright (c) 2019-2021 Geoffray Levasseur <fatalerrors@geoffray-levasseur.org>
|
|
# ------------------------------------------------------------------------------
|
|
# 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 (FQP)
|
|
# * 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.9"
|
|
export DEP_conf_disks="upgrade_dist"
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# 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 == true ]]; 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
|