[英]Change location of /etc/fstab
我編寫了一個腳本,該腳本需要讀取/etc/fstab
的一些條目。 我已經通過在/etc/fstab
手動添加一些條目,然后手動將文件還原到其原始內容來測試腳本。 現在,我想自動化這些測試,並將其作為單獨的腳本運行。 但是,我確實對更改/etc/fstab
的想法不滿意。 我當時想制作/etc/fstab
的備份副本,然后對其進行更改,最后在測試完成后還原原始文件。 如果可以臨時更改fstab
的位置,我會更喜歡。
有沒有辦法將fstab
的位置更改為/usr/local/etc/fstab
以便從腳本內運行mount -a
時僅處理/usr/local/etc/fstab
中的條目?
更新:
我通過設置LIBMOUNT_FSTAB=/usr/local/etc/fstab
使用bishop的解決方案 。 過去,我曾幾次瀏覽過mount
的手冊頁,但我從未注意到此變量。 我不確定這個變量是否一直存在,我只是忽略了它還是在某個時候添加了它。 我使用的mount from util-linux 2.27.1
,至少在此版本中, LIBMOUNT_FSTAB
可用並在手冊頁中進行了說明。 它位於末尾的“ 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
我的腳本主要管理大多數時間未連接的外部設備。 我使用循環設備模擬外部設備以測試腳本的功能。 由於我不必附加/重新附加多個物理設備,因此節省了很多時間。 我認為這證明了能夠使用替代fstab
是一項非常有用的功能,並且允許在需要解析/更改fstab
時編寫腳本編寫安全的測試方案。 實際上,我決定部分重寫我的腳本,以便它也可以使用替代的fstab
。 由於大多數外部設備幾乎都沒有連接到系統,因此它們的相應條目只是在/etc/fstab
。
將修改fstab內容的代碼重構為一個函數,然后測試該函數正確地修改了您提供的虛擬fstab文件。 然后,您可以放心地將該功能用作mount
管道的一部分。
function change_fstab {
local fstab_path=${1:?Supply a path to the fstab file}
# ... etc
}
change_fstab /etc/fstab && mount ...
或者, 根據libmount docs設置LIBMOUNT_FSTAB
:
LIBMOUNT_FSTAB=/path/to/fake/fstab mount ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.