web-dev-qa-db-fra.com

Ajout automatique de systèmes de fichiers dans / etc / fstab

J'utilise lvcreate et mkfs pour créer de nouveaux systèmes de fichiers sur mon buntu Server 18.04 LTS systèmes. Une chose qui me dérange, c'est que le système n'ajoute pas automatiquement les nouveaux systèmes de fichiers que je crée au fichier /etc/fstab . Les seuls ajoutés sont ceux qui ont été créés lors de la création initiale du système lors de l'installation.

Existe-t-il un indicateur ( mkfs , ou un paquet séparé apt ) qui de nouveaux systèmes de fichiers pourraient être insérés automatiquement dans le fichier /etc/fstab plutôt que de demander à l'administrateur de modifier manuellement le fichier?

1
S. Nixon

C'est normal, car aucun outil ni système d'exploitation ne peut savoir où vous voulez monter les partitions, les volumes logiques ou autres que vous venez de créer.

Ceux que vous créez lors de l'installation du système sont détectés par vos choix (lorsque vous sélectionnez votre root, home, etc.) et sont ajoutés à fstab car ils sont nécessaires au démarrage de votre système.

vous devez éditer manuellement le fstab.

MAIS, il existe d'autres moyens de monter automatiquement des partitions, des outils tels que les udisks.

https://help.ubuntu.com/community/AutomaticallyMountPartitions

4
Ravexina

Voici un exemple de script Korn Shell que j'ai créé pour voir s'il était possible d'automatiser la création du LV, du système de fichiers et du point de montage, puis d'ajouter l'entrée appropriée à/etc/fstab.

Je ne sais pas si cela fonctionne sur tous les systèmes et toutes les configurations, mais cela semble répondre à mes besoins jusqu'à présent. Il est loin d'être un produit fini (vérification d'erreur pas beaucoup), mais il me montre que l'automatisation des routines lvcreate/mkfs/mount en une seule commande devrait être possible.

#!/bin/ksh
typeset -i ERRVAL

while getopts V:L:m:s:t:h FSTR
do
  case ${FSTR} in
  V) {
     VGNAME=${OPTARG}
     };;
  L) {
     LVNAME=${OPTARG}
     };;
  m) {
     MNTPT=${OPTARG}
     };;
  s) {
     SIZE=${OPTARG}
     };;
  t) {
     FSTYPE=${OPTARG}
     };;
  h) {
     print "help screens go here"
     exit 0
     };;
  esac
done

if test "${VGNAME}" = ""
then
  print "ERROR: Volume group name must be specified. Valid volume groups:"
  vgdisplay |grep -i "vg name" |awk '{print $3}'
  exit 1
Elif test "$(vgdisplay |grep -i "vg name" |grep "${VGNAME}$")" = ""
then
  print "ERROR: Unrecognized volume group name. Valid volume groups:"
  vgdisplay |grep -i "vg name" |awk '{print $3}'
  exit 1
fi

if test "${LVNAME}" = ""
then
  print "ERROR: Logical volume name must be specified."
  exit 1
Elif test "$(lvdisplay|grep -i "lv name"|awk '{print $3}'|grep "^${LVNAME}$")" !
= ""
then
  print "ERROR: Logical volume already exists with that name."
  exit 1
fi

if test "${FSTYPE}" = ""
then
  print "Type of filesystem not specified, defaulting to ext4"
  FSTYPE=ext4
fi

if test "${SIZE}" = ""
then
  print "ERROR: Logical volume size must be supplied."
  exit 1
else
  TMPSIZE="$(echo "${SIZE}" |tr -d '[ a-fhijln-zA-FHIJLN-Z!@#$%~]')"
  SIZE="${TMPSIZE}"
  if test "$(echo "${SIZE}" |egrep "K|k|M|m|G|g")" = ""
  then
    print "ERROR: LV size must be listed in K, M, or G."
    exit 1
  fi
fi

if test "${MNTPT}" = ""
then
  print "ERROR: Mount point not specified."
  print ""
  exit 1
Elif test -d ${MNTPT}
then
  print "Mount point already exists: ${MNTPT}"
  print "Use this directory (Y/N)? \c"
  read YORN
  if test "${YORN}" != "Y" -a "${YORN}" != "y"
  then
    exit 1
  fi
Elif test ! -d ${MNTPT}
then
  print "Mount point does not exist: ${MNTPT}"
  print "Create this directory (Y/N)? \c"
  read YORN
  if test "${YORN}" = "Y" -o "${YORN}" = "y"
  then
    mkdir ${MNTPT}
  else
    exit 1
  fi
fi

DEVNAME="/dev/${VGNAME}/${LVNAME}"

# CREATE THE LOGICAL VOLUME
print "Issuing command:"
print "lvcreate -L${SIZE} -n ${DEVNAME} ${VGNAME}"
lvcreate -L${SIZE} -n ${DEVNAME} ${VGNAME}
ERRVAL=$?
if test ${ERRVAL} -ne 0
then
  print "ERROR: lvcreate command exited with non-zero status."
  exit 0
fi

# CREATE THE FILESYSTEM
print "Issuing command:"
print "mkfs -t ${FSTYPE} ${DEVNAME}"
mkfs -t ${FSTYPE} ${DEVNAME}
ERRVAL=$?
if test ${ERRVAL} -ne 0
then
  print "ERROR: mkfs command exited with non-zero status."
  exit 0
fi

# MOUNT POINT SHOULD ALREADY EXIST SO MOUNT THE NEW FILESYSTEM
print "Issuing command:"
print "mount ${DEVNAME} ${MNTPT}"
mount ${DEVNAME} ${MNTPT}
ERRVAL=$?
if test ${ERRVAL} -ne 0
then
  print "ERROR: mount command exited with non-zero status."
  exit 0
fi

# ADD TO /etc/fstab
print "Obtain UUID value from blkid"
UUID=$(blkid |grep "${VGNAME}-${LVNAME}:"|cut -f2 -d'='|cut -f2 -d'"')
if test "${UUID}" = ""
then
  print "ERROR: Unable to determine UUID to use for ${LVNAME}"
  exit 1
fi
print "Saving /etc/fstab as /etc/fstab.$$"
/bin/cp -p /etc/fstab /etc/fstab.$$
print "Adding /etc/fstab entry"
echo "UUID=${UUID} ${MNTPT} ${FSTYPE} defaults 0 0" >> /etc/fstab
ERRVAL=$?
if test ${ERRVAL} -ne 0
then
  print "ERROR: Could not save entry to /etc/fstab"
  exit 1
fi
# END OF SCRIPT #
0
S. Nixon