我正在尝试寻找将操作系统文件与用户文件分离的最佳实践方法。我想将我的新实例(创建时)硬盘分成多个分区(以获得更好的性能和安全性)。
如何确保以下文件系统安装在 c4.xlarge 实例、Ubuntu Server 14.04 LTS(HVM)、SSD 卷类型中的单独分区上:
单独的分区:
/usr
/var
/tmp
/boot
/home
Separate partition for Apache
多谢
答案1
实际上有一个令人信服的理由不拆分 EC2 中的分区:
...基准性能为 3 IOPS/GiB...
通用 SSD 卷(往往提供最佳的性价比)越大,每秒可以处理的 I/O 操作就越多。
通用 (SSD) 卷性能受卷大小控制,卷大小决定了卷的基准性能水平以及其积累 I/O 信用的速度;卷越大,基准性能水平越高,积累 I/O 信用的速度越快。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_gp2
个体越大体积越大,性能越好。这是云服务器(至少在 EC2 中)与物理服务器之间的显著差异之一。在不同的磁盘上拥有这些不同的文件系统直观地意味着性能提高,但结果却恰恰相反。一个大卷的性能优于两个一半大小的卷,除非你的工作负载恰好均匀分布在两个卷上……这不太可能。
如果您的多个分区位于同一个卷上,那么就可以消除性能问题,但是,在同一个卷上设置多个分区就没有什么意义了,因为这最终会导致一个分区上出现闲置的可用空间,而另一个分区上的空间却十分紧张。
当然,您可以为配置的 IOPS 支付额外费用,但不“对抗”系统似乎是明智的做法。
当然,当您在 EC2 上进行“全新安装”时,您并不是在传统意义上“安装”操作系统,而是在克隆由特定 Linux 发行版制作或为特定 Linux 发行版制作的基本安装……并且您可以从此基准设置每个新 VM,或者您可以创建自己的基准映像 (Amazon Machine Image/AMI),其中包含一些元数据和指向磁盘卷快照的指针,这些快照将被克隆到新卷中以构建每台新机器……这意味着您必须付费存储具有所需分区和大小的快照……或者在构建每台机器后调整它们的大小。另一方面,如果您使用单个文件系统,主映像可以很小,并在首次启动时自动增大文件系统以将磁盘填充到特定机器已配置的任何大小。
当然,这在一定程度上是一个观点问题,但我的标准做法是使用单一文件系统除了在某些情况下,我的目的需要大量存储空间,例如数据库或应用程序需要异常大的临时/工作目录。(我有几个系统,它们需要 2TB 的临时空间,以及 20GB 的根/启动/其他磁盘卷……没有必要存储 2TB 快照来克隆机器。)
那么,假设你不相信。你该如何完成你要求的任务呢?手动操作。
您需要 2 个实例,位于同一个可用区。在第一个实例上进行基本安装。您将暂时使用它。启动第二个实例,其中包含您打算连接的所有磁盘卷,无论出于何种目的。安装操作系统,然后记下卷到设备的映射。然后停止第二个实例,分离所有卷,并将它们连接到已在运行的第一个实例。根据需要格式化额外的磁盘(您能对它们进行分区,但这不是必需的——使用没有分区表的整个块设备,例如,/dev/xvdf
而不是/dev/xvdf1
使以后扩展文件系统、挂载所有文件系统、重新排列文件、编辑/etc/fstab
(不是在/etc
临时实例上,而是在临时实例其他位置附加的根卷上)变得更加容易,以便额外的文件系统将从正确的卷挂载到正确的位置,然后卸载所有文件系统,分离卷,以正确的顺序重新连接它们,然后重新启动。
验证它已启动,并且一切就绪后,从中创建一个 AMI,然后从那里克隆您未来的机器,这样您就可以按照自己的意愿获得磁盘卷和文件系统以及(可选)分区。如果没有,您可能最终不得不检查控制台日志,然后分离卷并将它们重新连接到临时机器,直到找到您错过的内容……但原则上,这一切都是完全可行的,也许比听起来更简单。无论如何,有一点。