簡體   English   中英

更改/ etc / fstab的位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM