Я использую lvcreate и mkfs для создания новых файловых систем на моем Сервере Ubuntu 18.04 систем LTS. Одна вещь, которую я нахожу сбивающими с толку, состоит в том, что система автоматически не добавляет новых файловых систем, которые я создаю в/etc/fstab файл. Единственные добавленные являются теми, которые были созданы, когда система была первоначально создана во время установки.
Есть ли какой-либо путь (mkfs флаг или отдельный способный пакет), что новые файловые системы могли быть вставлены автоматически в/etc/fstab файле вместо того, чтобы требовать, чтобы администратор вручную отредактировал файл?
Это нормально, потому что нет никакого пути к инструментам или операционной системе для знания, где Вы хотите смонтировать разделы, логические тома или и т.д. что Вы только что создали.
Те, которых Вы создаете при установке системы, обнаруживаются выбором (Когда Вы выбираете Ваш root
, home
, и т.д.), и добавляются к fstab, потому что они необходимы для начальной загрузки Вашей системы.
необходимо вручную отредактировать fstab.
НО, существуют другие способы автоматически смонтировать разделы, инструменты как udisks.
https://help.ubuntu.com/community/AutomaticallyMountPartitions
Вот демонстрационный сценарий оболочки 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 #