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

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

我在 c5d.2xlarge HW 上使用 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

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

/dev/nvme1n1 /home/ubuntu/spda ext4 defaults,users,nofail,discard 0 2

我的问题:

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

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

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

答案1

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

然后你必须确保脚本在启动时执行。不同的发行版执行的方法不同,对于 Ubuntu 16.04,这应该有效:如何在 systemd Linux 启动时自动执行 shell 脚本

希望有帮助:)

答案2

使用较新版本的 cloud-init,您可以使用磁盘设置模块。Cloud-init 适用于所有主流操作系统(甚至 Windows)的所有云。使用 /etc/fstab 中的以下行(根据需要修改设备和挂载点):

/dev/nvme1n1    /mnt    auto    defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig   0   2

没有 cloud-init?没问题,因为较新的 systemd 还支持 x-systemd.makefs 和一些其他文件,如下所述:

https://manpages.debian.org/testing/systemd/systemd-makefs.8.en.html https://manpages.debian.org/testing/systemd/systemd.mount.5.en.html

答案3

在 /etc/fstab 文件中添加相应的行,格式如下

<device> <mount_point> <filesystem> <options> <dump-freq> <pass-num>

例如,如果您有一个 ext4 分区,并且想要自动挂载在 /home/ubuntu

/dev/nvme1n1 /home/ubuntu ext4 defaults,rw,noatime 0 0

文件系统挂载后,你应该赋予它访问它的所有权,但要在挂载后执行此操作

chown ubuntu /home/ubuntu -R

如果你需要更多解释,请评论此答案

相关内容