我在 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 磁盘你看到的叫做实例存储(或者临时存储) 并且是被毁坏每次你停止实例和创建新的每次你开始实例。
这意味着两件事:
不要存储任何宝贵的数据您希望在停止/启动时保留 - 当您停止时,它将全部消失。这些实例存储磁盘非常适合缓存、临时目录、交换空间等。任何在丢失后可以轻松重新创建的东西。
每次启动实例时磁盘是空白的- 您必须先格式化它(例如
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
如果你需要更多解释,请评论此答案