修改服务器上的fstab文件

修改服务器上的fstab文件

平台:Linux Bash shell

只需要修改 /etc/fstab 文件中的第二列,即 NAS 共享 /vol/wrm6 的挂载点。

NAS1:/vol/wrm6  /archive/net1  NFS default 0 0
NAS2:/vol/wrm6 /archive/06 NFS default 0 0
NAS3:/vol/wrm7 /archive/07 NFS default 0 0
 NAS4:/vol/wrm8 /archive/09 NFS default 0 0

应修改路径以在第二列上添加后缀:

NAS1:/vol/wrm6  /archive/net1_05042018  NFS default 0 0
NAS2:/vol/wrm6 /archive/06_05042018 NFS default 0 0
 NAS3:/vol/wrm7 /archive/07 NFS default 0 0
 NAS4:/vol/wrm8 /archive/09 NFS default 0 0

/archive/NAS 共享 /vol/wrm6下的任何目录都会被附加_05042018,如/archive/*_05042018.*意味着可以是任何目录

答案1

这应该会照顾到您想要的内容,并将添加到涉及 wrm6 的_05042018所有目录中。archive

sed -i -E "s/(.*wrm6[[:space:]]+\/archive\/)(.+)([[:space:]]+NFS.*)/\1\2_05042018\3/g" /etc/fstab

答案2

以下脚本将

  1. 检查新的挂载点是否确实存在(否则中止),
  2. 对现有文件进行日期备份/etc/fstab,最后
  3. 修改/etc/fstab文件。

我建议在复制fstab多次检查该文件以确保它可以在您的系统上运行。只需更改fstab脚本顶部的变量以指向不同的文件即可。

仅脚本添加挂载点的后缀。如果那里已经有一个,它不会尝试删除它。

#!/bin/sh

set -e  # terminate on errors (don't remove!)

fstab='/etc/fstab'                    # these could be made command line arguments
device_pattern='^NAS[0-9]:/vol/wrm6'  # but I kept them like this for simplicity
dir_pattern='^/archive/'
suffix='_05042018'

# Check for non-existing mount points
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
    '$1 ~ dev && $2 ~ dir { print NR, $1, $2 suf }' "$fstab" |
while read lineno device mtpoint; do
    if [ ! -d "$mtpoint" ]; then
        printf 'Mount point "%s" for "%s" is missing on line %d of %s\n' \
            "$mtpoint" "$device" "$lineno" "$fstab" >&2
        #exit 1
    fi
done

# Make backup
bkname="$fstab-backup.$(date +%F_%H%M%S)"
cp "$fstab" "$bkname"

# Modify file
awk -v suf="$suffix" -v dev="$device_pattern" -v dir="$dir_pattern" \
    '$1 ~ dev && $2 ~ dir { $2 = $2 suf } 1' "$bkname" >"$fstab"

echo 'Done.'
echo 'New fstab:'
cat "$fstab"

“不要删除!”评论是真实的。如果set -e删除,则如果找到无效的安装点,脚本将不会终止(至少在bash或下运行时pdksh)。

相关内容