在 Ubuntu 16.04 中的 AWS EC2 上自动挂载 SSD 实例存储

Joh*_*son 10 ssd amazon-ec2 amazon-web-services nvme ubuntu-16.04

我在 c5d.2xlarge 硬件上使用来自 AWS 的 Ubuntu 16.04 EC2。它配备了一个 200 GB 的 SSD,称为/dev/nvme1n1.

我可以使用以下方法安装此驱动器:

$ sudo mkfs.ext4 -E nodiscard /dev/nvme1n1

$ sudo mount -o discard /dev/nvme1n1 /home/ubuntu
Run Code Online (Sandbox Code Playgroud)

为了尝试让它自动挂载,我还添加了/etc/fstab

/dev/nvme1n1 /home/ubuntu/spda ext4 defaults,users,nofail,discard 0 2
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 当我停止/启动实例时,它似乎不会自动挂载。我不知道如何修复/调试。

  • 当我手动挂载它时,创建的文件夹属于根目录,我无法以用户身份访问它。

我的目标是能够启动实例并且已经安装了驱动器并且用户可以访问。

MLu*_*MLu 8

您看到的200GB SSD 磁盘称为实例存储(或临时存储),每次停止实例时都会销毁,每次启动实例时都会创建新的磁盘

这意味着两件事:

  1. 不要存储任何您想在停止/启动时保留的宝贵数据- 当您停止它时,它会全部消失。这些实例存储磁盘非常适合缓存、临时目录、交换空间等。如果丢失了可以轻松重新创建的任何东西。

  2. 每次启动实例时,磁盘都是空白的- 您必须先对其进行格式化(例如mkfs.ext4),然后才能使用它。下次停止/启动时,它将再次空白,您必须mkfs再次输入。

    这就是为什么简单地将它添加到/etc/fstab是不够的 - 在引导脚本尝试安装它时不会格式化磁盘。

要解决您的问题,您必须创建一个自定义脚本,例如/usr/local/sbin/mount-instance-store.sh大致包含以下内容:

mkfs.ext4 -E nodiscard -m0 /dev/nvme1n1
mount -o discard /dev/nvme1n1 /home/ubuntu/spda
chown ubuntu:ubuntu /home/ubuntu/spda
Run Code Online (Sandbox Code Playgroud)

然后,您必须确保在启动时执行脚本。对于不同的发行版,这样做的方法是不同的,对于 Ubuntu 16.04,这应该有效:How to automatically execute shell script at startup boot on systemd Linux

希望有帮助:)

  • 通过制作我的服务文件让它工作:[Unit] Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/local/sbin/mount-instance-store.sh [Install] WantedBy=默认目标 (2认同)