自动化 GCP 永久性磁盘初始化
Automate GCP persistent disk initialization
是否有任何脚本可以自动格式化永久磁盘并将其附加到 Google 云 VM 实例,而不是 formatting & mounting steps?
永久磁盘是使用 Terraform 创建的,它还会创建一个 VM 并使用 attached_disk
命令将磁盘附加到它。
我希望 运行 VM 实例上的一个简单脚本启动将:
- 检查附加磁盘是否已格式化,如果需要用 ext4 格式化
- 检查磁盘是否挂载,没有则挂载
- 否则什么都不做
您是否考虑过在实例上使用 startup script(我想您也可以使用 Terraform 添加启动脚本)?您可以使用 if
循环来发现磁盘是否已格式化,如果没有,您可以尝试 运行 您链接的文档中的 formatting/mounting 命令(我知道您建议您这样做不想遵循文档中的手动步骤,但可以将这些集成到启动脚本中以达到预期的结果)。
运行 如果磁盘未格式化,则输出以下内容和空字符串:
sudo blkid /dev/sdb
因此,您可以在启动脚本中使用它来发现磁盘是否已格式化,如果未格式化则执行 formatting/mounting。例如,您可以使用类似这样的东西(注意***如果磁盘已格式化但未安装,这可能很危险,如果您的用例可能涉及可能已经格式化的现有磁盘,则不应使用):
#!/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
标记的答案对我不起作用,因为 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
这里是要点,如果你想下载它 - https://gist.github.com/raj-saxena/3dcaa5c0ba0be88ed91ef3fb50d3ce85
是否有任何脚本可以自动格式化永久磁盘并将其附加到 Google 云 VM 实例,而不是 formatting & mounting steps?
永久磁盘是使用 Terraform 创建的,它还会创建一个 VM 并使用 attached_disk
命令将磁盘附加到它。
我希望 运行 VM 实例上的一个简单脚本启动将:
- 检查附加磁盘是否已格式化,如果需要用 ext4 格式化
- 检查磁盘是否挂载,没有则挂载
- 否则什么都不做
您是否考虑过在实例上使用 startup script(我想您也可以使用 Terraform 添加启动脚本)?您可以使用 if
循环来发现磁盘是否已格式化,如果没有,您可以尝试 运行 您链接的文档中的 formatting/mounting 命令(我知道您建议您这样做不想遵循文档中的手动步骤,但可以将这些集成到启动脚本中以达到预期的结果)。
运行 如果磁盘未格式化,则输出以下内容和空字符串:
sudo blkid /dev/sdb
因此,您可以在启动脚本中使用它来发现磁盘是否已格式化,如果未格式化则执行 formatting/mounting。例如,您可以使用类似这样的东西(注意***如果磁盘已格式化但未安装,这可能很危险,如果您的用例可能涉及可能已经格式化的现有磁盘,则不应使用):
#!/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
标记的答案对我不起作用,因为 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
这里是要点,如果你想下载它 - https://gist.github.com/raj-saxena/3dcaa5c0ba0be88ed91ef3fb50d3ce85