0

のいくつかのエントリを読み取る必要があるスクリプトを作成しました/etc/fstab。いくつかのエントリを手動で追加してスクリプトをテストし/etc/fstab、ファイルを元の内容に手動で復元しました。これらのテストを自動化し、別のスクリプトとして実行したいと思います。しかし、私は変更を変更するという考えに満足していません/etc/fstab。のバックアップ コピーを作成し/etc/fstab、それを変更して、テストが完了した後に最終的に元のファイルを復元することを考えていました。の場所を一時的に変更できるとよいのですがfstab

fstabたとえば、 toの場所を変更して、スクリプト内から を実行し/usr/local/etc/fstabたときにのエントリのみが処理されるようにする方法はありますか?mount -a/usr/local/etc/fstab

アップデート:

を設定してビショップのソリューションを使用しましたLIBMOUNT_FSTAB=/usr/local/etc/fstabmount過去に何度かのマニュアル ページをざっと読んだことがありますが、この変数に気付きませんでした。この変数が常にそこにあり、単に見落としていたのか、それともある時点で追加されたのかはわかりません。私は使用してmount from util-linux 2.27.1おり、少なくともこのバージョンLIBMOUNT_FSTABでは利用可能で、マニュアルページに記載されています。それはENVIRONMENT最後のセクションにあります。これにより、将来の自動テストがより安全になります。

更新 2:

これが適切なプログラミングの質問であるかどうかについて議論があったため、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

私のスクリプトは、ほとんどの場合接続されていない外部デバイスを主に管理します。ループ デバイスを使用して外部デバイスをシミュレートし、スクリプトの機能をテストします。複数の物理デバイスを接続/再接続する必要がないため、これにより多くの時間を節約できます。fstabこれは、代替手段を使用できることが非常に便利な機能であり、解析/変更が必要なときはいつでも安全なテスト シナリオをスクリプト化できることを証明していると思いますfstab。実際、スクリプトを部分的に書き直して、代替も使用できるようにすることにしましたfstab。ほとんどの外部デバイスがシステムに接続されることはめったにないため、対応するエントリが散らかっているだけ/etc/fstabです。

4

1 に答える 1