自动执行 GCP 永久性磁盘初始化

Yur*_*rik 9 google-compute-engine google-cloud-platform terraform terraform-provider-gcp

是否有任何脚本可以自动格式化永久性磁盘并将其附加到 Google Cloud VM 实例,而不是执行格式化和安装步骤

永久性磁盘是使用 Terraform 创建的,它还会创建一个 VM 并使用attached_disk命令将磁盘附加到它。

我希望在 VM 实例启动时运行一个简单的脚本:

  • 检查附加的磁盘是否已格式化,如果需要,请使用 ext4 进行格式化
  • 检查磁盘是否已挂载,如果未挂载则挂载
  • 别的什么都不做

nei*_*ilH 8

您是否考虑过在实例上使用启动脚本(我认为您也可以使用 Terraform 添加启动脚本)?您可以使用if循环来发现磁盘是否已格式化,如果没有,您可以尝试运行您链接的文档中的格式化/挂载命令(我意识到您已经建议您不要遵循文档中的手动步骤,但这些可以集成到启动脚本中以达到预期的结果)。

如果磁盘未格式化,则运行以下输出和空字符串:

 sudo blkid /dev/sdb
Run Code Online (Sandbox Code Playgroud)

因此,您可以在启动脚本中使用它来发现磁盘是否已格式化,如果不是,则执行格式化/挂载。例如,您可以使用类似的方法(注意*** 如果磁盘已格式化但未安装,这可能很危险,如果您的用例可能涉及可能已格式化的现有磁盘,则不应使用):

#!/bin/bash


if sudo blkid /dev/sdb;then 
        exit
else 
        sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb; \
        sudo mkdir -p /mnt/disks/newdisk
        sudo mount -o discard,defaults /dev/sdb /mnt/disks/newdisk
fi
Run Code Online (Sandbox Code Playgroud)


Raj*_*ena 6

标记的答案对我不起作用,因为该sudo blkid /dev/sdb部分总是返回一个值(因此为 true)并且脚本会退出。

我更新了脚本以检查输入fstab并为脚本添加了安全选项。

#!/bin/bash
set -uxo pipefail

MNT_DIR=/mnt/disks/persistent_storage
DISK_NAME=my-disk

# Check if entry exists in fstab
grep -q "$MNT_DIR" /etc/fstab
if [[ $? -eq 0 ]]; then # Entry exists
    exit
else
    set -e # The grep above returns non-zero for no matches & we don't want to exit then.

    # Find persistent disk's drive value, prefixed by `google-`
    DEVICE_NAME="/dev/$(basename $(readlink /dev/disk/by-id/google-${DISK_NAME}))"

    sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard $DEVICE_NAME
    sudo mkdir -p $MOUNT_DIR
    sudo mount -o discard,defaults $DEVICE_NAME $MOUNT_DIR

    # Add fstab entry
    echo UUID=$(sudo blkid -s UUID -o value $DEVICE_NAME) $MNT_DIR ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
fi
Run Code Online (Sandbox Code Playgroud)

如果你想下载它,这是要点 - https://gist.github.com/raj-saxena/3dcaa5c0ba0be88ed91ef3fb50d3ce85