Backup

確保在執行備份之前安裝網路驅動器

  • May 24, 2019

我正在嘗試編寫一個可以部署在許多不同 linux 伺服器上的備份腳本,其中一些安裝網路驅動器,如 /etc/fstab 中所述。我希望我的腳本能夠在備份之前查看是否有任何網路驅動器被解除安裝,以確保它們不會被取消保存。有沒有辦法在 bash 腳本中可靠地檢查這一點?

想到的一種方法是遍歷掛載點列表並查看每個掛載點下存在多少文件。值 1 可能意味著文件系統沒有掛載(並且只有目錄本身存在)。但是,如果掛載點是嵌套的,則此策略將不起作用。“嵌套”是指安裝點,例如:

/mnt/server1/share1
/mnt/server1/share1/share2
/mnt/server1/share1/share2/share3

當某人/某個程序不知道掛載不存在時,我也看到此失敗,並且無論如何都將文件複製到它,並且文件被寫入底層文件系統,而不是應該被掛載的文件系統那裡。

但是,如果您的結構更“平坦”(或者如果可以將其製成平坦以用於備份目的),例如:

/mnt/server1/share1
/mnt/server1/share2
/mnt/server2/share3

然後:

MNTS="/mnt/server1/share1 /mnt/server1/share2 /mnt/server2/share3"
for DIR in $MNTS; do
 N=$(find $DIR | head -10 | wc -l)
 if [ $N -eq 1 ]; then
   print "%s appears to not be mounted\n" "$DIR"
 else
   # back it up
 fi
done

另一種可能略微特定於作業系統的方法,或者至少在mount’ 的輸出格式發生變化時會發生變化,是對 ’ 的輸出進行暴力檢查mount。假設您mount總是使用空格並且從不使用製表符,那麼:

MNTS="/mnt/server1/share1 /mnt/server1/share2 /mnt/server2/share3"
for DIR in $MNTS; do
 if ! mount | grep -F " $DIR "; then
   print "%s appears to not be mounted\n" "$DIR"
 else
   # back it up
 fi
done

引用自:https://serverfault.com/questions/968483