Я написал сценарий, который требует прочитать несколько записей в /etc/fstab
. Я протестировал скрипт, вручную добавив некоторые записи в /etc/fstab
, а затем восстановил файл до его исходного содержимого, а также вручную. Теперь я хотел бы автоматизировать эти тесты и запустить их как отдельный скрипт. Однако я не чувствую себя комфортно с изменением /etc/fstab
. Я думал создать резервную копию /etc/fstab
, а затем изменить ее и, наконец, восстановить исходный файл после завершения тестов. Я бы предпочел, чтобы временно изменить местоположение fstab
.Изменить местоположение/etc/fstab
Есть ли способ изменить расположение fstab
, скажем, /usr/local/etc/fstab
так что, когда mount -a
запускается из сценария только записи в /usr/local/etc/fstab
обрабатываются?
UPDATE:
Я использовал bishop's solution установкой LIBMOUNT_FSTAB=/usr/local/etc/fstab
. Я несколько раз просматривал справочную страницу mount
, но я никогда не замечал эту переменную. Я не уверен, что эта переменная всегда была там, и я просто забыл об этом или был добавлен в какой-то момент. Я использую mount from util-linux 2.27.1
и по крайней мере в этой версии LIBMOUNT_FSTAB
доступен и задокументирован на man-странице. Он находится в разделе ENVIRONMENT
в конце. Это сделает мои автоматические тесты более безопасными в будущем.
UPDATE2:
Так было некоторое обсуждение, является ли соответствующий вопрос программирования или нет, я решил написать небольшой скрипт, который демонстрирует использование LIBMOUNT_FSTAB.
#!/bin/bash
libmount=libmount_fstab
tmpdir="/tmp/test_${libmount}_folder" # temporary test folder
mntdir="$tmpdir/test_${libmount}_mountfolder" # mount folder for loop device
img="$tmpdir/loop.img" # dummy image for loop device
faketab="$tmpdir/alternate_fstab" # temporary, alternative fstab
# get first free loop device
loopdev=$(losetup -f)
# verify there is a free loop device
if [[ -z "$loopdev" ]];then
echo "Error: No free loop device" >&2
exit 1
fi
# check that loop device is not managed by default /etc/fstab
if grep "^$loopdev" /etc/fstab ;then
echo "Error: $loopdev already managed by /etc/fstab" >&2
exit 1
fi
# make temp folders
mkdir -p "$tmpdir"
mkdir -p "$mntdir"
# create temporary, alternative fstab
echo "$loopdev $mntdir ext2 errors=remount-ro 0 1" > "$faketab"
# create dummy image for loop device
dd if=/dev/zero of="$img" bs=1M count=5 &>/dev/null
# setup loop device with dummy image
losetup "$loopdev" "$img" &>/dev/null
# format loop device so it can be mounted
mke2fs "$loopdev" &>/dev/null
# alter location for fstab
export LIBMOUNT_FSTAB="$faketab"
# mount loop device by using alternative fstab
mount "$loopdev" &>/dev/null
# verify loop device was successfully mounted
if mount | grep "^$loopdev" &>/dev/null;then
echo "Successfully used alternative fstab: $faketab"
else
echo "Failed to use alternative fstab: $faketab"
fi
# clean up
umount "$loopdev" &>/dev/null
losetup -d "$loopdev"
rm -rf "$tmpdir"
exit 0
Мой сценарий в основном управляет внешними устройствами, которые не прилагаются большую часть времени. Я использую loop-устройства для имитации внешних устройств для проверки функциональности моего скрипта. Это экономит много времени, так как мне не нужно прикреплять/повторно подключать несколько физических устройств. Я думаю, что это доказывает, что возможность использовать альтернативу fstab
является очень полезной функцией и позволяет создавать сценарии безопасного сценария при каждом разборе/изменении fstab
. Фактически, я решил частично переписать свой сценарий, чтобы он мог также использовать альтернативу fstab
. Поскольку большинство внешних устройств почти никогда не привязаны к системе, их соответствующие записи просто загромождают /etc/fstab
.
SO для вопросов программирования. Unix.SE лучше было бы задать вопросы о настройке Unix. – Barmar
Это звучит как сделать это обратным для меня. Сделайте свой сценарий для определения местоположения из переменной среды (с помощью '/ etc/fstab', если он не установлен). –
AFAIK, нет возможности сказать 'mount' использовать альтернативное местоположение для' fstab'. – Barmar