Автоматическое добавление файловых систем к/etc/fstab

Я использую lvcreate и mkfs для создания новых файловых систем на моем Сервере Ubuntu 18.04 систем LTS. Одна вещь, которую я нахожу сбивающими с толку, состоит в том, что система автоматически не добавляет новых файловых систем, которые я создаю в/etc/fstab файл. Единственные добавленные являются теми, которые были созданы, когда система была первоначально создана во время установки.

Есть ли какой-либо путь (mkfs флаг или отдельный способный пакет), что новые файловые системы могли быть вставлены автоматически в/etc/fstab файле вместо того, чтобы требовать, чтобы администратор вручную отредактировал файл?

1
задан 6 September 2018 в 19:12

2 ответа

Это нормально, потому что нет никакого пути к инструментам или операционной системе для знания, где Вы хотите смонтировать разделы, логические тома или и т.д. что Вы только что создали.

Те, которых Вы создаете при установке системы, обнаруживаются выбором (Когда Вы выбираете Ваш root, home, и т.д.), и добавляются к fstab, потому что они необходимы для начальной загрузки Вашей системы.

необходимо вручную отредактировать fstab.

НО, существуют другие способы автоматически смонтировать разделы, инструменты как udisks.

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

4
ответ дан 3 December 2019 в 06:51

Вот демонстрационный сценарий оболочки Korn, который я сделал, чтобы видеть, было ли возможно автоматизировать создание LV, файловой системы и точки монтирования все в одном, и затем добавить соответствующую запись в/etc/fstab.

Не уверенный, если это работает над всеми системами и конфигурациями, но это, кажется, работает на мои потребности до сих пор. Это далеко от готового изделия (не много проверки ошибок), но просто показывает мне, что автоматизация lvcreate/mkfs/mount стандартных программ в одну команду должна быть возможной.

#!/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
ответ дан 3 December 2019 в 06:51

Другие вопросы по тегам:

Похожие вопросы: